$ _POST значения не проверяются моей функцией - PullRequest
0 голосов
/ 04 октября 2011

Это мой первый проект PHP, поэтому, пожалуйста, объясните, как эффективно отлаживать:

Я создал эту форму:

<form action="<?php $self ?>" method="post">
<div class="fname">
  <label for="name"><span> Name: </span>
  <input name="name" value= "<?php 
  if($error_count != 0) {
  echo $name;
  }// To avoid filling name again in case of error?>"
  type="text" cols="20" />
  </label>
</div>
<div class="femail">
  <label for="email"><span> Email: </span>
  <input name="email" value= "<?php 
  if($error_count != 0) {
  echo $email;
  }// To avoid filling email again in case of error?>" 
  type="text" cols="20" />
  </label>
</div>
<br/>
<textarea name="post" rows="5" cols="40"><?php 
  if($error_count != 0) {
  echo $post;
  }// To avoid filling textarea again in case of error?>
  </textarea>
<input name="send" type="hidden" />
<p>
  <input type="submit" value="shout" />
</p>

и следующая функция для проверки формы (в отдельном файле form_validation.php):

    <?php
function validate_shout($vmail,$vname,$vpost)
{

$error_count = 0; 

// To check email.
if(!preg_match('/^[.\w-]+@([\w-]+\.)+[a-zA-Z]{2,6}$/',$vmail)) {
echo "<p class =\"error\"> Please enter valid email address </p><br/>";
$error_count++;
}

// To check required fields
if($vname == NULL) {
echo "<p class =\"error\"> Oops!! You forgot to enter your name </p><br/>";
$error_count++;
}

if($vpost == NULL) {
echo "<p class =\"error\"> I guess your shout was blank </p><br/>";
$error_count++;
}

return $error_count;
}

?>

И использовал его таким образом

if(isset($_POST['send'])) {

if(!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['post'])) {
echo "<p class=\"error\">Unable to connect to the database server at this time.</p>";
}
else {
 $name = htmlspecialchars(mysql_real_escape_string($_POST['name'])); 
 $email = htmlspecialchars(mysql_real_escape_string($_POST['email'])); 
 $post = htmlspecialchars(mysql_real_escape_string($_POST['post']));


$error_count = validate_shout($email,$name,$post);
//PHP code to add shout to database
if ($error_count == 0) 
{
$query = "INSERT INTO shouts SET name='$name', email='$email', post='$post';";
  • Теперь проблема в том, что не проверяет текстовую область .два других работают нормально.Код работал нормально несколько дней назад.но сегодня, когда я открыл его, я обнаружил эту проблему.

Еще одна вещь, которую я заметил, была в phpMyadmin, как указано ниже

Дополнительные функциидля работы со связанными таблицами были деактивированы.Чтобы выяснить, почему нажмите здесь.

при нажатии он отобразил это:

$cfg['Servers'][$i]['pmadb'] ...    not OK [ Documentation ]
$cfg['Servers'][$i]['relation'] ...     not OK [ Documentation ]
General relation features: Disabled

$cfg['Servers'][$i]['table_info'] ...   not OK [ Documentation ]
Display Features: Disabled

$cfg['Servers'][$i]['table_coords'] ...     not OK [ Documentation ]
$cfg['Servers'][$i]['pdf_pages'] ...    not OK [ Documentation ]
Creation of PDFs: Disabled

$cfg['Servers'][$i]['column_info'] ...  not OK [ Documentation ]
Displaying Column Comments: Disabled
Browser transformation: Disabled

$cfg['Servers'][$i]['bookmarktable'] ...    not OK [ Documentation ]
Bookmarked SQL query: Disabled

$cfg['Servers'][$i]['history'] ...  not OK [ Documentation ]
SQL history: Disabled

$cfg['Servers'][$i]['designer_coords'] ...  not OK [ Documentation ]
Designer: Disabled

$cfg['Servers'][$i]['tracking'] ...     not OK [ Documentation ]
Tracking: Disabled 

Я полагаю, обе проблемы возникли вместе без каких-либо изменений в настройках или коде мной.Хотя они выглядят отдельно друг от друга.

Пожалуйста, помогите ..

Основная проблема заключается в том, почему $ post не проходит проверку и почему phpMyadmin внезапно показывает указанное выше сообщение

Ответы [ 2 ]

0 голосов
/ 04 октября 2011

Сравнение == NULL не удастся.Обычно пустая строка также может «равняться» NULL.(Вы все равно должны написать == "").Но ваша текстовая область вряд ли будет содержать действительно пустую строку.Просто из вашего шаблона я бы предположил, что он содержит по крайней мере новую строку или даже несколько пробелов.

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

if (strlen(trim($vpost))) {

В любом случае, чтобы проверить, содержит ли строка что-либо, предпочтите strlen().trim() здесь служит для фильтрации пробелов перед проверкой этого.

Некоторые другие замечания о вашем коде:

  • htmlspecialchars(mysql_real_escape_string( - неправильный порядок.Функция escape предназначена для базы данных.Он должен быть применен немедленно перед его преобразованием в SQL.Применение другой кодировки (html) впоследствии может отменить экранирование SQL.
  • <form action="<?php $self ?>" не будет работать без некоторого echo
  • И регулярное выражение электронной почты просто повреждено.Используйте filter_var и встроенное FILTER_VALIDATE_EMAIL регулярное выражение
0 голосов
/ 04 октября 2011

mysql_real_escape_string() НИКОГДА не вернет значение null, даже если вы передадите null в качестве аргумента. По крайней мере, он вернет пустую строку. Ваша функция проверки проверяет наличие нулей, но поскольку вы передаете эти значения через M_R_E_S (), они НИКОГДА не могут быть равны нулю, поэтому ваша функция проверки является причиной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...