#javascript #php #jquery #mysql #ajax
#javascript #php #jquery #mysql #ajax
Вопрос:
Я пытаюсь использовать jQuery, AJAX, PHP и MySQL, чтобы проверить, существует ли электронное письмо, введенное в форму, уже в базе данных. Это мой текущий код jQuery :
$.post('check-email.php', {'suEmail' : $suEmail}, function(data) {
if(data=='exists') {
validForm = false;
$suRememberMeCheckbox.css('top', '70px');
$suRememberMeText.css('top', '68px');
$signUpSubmit.css('top', '102px');
$tosppText.css('top', '115px');
$suBox.css('height', '405px');
$suBox.css('top', '36%');
$errorText.text('The email has been taken.');
return false;
};
});
И это мой PHP-код:
<?php include("dbconnect.php") ?>
<?php
$sql = "SELECT email FROM users WHERE email = " .$_POST['suEmail'];
$select = mysqli_query($connection, $sql);
$row = mysqli_fetch_assoc($select);
if (mysqli_num_rows($row) > 0) {
echo "exists";
}
?>
Когда я просматриваю форму регистрации, когда я использую электронное письмо, уже имеющееся в базе данных, текст ошибки никогда не меняется на то, что я указал, а вместо этого на некоторые другие случаи ошибок, которые я закодировал. Почему это не работает! Большое спасибо!
Комментарии:
1. Заключаем
$_POST['suEmail']
в кавычки,... email = '" . $_POST['suEmail'] . "'";
2. Кроме того, измените
if (mysqli_num_rows($row) > 0) { ...
наif (mysqli_num_rows($select) > 0) { ...
, и нет необходимости извлекать строку из результирующего набора.3. Используйте параметризованные запросы, убейте двух зайцев одним выстрелом.
4. Привет, что такое параметризованные запросы? Кроме того, я сделал все вышеперечисленное, и это все равно не сработало. Большое спасибо! : D
Ответ №1:
Use This Code: Working Perfectly:
<?php
include("dbconnect.php");
$sql = "SELECT email FROM users WHERE email = '" .$_POST['suEmail']."' ";
$select = mysqli_query($connection, $sql);
$row = mysqli_fetch_assoc($select);
if (mysqli_num_rows($select) > 0) {
echo "exists";
}
?>
Комментарии:
1. Это зависит от вашего определения «идеального». Если вам нравится идея, что кто-то взломает вашу базу данных, то да, это идеально
2. Привет, я сделал это, но это все еще не работает. Большое спасибо!
Ответ №2:
Если он не меняется, это означает, что у вас может быть ошибка с вашим запросом. Проверьте параметры разработчика в вашем браузере в разделе сеть. Там вы можете увидеть все выполняемые вызовы ajax. Нажмите, чтобы просмотреть ответ. Проверьте, была ли ошибка в вашем запросе.
Также вы должны подтвердить отправку формы. Что-то вроде.
if($_SERVER['REQUEST_METHOD'] = 'POST')
{
//maybe send a token over with the form to prevent form spoofing
if($_POST['token'] === $_SESSION['token'])
{
// all your code goes in here
// you provably want to check that is a real email also
// check email input against regular expression
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
//if valid email to variable and escape data
$e = sanitizeString($_POST['email']);
}else
{
/// if not a real email to errors array
$reg_errors['email'] = 'Please enter a valid email address!';
}
}
}
Вы должны использовать инструкции prepare в своих запросах.
Комментарии:
1. Привет, я использую js / jQuery для проверки, является ли это законным электронным письмом, если в нем отсутствует информация и т. Д. Я новичок в веб-разработке, что вы имеете в виду, отправляя токен вместе с формой? Есть ли что-нибудь, что я могу прочитать, чтобы узнать об этом? большое спасибо!
2. Подделка межсайтовых запросов (CSRF) любой может подделать вашу форму и отправить запрос с помощью curl. Добавление скрытого поля в вашу форму в качестве случайного токена. Легко передать ее по вашему вызову ajax и проверить ее на соответствие $ _SESSION [‘token’] .