PHP isset функция не проверяет должным образом - PullRequest
0 голосов
/ 02 мая 2019

Когда кнопка нажата. Я хочу получить значения из формы, используя register_button. Тем не менее, он не попадает внутрь условия if.

Я не могу проверить что-либо набранное в форме в операторе if. Есть ли другие варианты, с помощью которых я могу получить данные из формы, или я делаю какую-то ошибку?

var_dump($_POST) возвращает

array(6) { 
    ["reg_fname"]=> string(1) "a" 
    ["reg_lname"]=> string(3) "asd" 
    ["reg_email"]=> string(5) "ad@ad" 
    ["reg_pass"]=> string(4) "dasd" 
    ["reg_pass2"]=> string(5) "sadsa" 
    ["register_button"]=> string(8) "Register" 

} 

Invalid format 

Код:

$fname = "";
$lname = "";
$em = "";
$em2 = "";
$password = "";
$password2 = "";
$date = "";
$error_array = "";

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

    $fname = strip_tags($_POST['reg_fname']);
    $fname = str_replace(' ', ' ', $fname);
    $lname = $_POST['reg_lname'];
    $lname = str_replace(' ', ' ', $lname);

    $em = $_POST['reg_email'];
    $em = str_replace(' ', ' ', $em);

    $password = strip_tags($_POST['reg_pass']);
    $password2 = strip_tags($_POST['reg_pass2']);

    $date = date("Y-m-d");

    if(filter_var($em, FILTER_VALIDATE_EMAIL)){
        $em = filter_var($em, FILTER_VALIDATE_EMAIL);

        $e_check = mysqli_query($con, "SELECT email FROM users WHERE email='$em");

        $num_rows = mysqli_num_rows($e_check);

        if(num_rows > 0){
            echo "Email already in use";
        }
    }else {
        echo "Invalid format";
    }

    if(strlen(fname)>25 || strlen(fname)<2 ){
        echo "Your fi";
    }
}

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

<input type = "text" name="reg_fname" placeholder="First Name"       required>
<br>
<input type = "text" name="reg_lname" placeholder="Last Name" required>
<br>
<input type = "email" name="reg_email" placeholder="Email" required>
<br>
<input type = "password" name="reg_pass" placeholder="Password" required>
<br>
<input type = "password" name="reg_pass2" placeholder="Confirm Password" required>
<br>
<input type = "submit" name="register_button" value="Register">

</form>

Ответы [ 3 ]

0 голосов
/ 02 мая 2019

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

пожалуйста, попробуйте следующее

<?php
$fname = "";
$lname = "";
$em = "";
$em2 = "";
$password = "";
$password2 = "";
$date = "";
$error_array = "";
if (isset($_POST['register_button'])) {
    $fname = strip_tags($_POST['reg_fname']);
    $fname = str_replace(' ', ' ', $fname);
    $lname = $_POST['reg_lname'];
    $lname = str_replace(' ', ' ', $lname);

    $em = $_POST['reg_email'];
    $em = str_replace(' ', ' ', $em);

    $password = strip_tags($_POST['reg_pass']);
    $password2 = strip_tags($_POST['reg_pass2']);

    $date = date("Y-m-d");
    // No need to use if
    $em = filter_var($em, FILTER_VALIDATE_EMAIL);
    /// $con = mysqli_connect("localhost", "user", "pass", "dbname");
    /// using if to be sure query success
    if ($e_check= mysqli_query($con, "SELECT email FROM users WHERE email='$em'")) {

        $num_rows= mysqli_num_rows($e_check);
        if ($num_rows> 0) {
            echo "Email already in use";
        } else {
            /// here your insert query

        }
    }
    else
    {
        echo "No query ";
    } 
    if(strlen($fname) >25 || strlen($fname)< 2 )
    { 
        echo "Your first name must be at least 2 char and maximum 25 char "; 
    }
}
0 голосов
/ 02 мая 2019

Зачем использовать "register_button" в качестве чека? Почему не одно из ваших полей, которое необходимо?

0 голосов
/ 02 мая 2019

Он попадает внутрь первого оператора if. Вы можете сказать, потому что когда вы var_dump($_POST) вы получаете текст «Неверный формат» после вывода дампа. Это означает, что он попадает в ваше заявление else ниже по странице, где у вас есть echo "Invalid format";. Так что на самом деле ваше filter_var if утверждение не выполняется.

...