Добрый день ! я только изучаю рнр , мне нужно сделать проверку на сайте логина и пароля. Я написала код но он не работает, подскажите пожалуйста почему ... PHP: if (isset($_POST ["login"]) && ($_POST["passworld"])){ echo "thanks for data!"; user_data_check ($_POST["login"], $_POST["passworld"]); } else { header ("location: buy.php"); } $login= $_POST["login"]; $passworld = $_POST["passworld"]; function user_data_check ($login, $passworld){ $arr= ["Rita"=> "5050", "Nick" => "6666", "Vova" => "999"]; foreach ($arr as $key => $val){ if ($key == $login){ echo $key . "проверка пройдена";; } } }
Что значит не работает - он делает ровно то что вы написали Опишите пожалуйста, что, по-вашему, он должен делать?
Вот простая форма : HTML: <form action="toadd.php" method="post"> Enter you credentials:<br> Login <input type="text" name="login"/><br><br> Passworld <input type="passworld" name="passworld" /> <br><br> <input type="submit" value="send"> </form> Нужно что бы он во 2-й части кода (там где обработчик) , проверял введенные пользователя данные введенные (имя + пароль) на соответствие с теми что обозначены в массиве PHP: $arr= ["Rita"=> "5050", "Nick" => "6666", "Vova" => "999"]; и если проверка пройдена выдавал это сообщение. PHP: $login= $_POST["login"]; $passworld = $_POST["passworld"]; function user_data_check ($login, $passworld){ $arr= ["Rita"=> "5050", "Nick" => "6666", "Vova" => "999"]; foreach ($arr as $key => $val){ if ($key == $login){ echo $key. "проверка пройдена"; } } } Когда он выполняет эту часть кода на проверку ключа массива $arr и $login , выдает только раз проверка пройдена когда данные вводятся "Rita"=> "5050", а при других не выдает. Если ввести эти "Nick" => "6666" например. PHP: foreach ($arr as $key => $val){ if ($key == $login){ echo $key. "проверка пройдена"; } спасибо
PHP: <?php $_POST['login'] = 'Vova'; $_POST['password'] = '1111'; if (isset($_POST["login"]) && ($_POST["password"])){ echo "thanks for data!"; user_data_check($_POST["login"], $_POST["password"]); } function user_data_check($login, $password){ $arr= ["Rita"=> "5050", "Nick" => "6666", "Vova" => "999"]; foreach ($arr as $key => $val){ if ($key == $login){ echo $key . "проверка пройдена";; } } } Вы не поверите, но у меня ваш код прекрасно работает. Это выведет на экран Код (Text): thanks for data!Vovaпроверка пройдена
отладка/debug http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
PHP: <?php function user_data_check( $LOGIN, $PASS ) { $arr = [ 'Rita' => "5050", 'Nick' => "6666", 'Vova' => "999" ]; if ( !in_array ( $PASS, $arr ) ) { echo 'Passworld error'; } elseif ( !isset ( $arr[$LOGIN] ) ) { echo 'Login error'; } else { echo "{$LOGIN}проверка пройдена"; } } if ( !empty ( $_POST['login'] ) && !empty ( $_POST['passworld'] ) ) { echo 'thanks for data!<br>' . PHP_EOL; user_data_check ( $_POST['login'], $_POST['passworld'] ); } else { header ( 'location: /buy.php' ); } --- Добавлено --- Спойлер: ... Если просто тупо скопировать, то на врятли пойдет вам это на пользу.
MAN_IFE_ST, сейчас как раз ваш изучаю) --- Добавлено --- MAN_IFE_ST, вы сказали "что ни черта код не работает рано или поздно поймете" , а чего?
Ну уж если на то пошло, то давайте разделим логику проверки пользователя и шаблон отображения. Сейчас, у вас функция user_data_check что-то проверяет и выводит данные в html, по-сути на экран пользователю Если бы ваша функция вместо того чтобы что-то выводить на экран просто возвращала результат авторизации (true или false), а вот вызывающий код уже решал что делать то было бы всё намного симпатичнее. Это несложно для понимания (сложнее описать этот процесс словами), но если вы освоите этот приём, ваш код будет на порядок "чище" и "изящнее" Второй момент: вы в цикле проходите по всем пользователям и ищете соответствие. Если у вас немного пользователей, скажем порядка 100 или 1000, то такой подход вполне имеет место быть. Но если пользователей становится больше, то лучше обращаться к вашем ассоциативному массиву напрямую. Код (PHP): <?php if (isset($arr[$login]) === false) { // пользователь не найден return false; } $pwd = $arr[$login]; if ($pwd !== $password) { // пароль не подходит return false; } // Авторизация прошла успешно return true;
topas, скажите вот этот кусок кода -проверки, if (isset($arr[$login]) === false) // пользователь не найден return false;} можно записать так , или нет? if (! isset($arr[$login])) // пользователь не найден return false;}