2013-06-27 4 views
0

Я новичок в PHP и пытаюсь написать немного кода, который проверяет форму на той же странице, прежде чем отправлять сообщение в базу данных.Форма проверки PHP не возвращает правильный ответ

Что я хочу для кода;

  1. спросить, если какой-либо из поля были заполнены
  2. если да проверить, если какой-либо из полей пустым (так выводить сообщение)
  3. если не пройти через ряд проверок достоверности данных каждый раз добавляя любые ошибки в массив.
  4. наконец спросить, если какие-либо ошибки, которые были найдены
  5. , если не вставить данные в базу данных (этот бит кода записывается, но не отображается в коде я обеспечиваю ниже.

Так вот мой код :

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 


if(isset($_POST['title']) || isset($_POST['content']) || isset($_POST['comment_option'])); 

{ 


$title = $_POST['title']; 
$content = $_POST['content']; 
$comment_option = $_POST['comment_option']; 
$form_errors = array(); 

if (empty($title) || empty($content) || empty($comment_option)) 
{ 

    $form_errors[] = "All fields are required!"; 

} else { 

    if (strlen($title < 3)){ 

     $form_errors[] = "The title is too short!"; 

    } 

    if (strlen($title > 50)){ 

     $form_errors[] = "The title is too long!"; 

    } 

    if (strlen($content < 50)){ 

     $form_errors[] = "Post is a bit short!"; 

    } 
} 


if(!empty($form_errors)) { 

print_r($form_errors); 


}else{ 

//insert data into database 

} 

} 
?> 

<form action="add_post.php" method="post"> 

Title: <input type="text" name="title"><br> 

Content: <input type="text" name="content"><br> 

Comments enabled?<br> 

<input type="radio" name="comment_option" value="true">Yes<br> 
<input type="radio" name="comment_option" value="false">No<br> 

<input type="submit"> 


</form> 




<body> 
</body> 
</html> 

Когда я загрузить страницу я получаю три ошибки неопределенного индекса на линиях, где я поставил $ заголовка $ содержания и $ comment_option переменных Если я просто ударил представить тогда я только получаю сообщение об ошибке на. line, где im устанавливает переменную $ comment_option, но я вижу «Все поля ar e требуется ". Я также вижу эту ошибку, если какое-либо из полей не заполнено, поэтому эта часть работает.

Если все поля не заполняются. Независимо от того, какой длины я всегда вижу «Название слишком коротка» и «Блог пост немного меньше», даже если они не ..

Iv провел некоторое время глядя на это, и просто не могу понять, что сделал не так!

Любая помощь будет очень признательна !!

Спасибо, Max

ответ

2

Вы поместите < 3 сравнение внутри вызова функции к strlen (а другой два, а). Меняем от

if (strlen($title < 3)){ 

в

if (strlen($title) < 3){ 

и аналогично для других сравнений.

неопределенных ошибки индекса может быть исправлен путем изменения настройки переменных на что-то вроде этого:

$title = isset($_POST['title']) ? $_POST['title'] : ''; 
+0

Ah ok thats отсортировал бит проверки и это работает, спасибо! Проблема в том, что я все еще получаю неопределенные ошибки индекса. Это потому, что я устанавливаю переменную без ничего в ней, если $ _POST ['?'] Ничего не имеет в ней? – Max

+0

, потому что вы проверяете, установлена ​​ли какая-либо переменная, тогда предполагается, что все они есть. Так что если '$ _POST ['title']' установлен и '$ _POST ['content']' is нет, вы получите неопределенный индекс при попытке установить '$ content = $ _POST ['content']' – Niro

0

Похоже, вы делаете STRLEN условные неправильно.

Вы делаете это:

if (strlen($title < 3)) 

Когда вы должны делать это:

if (strlen($title) < 3) 

Причина ваши условными терпят неудачу, потому что вы получаете результат strlen($title < 3), что приводит к strlen(true) , что приводит к ответу 1 (я считаю), и, таким образом, условие рассматривается как true.

В исправленной случае здесь как условные работы:

Мы используем функцию strlen, чтобы вычислить длину $title, что мы можем сказать, это «Test». Таким образом, strlen($title) даст 4. Теперь условное значение становится 4 < 3, что приводит к false.

+0

О, хорошо, я вижу. Бит ошибки nooby x). Спасибо, что рассказали мне это. – Max

0

У вас есть точка с запятой в конце Вашего первого IF заявление:

|| isset($_POST['comment_option']));

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

+0

Хорошо спасибо, что избавились от неопределенных ошибок индекса в начале, но я все равно получаю сообщение об ошибке с комментарием, если я не нажимаю что-то на переключателе. Думаю, потому что радио истинно/ложно? – Max

+0

Радио кнопки либо «проверены», либо '' ''. Если вам нужно убедиться, что хотя бы один из них отмечен, измените HTML по умолчанию на один из переключателей на 'checked'. –

+0

В вашем случае у вас есть две радиокнопки с тем же именем. Не хорошая идея. Я бы изменил одно из имен на 'yes_btn', а другое на' no_btn', а затем проверил, какой из '$ _POST ['yes_btn']' или '$ _POST ['no_btn']' установлен на '" checked " , –

0

Я не думаю, что это хорошая идея представить форму и выполнить эти проверки на конце сервера (конец PHP), если для этого не требуется инфраструктура сервера. Вы все равно можете выполнить эти проверки с помощью JavaScript.

+0

Да, но что, если пользователь отключит javascript или пытается отправить форму с помощью завитка или что-то в этом роде? Вы все еще нуждаетесь в проверке на стороне сервера. – Gohn67

+0

Я не знаю ни одного javascript и не знаю, как это сделать любым другим способом:/ – Max

0

Во-первых, имя Ваш form:

<form action="add_post.php" method="post" name="myForm">

Тогда основывают свой первый if заявление от имени form и удалить ';' в конце этой строки:

if(isset($_POST['myForm'])){ . . . }

Внутри, что если проверить и установить каждую $_POST переменную как вы:

if(isset($_POST['title']) && isset($_POST['content']) && isset($_POST['comment_option'])) 
{ 
$title = $_POST['title']; 
$content = $_POST['content']; 
$comment_option = $_POST['comment_option']; 
} 
else 
{ 
$form_errors[] = "All fields are required!"; 
} 

и т.д. для других переменных.

Проделайте проверку длины, как указано в других ответах.

+0

, используя это, как будет выводить сообщение, когда не все поля хранят данные? Спасибо за этот совет. – Max

+0

Обновлен с проверкой на отсутствие переменных. – Niro

0

Вся проблема в том, что у вас есть «;» в конце конца инструкции if. if(isset($_POST['title']) || isset($_POST['content']) ||
isset($_POST['comment_option']));

удалите его!

другие проблемы в условиях: if (strlen($title < 3)){ Это должно быть if(strlen($title) < 3){ и так далее ....

StrLen возвращает целое число, и только тогда вы можете проверить состояние. Что вы написали в этом коде: if(1) или любое другое число .... Это всегда так!

надеюсь, что это поможет ....