2012-06-22 3 views
0

Можно создать дубликат:.
Headers already sent by PHPPhp заголовок ("Location") Ошибка

У меня возникли некоторые трудности с моей PHP кодирования

У меня есть 3 файлов, добавить .php, lib.php и view.php

Я создал простую форму, и когда пользователь нажимает кнопку submit, она должна быть направлена t их в view.php, где будет отображаться база данных. Теперь у меня есть пара проблем, которые я, похоже, не могу решить.

Когда пользователь нажимает кнопку «Отправить», а поля пустые или есть ошибка, запись на страницу просмотра (или база данных) не должна быть внесена ... однако, когда я нажимаю кнопку «Отправить», в базу данных записывается пустая запись. ТАКЖЕ, если я нажимаю «Enter product» из верхней панели меню в любое время, когда я нажимаю на нее, это приводит к пустой записи в базу данных. Я не могу понять, почему это происходит.

Мой следующий вопрос с заголовком («Location») и мой браузер говорит:

«Предупреждение: Не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в lib.php: 13) в оных .php on line 16 "

Однако, если я нажму кнопку« Отправить »в моей форме, он уйдет.

Вот код страницы:

Я действительно прошу прощения, если код действительно грязно.

Любая помощь/совет/решение очень благодарны.

И да, это было задание --- оно должно было состояться на прошлой неделе, но так как я не мог закончить его, он больше не стоит никаких оценок.

+0

У вас есть комментарии JS '////// add.php //////' перед тегом открытия '

+1

FYI, вы ** широко открыты ** для SQL-инъекции. Вы ** будете взломаны **, если вы еще не были. Научитесь использовать подготовленные запросы с PDO, чтобы полностью избежать этой проблемы. – Brad

+0

О, спасибо за голова, я удалил свой пароль и имя пользователя для этой цели. И Майкл, я поместил эти // там, чтобы отделить то, что бы вам помочь, ребята, понять, что вы смотрите, arent комментария в фактическом документе php. – Umeed

ответ

1

Ваш if заявление if (empty($_POST)){ всегда будет работать, и будет запущен else, таким образом, пустые записи db.

$_POST всегда будет иметь что-то в нем, даже для пустых текстовых входов. Каждая клавиша будет установлена ​​в пустую строку.

Чтобы проверить, следует ли сохранять данные или нет, вам необходимо проверить все обязательные поля формы. Вероятно, ваш код будет выглядеть примерно так. Это отнюдь не полная или безопасная, но она укажет вам в правильном направлении.

<?php 

// store validation rules for required fields 
$requiredFields = array(...); 

// Store all validation errors here. 
$errors = array(); 

foreach($requiredFields as $key=>$rule) { 
    if(empty($_POST[$key])) { 
     $errors[$key] = true; 
    } 
    else { 
     // you can perform more validation work on the value here. 
    } 
} 

if(count($errors) > 0) { 
    // form submit failure. 
} 
else { 
    // form submit success, save to db 
} 
+0

спасибо, что делает вещи в лучшей перспективе. – Umeed

+1

Добро пожаловать. Если у вас есть время использовать формальную структуру, я очень хорошо использовал Yii's [CFormModel] (http://www.yiiframework.com/doc/api/1.1/CFormModel/), который помогает автоматизировать многие из избыточной формы задачи, такие как проверка и сохранение данных. Вам больше не понадобится писать код, как показано выше: – bejonbee

0

Вы отправляете выходные данные перед настройкой заголовка, поэтому указанные заголовки не отправляются.

+0

Заголовки отправляются - только не тот человек, которого он ожидает. – buley

Смежные вопросы