Сравнение переменной с пользовательским вводом в php всегда возвращает false - PullRequest
0 голосов
/ 24 июня 2019

Я создаю страницу проверки, которая сравнивает две переменные

первая - это случайный код, который был сгенерирован ранее из скрипта Python и передал результат в переменную php под именем $ codeвывод (8063D0A7) - это 8 цифр и букв

, второй - ввод пользователя ($ verf)

, когда пользователь нажимает submit ($ code) и ($ verf)) следует сравнить, если это правда, затем перейти на другую страницу, если нет, то будет показана повторная попытка

Я пробовал много способов, но он всегда показывает ложь в любом случае и любой ввод

<?php
session_start(); ///starts a session and getting the variables from another page 

echo "E-mail has been sent to " ;
echo $_SESSION['email'];  ///gets $email from another page


echo $email , "   ";
echo $_SESSION['code'];  ///gets the $code from another page


$email = escapeshellarg($_SESSION['email']);  ///make an arg to put in bash script


$code = escapeshellarg($_SESSION['code']);


$addr = shell_exec("./test.sh $email $code"); ///execute bash script to send $code to $email


?>
<!DOCTYPE HTML>  
<html>
<body>  
<h2>E-mail Verfication</h2>
<form method="post" action="">  
Name: <input type="string" name="verf" value="">
  <br><br>
  <input type="submit" name="submit2" value="Submit">  
</form>

<?php
if (isset($_POST['submit2'])) {
    $verf = $_POST['verf'];
    if ($verf == $code) {
        echo "Correct!";
         header('Location: 12.php');
    } else { 
        echo "Wrong!";

    }

} else {
    echo "please fill the verification";
}



 echo $verf;
 echo $code;

?>

</body>
</html>

Я думаю, что существует проблема идентификации переменных, например, принимает $ code в качестве строки и $ verf в качестве другого типа ввода, поэтому оно всегда будет ложным, я не знаю, что я новичок в php help PLZ..: D

1 Ответ

1 голос
/ 24 июня 2019

Проблема проста - это потому, что вы используете escapeshellarg(), который добавляет одинарные кавычки вокруг строки и кавычки / экранирует любые существующие одинарные кавычки (см. Руководство: PHP escapeshellarg

Итак, в вашем случае:

// lets say:
$_SESSION['code']="abc";

// then you do:
$code = escapeshellarg($_SESSION['code']);

// this means that now, $code is actually "'abc'" instead of "abc"
echo $code;

// so, if
$verf = "abc";

// then of course, $code is NOT the same with $verf;

echo $code == $verf ? "correct" : "incorrect";

Итак, в вашем случае вы должны изменить эту строку:

//$verf = $_POST['verf'];
$verf = escapeshellarg($_POST['verf']);

В следующий раз попробуйте отладить его, просто повторив: $ verf vs$ code.

РЕДАКТИРОВАТЬ . Ответ на комментарий:

Чтобы удалить пустые места в ваших данных, вы можете использовать: trim ()

$code = "  A1B3 ";
$code = trim($code);
echo $code;
//A1B3

Или, чтобы удалить все нежелательные символы (например, символы не AZ или 0-9), вы можете использовать: preg_replace ()

$code = "  A1B3?!#@! ";
$code = preg_replace("/[^A-Z0-9]/", "", $code);
echo $code;
//A1B3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...