Хобрук: Ваш путь к мастерству в программировании

Нужен совет / руководство по оформлению регистрационной формы

<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color:red;}
</style>
</head>
<body>

<?php
$username = $password = $email = "";
$usernameerr = $passworderr = $emailerr = "";

if ($_SERVER["REQUEST_METHOD"]=="POST") {

if (empty($_POST["username"])) {
    $usernameerr = "Please fill username";
} else {
    $username = test_input($_POST["username"]);
    if(!preg_match("/^[a-zA-Z]*$/",$username)) {
      $usernameerr = "Only letters allowed";
    }
}

if (empty($_POST["email"])) {
    $emailerr = "Please fill e-mail";
} else {
    $email = test_input($_POST["email"]);
    if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {
      $emailerr = "not a valid e-mail";
    }
}

if (empty($_POST["password"])) {
    $passworderr = "Cannot be blank";
} else {
    $password = test_input($_POST["password"]);
    if(!preg_match("/^[a-zA-Z]*$/",$password)) {
      $pasworderr = "Must be Letters";
        }
    }
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

$con = mysqli_connect('localhost','root','','my_db');
if (mysqli_connect_errno()) {
    echo "Fail to connect :".mysqli_connect_error();
}

$username = mysqli_real_escape_string($con, $_POST["username"]);
$password = mysqli_real_escape_string($con, $_POST["password"]);
$email = mysqli_real_escape_string($con, $_POST["email"]);

$sql = "INSERT INTO register(Username, Password, Email)
VALUES ('$username','$password','$email')";

if (!mysqli_query($con,$sql)) {
    die ('Error: '.mysqli_error($con));
}
echo "Registration successful";

mysqli_close($con);

?>

<h2>Register</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Username :<input type="text" name="username" value="<?php echo $username;?>">
          <span class="error">*<?php echo $usernameerr;?></span>
          <br><br>
Password :<input type="text" name="password" value="<?php echo $password;?>">
          <span class="error">*<?php echo $passworderr;?></span>
          <br><br>
E-mail :<input type="text" name="email" value="<?php echo $email;?>">
        <span class="error">* <?php echo $emailerr;?></span>
        <br><br>
        <input type="submit" value="submit" name="submit">
</form>


</body>
</html>

Привет, я новичок, и мне нужен совет по созданию регистрационной формы. Итак, вот код моей регистрационной формы, код проверки работает, и он также отправляет данные в базу данных mysql. Но проблема в том, что он будет отправлять данные в базу данных каждый раз при загрузке (даже если она пуста). Какую строку кодов я должен добавить, чтобы форма не отправляла данные, когда она не заполнена полностью / заполнена в правильном формате. Спасибо заранее.

04.09.2014

Ответы:


1

Вы должны проверить, есть ли какие-либо данные в полях.

Просто добавьте эту строку перед выполнением вашего sql после $email = mysqli_real_escape_string($con, $_POST["email"]); :

if ($username != "" && $password != "" && $email != "")
{
    //your sql and rest of the script goes here
}
else
{
    //don't save the data if it's not completed well
    //do whatever you want in that case no valid data was completed
}

Примечания: я ответил только на ваш вопрос, но будьте осторожны, у вас есть некоторые ошибки реализации. Вы должны просто использовать флаг, который по умолчанию равен 1, и, если в какой-либо из ваших функций проверки обнаружена ошибка, falg должен быть установлен в 0, и вы должны проверить значение флага перед sql вместо проверки содержимого снова переменные $_POST.

Изменить: ЛУЧШЕЕ РЕШЕНИЕ ДЛЯ ВАШЕГО КОДА Добавьте этот блок перед sql:

if ($usernameerr == "" && $passworderr == "" && $emailerr == "")
{
    //no errors, all fine we can add to the database
}
else
{
    //we have errors, do something but don't add the data
}
04.09.2014
  • поэтому после $email = mysqli_real_escape_string($con, $_POST[email]); Я добавил if ($usernamer= && $passworderr= && $emailerr=) {$sql = ВСТАВИТЬ В регистр (имя пользователя, пароль, адрес электронной почты) VALUES ('$username','$password','$email'); mysqli_query($con,$sql); повторить успех; } еще { эхо Ошибка; } как вы предложили, все работает, но теперь все, что я ввожу, всегда будет «неудачным» и не будет сохранено в базе данных. Пробовали некоторые варианты и все еще не могли проверить и сохранить их в базе данных. Ждем вашей помощи. Спасибо заранее. 05.09.2014
  • Если в вашем коде нет синтаксических ошибок, логика в порядке. Что вы делаете, так это то, что если проверка не привела к ошибкам, переменные, содержащие ошибки, будут пустыми, поэтому вы можете вставить данные в базу данных mysql. Если вы получаете какую-либо ошибку или у вас есть дополнительные вопросы, не стесняйтесь спрашивать. Если это работает, пожалуйста, найдите время, чтобы принять ответ. Удачи! 05.09.2014
  • Синтаксических ошибок нет, да, у меня есть логика, что когда $usernamer= && $emailerr= && passworderr=, он должен сохранять данные в базу данных, но теперь, хотя я все заполняю правильно, он все равно терпит неудачу и не сохраняет. 05.09.2014
  • Ну, вы не написали код, как я вам предлагал. Вы не используете двойной знак равенства, а также пытаетесь сохранить интервал для более чистого и легко читаемого кода. Напишите блок условий точно так: if ($usernamer == && $passworderr == && $emailerr == ) 05.09.2014
  • ага, ошибка новичка. Извините, я новичок в этом. Урок усвоен, важность знака ==, большое спасибо. 05.09.2014
  • Ничего страшного, бывает у всех поначалу. Вы можете прочитать больше здесь, также есть === оператор :Д. Удачи! 05.09.2014

  • 2

    Пожалуйста, передайте ваше DB-соединение и DB-Insert в несколько отдельных файлов и поговорите с ними по ajax-запросу.

    ваш db-insert-query должен выполняться после проверки и в конце

    if ($_SERVER["REQUEST_METHOD"]=="POST") {
    

    блокировать

    04.09.2014
    Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..