Перейти к содержимому



Работа с формами (<form></form>)

#1 FeDeRaL
FeDeRaL
  • Неактивные
  • 6 сообщений
  • Репутация: 1
0

Обновлено 18 октября 2013 - 10:46  Отправлено 13 октября 2013 - 11:58

Здравствуйте!!! Прошу помощи. Вроде не такая и сложная тема, до этого всё получалось, но вот в этот раз случилась проблема. Никак не могу разобраться.


Имеется форма на странице:
<form class="form-search" style="margin-top:15px;" method="post" action="assets/included/stud-add.php" accept-charset="UTF-8">
		<div class="input-append">
		 <input type="text" name="familiya" placeholder="Фамилия">
									<input type="text" name="imya" placeholder="Имя" style="margin-left:50px;">
									<input type="text" name="otchestvo" placeholder="Отчество" style="margin-left:50px;">
									<select name="forma-obuch" class="span2" style="margin-left:50px;">
										<option>очная</option>
										<option>заочная</option>
										<option>вечерняя</option>
									</select>
									<select name="pol" class="span2" style="margin-left:50px;">
										<option>муж.</option>
										<option>жен.</option>
										<option>не определено</option>
									</select>
		</div>
								<button class="btn btn-primary" style="margin: 0 0 0 140px;">Добавить</button>
	   </form>

Файл-обработчик формы:
<?php
//Подключаемся к БД
require_once("db_connect.php");
// Формируем строку для запроса к нашей базе данных
$sql = "INSERT INTO `". PHP_DBPREFIX."students` (
   `id_student` ,
   `familiya` ,
   `imya` ,
   `otchestvo` ,
   `forma_obucheniya` ,
   `pol`
  )
  VALUES (
   NULL ,  '".$_POST['familiya']."',  '".$_POST['imya']."',  '".$_POST['otchestvo']."',  '".$_POST['forma-obuch']."',  '".$_POST['pol']."'
  )";
// Отправляем наш запрос MySQL
$result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);
//Перенаправляем на страницу добавления
header("Location: http://laba.loc/students-add.php");
?>

Т.е. сперва пользователь заполняет форму, затем кликает кнопку "Добавить". Данные добавляются в табличку MySQL, затем хочу перенаправить пользователя на ту же страницу, где происходит добавление (http://laba.loc/students-add.php). Для этого написал строку header("Location: http://laba.loc/students-add.php");. Но вот при нажатии на кнопку "Добавить", добавляются данные, но редиректа не происходит, выскакивает сообщение вида:

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\laba.loc\www\assets\included\stud-add.php:1) in Z:\home\laba.loc\www\assets\included\stud-add.php on line 22

Подскажите люди добрые в чём дело? Чего делаю не так? Заранее благодарен.

 

 

  • 0

#2 FeDeRaL
FeDeRaL
    Topic Starter
  • Неактивные
  • 6 сообщений
  • Репутация: 1

Отправлено 13 октября 2013 - 19:08

Ошибка понята. Решение найдено - редирект средствами JavaScript.
  • 0

#3 ssabbass
ssabbass
  • Неактивные
  • 280 сообщений
  • Репутация: 33

Отправлено 13 октября 2013 - 20:10

Java Вам в помощь. Вот пример простенького скрипта редиректа для Вашего случая:
<script language="javascript" type="text/javascript">
location.replace("http://laba.loc/students-add.php");
</script>

  • 0

#4 c0ns0l3
c0ns0l3
  • Неактивные
  • 264 сообщений
  • Репутация: 49

Отправлено 16 октября 2013 - 20:12

FeDeRaL, проблема заключается в том, что РНР запрещает посылать Header'ы после того, как они уже отосланы. Собственно о чем и говорит вам данная ошибка.

Хедеры автоматически отправляются сразу после того, как был произведен какой-либо вывод на экран пользователю (echp, print, ... и даже сообщение об ошибке парсера).
Следовательно, судя по вашей "ошибке" - первый вывод на экран проивзодится в stud-add.php на строке 22.

Исходя из кода "обработчика" который вы предоставили, вывод может быть только в or die(mysql_error() ."<br/>". $sql) - что означает или у вас там ошибка, или же выводится где-то раньше еще.

Обойти данный вариант можно, как выше сказали через JS или же "запретить" вывод данных. При помощи ob_start().
  • 0

#5 k1on
k1on
  • Неактивные
  • 63 сообщений
  • Репутация: 7

Отправлено 16 октября 2013 - 23:58

советую еще обращать внимание на кодировку. по-хорошему должна быть UTF-8 without BOM
если UTF-8 with BOM, то тогда надо ее заменить.
так же перед PHP надо удалять все, если это чистый код файла обработчика указан в топике.
закрывать тег <?php тоже не советую, воизбежании лишних символов после него.

кстати, к теме не относится, но пора давно уже смотреть в сторону mysqli
в этом примере вставить данные из любой другой таблицы можно за 5 секунд. а данные эти могут быть критичные... поэтому сразу начинайте делать правильно.
  • 0

#6 fedornabilkin
fedornabilkin
  • Модератор
  • 1 190 сообщений
  • Репутация: 206

Отправлено 18 октября 2013 - 10:46

кстати, к теме не относится, но пора давно уже смотреть в сторону mysqli

Есть какие-то аргументы?
Года три-четыре назад кричали, что надо смотреть в сторону utf-8, но тем не менее до сих пор еще есть сайты с cp1251 и ничего страшного не происходит.
  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.





Похожие темы
  Название темы Автор Статистика Последнее сообщение

Пользователь месяца
Megoydagi Megoydagi 1-й за Август
Очков активности: 30 4 темы, 8 сообщений, 1 балл репутации
Сайт: bank.net.ru
ТОП самых активных за этот месяц
  • Фотография Vmir
    #1

    Vmir
    Очков активности: 22.5 3 темы, 6 сообщений, 1 балл репутации

  • Фотография BLIK
    #2

    BLIK
    Очков активности: 18 Вне конкурса за определение пользователя месяца

  • Фотография SergiuS85
    #3

    SergiuS85
    Очков активности: 10.5 2 темы, 1 сообщение, 1 балл репутации

  • Фотография kuztoday
    #4

    kuztoday
    Очков активности: 10.5 1 тема, 4 сообщения, 1 балл репутации

  • Фотография Megoydagi
    #5

    Megoydagi (bank.net.ru)
    Очков активности: 9 Вне конкурса за определение пользователя месяца

  • Фотография mkreine
    #6

    mkreine (analiz-krovi.net)
    Очков активности: 9 1 тема, 3 сообщения, 1 балл репутации

  • Фотография kolver
    #7

    kolver
    Очков активности: 9 1 тема, 3 сообщения, 1 балл репутации

  • Фотография Totti
    #8

    Totti
    Очков активности: 7.5 0 тем, 5 сообщений, 1 балл репутации

  • Фотография r0mZet
    #9

    r0mZet (rz-style.ru)
    Очков активности: 6 1 тема, 1 сообщение, 1 балл репутации

  • Фотография fedornabilkin
    #10

    fedornabilkin (plohoneponyal.ru)
    Очков активности: 6 1 тема, 1 сообщение, 1 балл репутации

  • Показать весь ТОП 10

Поддержите форум! =)
Топ 5 участников по репутации

Оформление форума – IPBSkins.ru