За последние 24 часа нас посетили 22672 программиста и 1124 робота. Сейчас ищут 634 программиста ...

Ошибка Warning: Cannot modify header information - headers already sent by

Тема в разделе "PHP для новичков", создана пользователем Suyunoff, 17 окт 2019.

Метки:
  1. Suyunoff

    Suyunoff Новичок

    С нами с:
    16 июл 2019
    Сообщения:
    38
    Симпатии:
    1
    Строка header ("location:view_topic.php?id=$id"); выводит ошибку Warning: Cannot modify header information - headers already sent by
    Код (Text):
    1. $sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
    2. $result2=mysql_query($sql2);
    3.  
    4. if($result2){
    5. header ("location:view_topic.php?id=$id");
    6.  
    7.  
    8.  
    9. // If added new answer, add value +1 in reply column
    10. $tbl_name2="fquestions";
    11. $sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";
    12. $result3=mysql_query($sql3);
    13. }
    --- Добавлено ---
    P.S до этого она нормально работала, сегодня зашел и не работает
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Вы уже где то до этого кода отправили заголовок.
    Например
    PHP:
    1. echo "<body>";
    или тупо пробел
    подключения почекайте если они есть
    PHP:
    1. include( "include.inc" );
     
  3. Suyunoff

    Suyunoff Новичок

    С нами с:
    16 июл 2019
    Сообщения:
    38
    Симпатии:
    1
    Код (Text):
    1. <?
    2.  
    3. $host="localhost"; // Host name
    4. $username="root"; // Mysql username
    5. $password=""; // Mysql password
    6. $db_name="myforum"; // Database name
    7. $tbl_name="fanswer"; // Table name
    8.  
    9. // Connect to server and select databse.
    10. mysql_connect("$host", "$username", "$password")or die("cannot connect");
    11. mysql_select_db("$db_name")or die("cannot select DB");
    12.  
    13. // Get value of id that sent from hidden field
    14. $id=$_POST['id'];
    15.  
    16. // Find highest answer number.
    17. $sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'";
    18. $result=mysql_query($sql);
    19. $rows=mysql_fetch_array($result);
    20.  
    21. // add + 1 to highest answer number and keep it in variable name "$Max_id". if there no answer yet set it = 1
    22. if ($rows) {
    23. $Max_id = $rows['Maxa_id']+1;
    24. }
    25. else {
    26. $Max_id = 1;
    27. }
    28.  
    29. // get values that sent from form
    30. $a_name=$_POST['a_name'];
    31. $a_email=$_POST['a_email'];
    32. $a_answer=$_POST['a_answer'];
    33.  
    34. $datetime=date("d/m/y H:i:s"); // create date and time
    35.  
    36. // Insert answer
    37. $sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
    38. $result2=mysql_query($sql2);
    39.  
    40. if($result2){
    41. header ("location:view_topic.php?id=$id");
    42.  
    43.  
    44.  
    45. // If added new answer, add value +1 in reply column
    46. $tbl_name2="fquestions";
    47. $sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";
    48. $result3=mysql_query($sql3);
    49. }
    50. else {
    51. echo "ERROR";
    52. }
    53.  
    54. // Close connection
    55. mysql_close();
    56. ?>
    вот весь коД,вроде ничего такого нет
    --- Добавлено ---
    P.S .Исправил, проблема была в кодировке, нужно было ставить UTF-8, а у меня была UTF-8 with BOM
     
  4. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    все круто, но код никому больше не показывай, он устаревший и небезопасный.
     
  5. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Suyunoff, ну начнём с того, что назвав это кодом вы сильно преувеличили. Но если не принимать это во внимание, то каким редактором для написания "кода" вы пользуетесь?
    --- Добавлено ---
    дело не в устаревшем драйвере mysql , а в отсутствии логики
     
  6. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Valick явно же не его код, чего ты докопался, работает и ладно =)
     
  7. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Suyunoff, старайся по возможности не использовать else
    Например вот тут:
    PHP:
    1. if ($rows) {
    2. $Max_id = $rows['Maxa_id']+1;
    3. }
    4. else {
    5. $Max_id = 1;
    6. }
    лучше написать так:
    PHP:
    1. $Max_id = 1;
    2. if ($rows) {
    3.     $Max_id = $rows['Maxa_id']+1;
    4. }
    Но это чисто для примера, потому как манипулировать id на стороне РНР опасное занятие.
    --- Добавлено ---
    а по твоему я здесь для мебели?
    если я не докопаюсь, то кто? :D
     
  8. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Valick ну если это не он писал, не ему и исправлять, не будет он трогать =)
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.797
    Симпатии:
    650
    @Valick, конкретно про else сильно смахивает на «докопался» ;)
     
    #9 miketomlin, 17 окт 2019
    Последнее редактирование: 17 окт 2019
  10. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @miketomlin, else и elseif - это "слова" паразиты, совсем без них конечно нельзя, но если есть выбор использовать их или нет, то однозначно нет. Без них код выглядит более читабельно, ну и гораздо короче.
    Подозреваю, что их в РНР добавили по заказу индусов :D
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.557
    Симпатии:
    1.756
    Ну если elseif я встретил первый раз именно в php, то просто else есть во всех языках (ну, по крайней мере, в той или иной степени известных мне).
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.797
    Симпатии:
    650
    Ты забыл написать «для меня». В общем можно поспорить. Только не нужно приплетать сюда эффективность и т.п. Оптимизирующие компиляторы уже давно справляются с такими вещами. Хотя пых конечно не про это.
     
    #12 miketomlin, 17 окт 2019
    Последнее редактирование: 17 окт 2019
  13. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @miketomlin, я показал два логически одинаковых фрагмента кода. Если для тебя первый более читабельный, то я с удовольствием добавлю "для меня" к своим словам.
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.797
    Симпатии:
    650
    @Valick, мне больше нравится третий вариант ;)
    PHP:
    1. $Max_id = $rows ? $rows['Maxa_id']+1 : 1;
    Или так (это от смысла зависит):
    PHP:
    1. $Max_id = $rows ? $rows['Maxa_id'] : 0;
    2. $Max_id += 1;
    --- Добавлено ---
    Но ТСу это в принципе не нужно. Там должен использоваться автоинкрементальный счетчик, насколько понимаю.