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


Партнерская программа Kredov

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

#1 FeDeRaL

FeDeRaL
  • Пользователь
  • 6 сообщений
  • Репутация: 1
0

Отправлено 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
  • Пользователь
  • 696 сообщений
  • Репутация: 91

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

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

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



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