оператор if — Почему этот оператор NOR в PHP не работает?

Я пытаюсь создать страницу регистрации на моем веб-сайте, и у меня есть весь код фильтрации. Итак, что я пытаюсь сделать в следующем коде, чтобы убедиться, что имя пользователя еще не существует в базе данных и продолжить с него. Проблема заключается в следующем: я делаю оператор NOR с $error а также $captchaError но даже когда я их печатаю, значения обоих из них ложны, код в операторе if не работает, и я серьезно не понимаю, почему. Вот код:

<?php
$error = false;
$captchaError = false;
if($_POST) {
$username = $_POST["username"];
if (!preg_match("/^[0-9A-Za-z_]{3,16}+$/", $username)) {
$error = true;
}
$email = $_POST["email"];
if (!filter_var($email, FILTER_VALIDATE_EMAIL) || strlen($email) > 50) {
$error = true;
}
$password = $_POST["password"];
if(!preg_match("/^[-0-9A-Za-z!@#$%^&*_+=]{6,}+$/", $password)) {
$error = true;
}
$captcha = $_POST['g-recaptcha-response'];
$response = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$SECRETKEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);
if(!$captcha || $response['success'] == false) {
$captchaError = true;
}
if((!$error) && (!captchaError)) {
include("../res/db.php");
$prep = $conn->prepare("SELECT * FROM users WHERE name=?");
$prep->bind_param("s", $username);
$prep->execute();
$prep->store_result();
echo "why doesn't this run??";
var_dump($prep->num_rows);
}
}
?>

И это форма:

<form method="POST" action="">
<?php if($error) { echo "<p class=\"text-danger text-center\">Error: Something went wrong while submitting your form</p>";}?>
<div class="form-group">
<h2 class="text-center">Username </h2>
<input value="<?php if($captchaError) {echo $username;}?>" class="form-control input-lg" pattern="[0-9A-Za-z_]{3,16}" title="You must use between 3 and 16 legal characters (0-9,a-z,A-Z and _)" type="text" name="username" maxlength="16" required>
</div>
<div class="form-group">
<h2 class="text-center">Email</h2>
<input value="<?php if($captchaError) {echo $email;}?>" class="form-control input-lg" type="email" name="email" maxlength="50" required>
</div>
<div class="form-group">
<h2 class="text-center">Password</h2>
<input class="form-control input-lg" type="password" name="password" pattern="[-0-9A-Za-z!@#$%^&*_+=]{6,}" title="You must use more than 6 legal characters (0-9,a-z,A-Z and !@#$%^&*_-+=)" required>
</div>
<div class="text-center">
<?php if($captchaError) { echo "<p class=\"text-danger text-center\">Error: You must fill out the captcha</p>";}?>
<div class="g-recaptcha" data-sitekey="{MYPUBLICKEY}"></div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary btn-lg">Submit</button>
</div>
</form>

Помните, всякий раз, когда я печатаю значения $error а также $captchaError они оба ложные, что должно приводить к выполнению оператора if, но по какой-то причине это не так, почему?

-1

Решение

TL; DR: Вам не хватает $ в captchaError,


Проблема в том, что вы используете

if((!$error) && (!captchaError)) {
//               /\

Вместо

if((!$error) && (!$captchaError)) {
//               /\

Взгляните на тест:

$error = false;
$captchaError = false;

echo ((!$error) && (!$captchaError)) ? 'ok' : 'no';
echo PHP_EOL;
echo ((!$error) && (!captchaError)) ? 'ok' : 'no';

Будет выводить:

Хорошо
нет

В некоторых случаях это даже напечатало бы:

Использование неопределенной константы captchaError — предполагается, что ‘captchaError’ в […]

Запустить тест


Некоторые люди могут подумать, что это (возможно) лучший способ получить nor тестовое задание:

(! ($var1 || $var) )
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]