Продолжая мой предыдущий пост « Соединение с базой данных PHP и MYSQL и создание таблиц только один раз », я создал регистрационную форму с проверкой кода PHP и сервера. Я получаю некоторые ошибки, как указано ниже. т.е. все ошибки происходят в том месте, где я пытаюсь напечатать ошибки в их уважаемом классе html ». Я сделал текст html «span class» полужирным для удобства распознавания. Если это какие-то дополнительные решения для лучшей производительности формы, пожалуйста, дайте мне знать …
Список ошибок:
Примечание. Неопределенная переменная: error_name в C: \ wamp \ www \ 18+ \ register.php
Примечание. Неопределенная переменная: error_username в C: \ wamp \ www \ 18+ \ register.php
Примечание. Неопределенная переменная: error_password в C: \ wamp \ www \ 18+ \ register.php
Примечание. Неопределенная переменная: error_password2 в C: \ wamp \ www \ 18+ \ register.php
Примечание. Неопределенная переменная: error_email в C: \ wamp \ www \ 18+ \ register.php
register.php
<?php include 'database.php'; session_start(); if (isset($_POST['submit'])) { $error = " "; //Declare a null variable to store error messages //validation for fullname if (empty($_POST['fullname'])) { $error_name = 'Enter Fullname...'; } else { $fullname = mysql_real_escape_string(trim($_POST['fullname'])); } //validation for username if (empty($_POST['username'])){ $error_username = 'Enter Username...'; } else { $username = mysql_real_escape_string(trim($_POST['username'])); } //validation for password if(empty($_POST['password'])){ $error_password = 'Please Enter Your Password...'; } else { if (empty($_POST['password2'])) { $error_password2 = 'Re-enter Your Password...'; } else { if(($_POST['password'])!=($_POST['password2'])){ $error_password2 = 'Passwords Do not match...'; } else { $confirm = mysql_real_escape_string(md5($_POST['password2'])); } } } //validation for e-mail if (empty($_POST['email'])) { $error_email = 'Please Enter your Email '; } else { if (preg_match("//custom preg match characters", $_POST['e-mail'])) { //regular expression for email validation $email = mysql_real_escape_string($_POST['email']); } else { $error_email = 'Your E-mail Address is invalid '; } } if (empty($error)) //send to Database if there's no error ' { $query= "DB INSERT QUERY"; $result = mysqli_query($dbc, $query); if (!$result) { echo 'Failed to Register Your Account...!'; } else { echo 'Account Registered Successfully...!'; } } mysqli_close($sql);//Close the DB Connection } ?>
Index.php
<form action="register.php" method="post" id="user_registration"> <p id="head">Create Account</p> <input type="text" id="fullname" name="fullname"/> **<span class="error" id="fullname"><?php echo $error_name; ?></span>** <input type="text" id="username" name="username"/> <span id="availability_status"></span> **<span class="error" id="username"><?php echo $error_username; ?></span>** <input type="password" id="password" name="password"/> **<span class="error" id="password"><?php echo $error_password; ?></span>** <input type="password" id="password2" name="password2"/> **<span class="error" id="divCheckPasswordMatch"><?php echo $error_password2;?></span>** <input type="email" id="email" name="email"/> **<span class="error" id="email"><?php echo $error_email; ?></span>** <p class="submit"> <button type="submit"id="submit" name="submit" value="Register”>Register</button> </p> </form>
Проблема в том, что вы устанавливаете сообщения только в том случае, если определенные условия true
. Таким образом, эти переменные не найдены, если эти условия true
. Чтобы устранить эту проблему, используйте isset()
при отображении ошибок, например:
<?php echo isset($error_name)?$error_name:'' ; ?>
Это означает, что если $error_name
установлено, если да, отобразите его или ничего не отобразите.
Еще одна вещь (логически) заключается в том, что ваш код фактически не проверяет наличие ошибок. $error
остается пустой строкой, и вы проверяете, является ли она пустой, которая всегда будет истиной. Вам нужно либо хранить ошибки в виде массивов, либо проверять, пусты ли все переменные.
Можете ли вы рассказать мне, как хранить ошибки в виде массивов. Plz
Попробуй это:
<?php include 'database.php'; session_start(); if (isset($_POST['submit'])) { $error = array(); //<-- Declare array here //validation for fullname if (empty($_POST['fullname'])) { $error['fullname'] = 'Enter Fullname...'; //<-- adding error into array } else { $fullname = mysql_real_escape_string(trim($_POST['fullname'])); } //validation for username if (empty($_POST['username'])){ $error['username'] = 'Enter Username...'; //<-- here too and so on.. } else { $username = mysql_real_escape_string(trim($_POST['username'])); } //validation for password if(empty($_POST['password'])){ $error['password'] = 'Please Enter Your Password...'; } else { if (empty($_POST['password2'])) { $error['password2'] = 'Re-enter Your Password...'; } else { if(($_POST['password'])!=($_POST['password2'])){ $error['password2'] = 'Passwords Do not match...'; } else { $confirm = mysql_real_escape_string(md5($_POST['password2'])); } } } //validation for e-mail if (empty($_POST['email'])) { $error['email'] = 'Please Enter your Email '; } else { if (preg_match("//custom preg match characters", $_POST['e-mail'])) { //regular expression for email validation $email = mysql_real_escape_string($_POST['email']); } else { $error['email'] = 'Your E-mail Address is invalid '; } } if (!empty($error)) //send to Database if there's no error ' { $query= "DB INSERT QUERY"; $result = mysqli_query($dbc, $query); if (!$result) { echo 'Failed to Register Your Account...!'; } else { echo 'Account Registered Successfully...!'; } } } ?>
Измените свой HTML-код на:
<form action="register.php" method="post" id="user_registration"> <p id="head">Create Account</p> <input type="text" id="fullname" name="fullname"/> <!-- checking if error message is set --> **<span class="error" id="fullname"><?php echo isset($error['fullname'])?$error['fullname']:''; ?></span>** <input type="text" id="username" name="username"/> <span id="availability_status"></span> **<span class="error" id="username"><?php echo isset($error['username'])?$error['username']:''; ?></span>** <input type="password" id="password" name="password"/> **<span class="error" id="password"><?php echo isset($error['password'])?$error['password']:''; ?></span>** <input type="password" id="password2" name="password2"/> **<span class="error" id="divCheckPasswordMatch"><?php echo isset($error['password2'])?$error['password2']:''; ?></span>** <input type="email" id="email" name="email"/> **<span class="error" id="email"><?php echo isset($error['email'])?$error['email']:''; ?></span>** <p class="submit"> <button type="submit"id="submit" name="submit" value="Register">Register</button> </p> </form>
Пожалуйста, не используйте функции mysql_*
в новом коде . Они больше не поддерживаются и официально устарели . См. Красную рамку ? Узнайте о подготовленных инструкциях и используйте PDO или MySQLi – эта статья поможет вам решить, какой из них. Если вы выберете PDO, вот хороший учебник .
Прежде всего вам нужно исправить цитату в include 'database.php';
include 'database.php';
никогда не используйте курчавую цитату из-за этого весь ваш код блокируется.
Далее Вам нужно инициализировать всю переменную null
или просто ""
ИЛИ
Вы можете проверить, существует ли переменная или нет, используя isset()
например, если вы хотите напечатать значение переменной $val
тогда используйте это if(isset($val)) echo $val;
ОБНОВИТЬ
Вы можете легко использовать массив для хранения ошибок: просто используйте
$error['name']='Enter Fullname...';
И чтобы проверить, существует ли ошибка имени, используйте
if(isset($error['name'])){ //Its an error print error }
вам может понадобиться определить эту переменную в верхней части страницы, прежде чем использовать их в коде, что-то вроде этого.
$error_name = ''; $error_username = ''; $error_password = ''; $error_password2 = ''; $error_email = '';
Поместите другое в ваш if (isset($_POST['submit']))
else { /* What if the user didn't click submit? Else is the answer */ $error_name=""; $error_username=""; $error_password=""; $error_password2=""; $error_email=""; }