За последние 24 часа нас посетили 17495 программистов и 1720 роботов. Сейчас ищут 1565 программистов ...

невозможно отобразить страницу

Тема в разделе "PHP и базы данных", создана пользователем keymaster, 27 апр 2006.

  1. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Задача - написание сообщения, относящегося к многим темам.
    На форме чекбоксы
    В зависимости от их отметок, надо заполнить таблицу.
    sql формируется так:
    PHP:
    1. do {
    2.    $topid = "topic".$row_topics['id'];
    3.    if (isset($_POST[$topid]))
    4.    {
    5.      $PostSQL="INSERT INTO post_to_topic (post_id, topic_id, is_in)
    6.              VALUES('".$Post_ID."','".$row_topics['id']."','1')";
    7.      mysql_select_db($database_oprbase, $oprbase);
    8.      $Res = mysql_query($PostSQL, $oprbase) or die(mysql_error());
    9.    }
    10.   } while ($row_topics = mysql_fetch_assoc($topics));
    Причём, формируется правильно, т.е. если вместо
    PHP:
    1. mysql_select_db($database_oprbase, $oprbase);
    2. $Res = mysql_query($PostSQL, $oprbase) or die(mysql_error());
    написать
    PHP:
    1. echo $PostSQL
    и потом этот запрос скормить hppmyadminу, он работает, а если оставлять так, то появляется "невозможно отобразить страницу".

    Приведённый вариант - уже второй. Сначала SQL формировался в цикле, а выполнялся уже после его завершения. Результат такойже.
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    1. зачем в цикле select_db() достаточно "одной таблэтки" перед циклом.
    2. поставь в цикл

    print('!');
    flush()

    может просто зацикливается?
     
  3. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Поставил. Как и ожидалось, стали печататься воскл. знаки.
    Где? Если запрос не выполнять, то всё, кроме него, работает.

    Заработало в таком виде:
    PHP:
    1. do {
    2.    $topid = "topic".$row_topics['id'];
    3.    if (isset($_POST[$topid]))
    4.    {
    5.    $PostSQL = "INSERT INTO post_to_topic (post_id, topic_id, is_in)
    6.               VALUES('".$Post_ID."','".$row_topics['id']."','1')";  
    7.     $Res = mysql_query($PostSQL, $oprbase) or die(mysql_error());  
    8.     print('!');
    9.     flush();             
    10.    }
    11.   } while ($row_topics = mysql_fetch_assoc($topics));
    12.  
    Но не будет ли такая конструкция сильно нагружать mysql?
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    будет нагружать - будем думать. пока забей.
     
  5. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Я так понял, что есть какая-то глюка с выполнением многострочных запросов.
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    кака така глюка? точнее?
     
  7. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    ну.... цикл формирует запрос:
    изначально - $sql = "";
    в каждой итерации происходит:
    $sql = $sql." insert into table(field) values(value); "
    если после цикла написать echo $sql, то будет примерно следующее:
    insert into table(field) values(value); insert into table(field) values(value); insert into table(field) values(value); insert into table(field) values(value);

    Если это скопировать и скормит PHPMYADMINу, то запрос успешно выполниться,
    а если сделать:
    mysql_select_db($database_oprbase, $oprbase);
    $Res = mysql_query($sql, $oprbase) or die(mysql_error());
    то вылетает "невозможно отобразить страницу".
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    доку читаем?
    _query() обрабатывает ТОЛЬКО ОДИН ЗАПРОС! в целях безопасности.
     
  9. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Мда...
    доки читаем опосля..... как обычно.
    А как многострочный выполнить?
     
  10. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    для тормозов повторяю: НИКАК.

    выполняй сразу как сформировал запрос. что мешает-то?
     
  11. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Привычка мешает. На работе win32 приложениями под mssql занят. И никогда так не делаем. Формируется большой запрос и одним махом отдаётся серверу.
     
  12. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster

    так может приложение умеет это делать. а в php доки читать надоть ВНИМАТЕЛЬНО.
     
  13. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Прочитал доку. Смирился.
    А оно снова не хочет работать.
    Загрузка файла. Файл грузиться окейно и надо инфу о нём в базу сунуть:
    PHP:
    1. $fileSQL = "INSERT INTO files (postid, filename) VALUES('".$Post_ID."','".$myfile_name."')";  
    2. mysql_select_db($database_oprbase, $oprbase);
    3. $Res = mysql_query(fileSQL, $oprbase) or die(mysql_error());
    echo вернёт "INSERT INTO files (postid, filename) VALUES('9','KING.TXT')", запрос выполнится в myadminе, но не хочет работать так, как написано выше - говорит "невозможно изменить страницу".
     
  14. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    давай на первых порах научимся сначала отлаживаться? а потом вопросы задавать?

    ставим

    error_reporting(E_ALL);
    в сомнительных местах выводим print('то, что нужно'); и делаем flush();
    учимся обрабатывать возвращаемый результат mysql_*

    $res = mysql_query();
    if(!$res) {
    print('фигня:'.mysql_error());
    }

    факт выполнения запроса где-то еще там совсем не утверждает, что он должен быть выполнен тут.

    и так далее ...


    p.s. ты win32 приложения как отлаживаешь? по наитию что ли?
     
  15. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    PHP:
    1. $fileSQL = "INSERT INTO files (postid, filename) VALUES('".$Post_ID."','".$myfile_name."')";  
    2. print($fileSQL);         
    3. mysql_select_db($database_oprbase, $oprbase);
    4. $Res = mysql_query(fileSQL, $oprbase) or die(mysql_error());
    5. $res = mysql_query();
    6. if(!$res) {
    7. print('фигня:'.mysql_error());
    8. }
    невозможно отобразить страницу

    Обычно, если запрос выполняется в enterprise manager - значит он так же выполнится из приложения
     
  16. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Заработало в таком виде.
    PHP:
    1.  
    2. $fileSQL = "INSERT INTO files (postid, filename) VALUES('".$Post_ID."','".$myfile_name."')";  
    3. print($fileSQL);         
    4. mysql_select_db($database_oprbase, $oprbase);
    5. $Res = mysql_query($fileSQL, $oprbase);
    6. if(!$Res) {
    7. print('фигня:'.mysql_error());
    8. }