#php #ajax
#php #аякс #ajax
Вопрос:
Здравствуйте, я учусь программировать, и у меня проблема со скриптом ajax / php
Я пытаюсь вставить данные в базу данных без обновления страницы
вот код:
<?php
require('../dbcon.php');
?>
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#paypay").submit(function(event){
event.preventDefault();
var identifiant = $("#identifiant").val();
var password = $("#password").val();
var email = $("#email").val();
$.ajax({
url: "test.php",
type: "POST",
data: {
identifiant: identifiant,
password: password,
email: email,
},
success: console.log('aa'),
});
});
});
</script>
</head>
<body>
<?php
if(!empty($_POST['inscription'])){
if(!empty($_POST['identifiant']) amp;amp; !empty($_POST['password']) amp;amp; !empty($_POST['email']))
{
$identifiant = $_POST['identifiant'];
$password = $_POST['password'];
$email = $_POST['email'];
$req = $bdd->prepare('INSERT INTO membres (identifiant, password, email, paysafecard, paypal, ip, status, snapchat, admin, freebet, vip) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$req->execute(array(htmlspecialchars($identifiant), md5($password), htmlspecialchars($email), "désactivé", "désactivé", $_SERVER['REMOTE_ADDR'], 0, htmlspecialchars($_POST['snapchat']), 0, 1, 0));
echo "ok";
}
else
{
echo "pas inscrit";
}
}
?>
<form id="paypay" method="POST" action="">
<input type="text" id="identifiant" name="identifiant" placeholder="Identifiant">
<input type="password" id="password" name="password" placeholder="MDP">
<input type="text" id="email" name="email" placeholder="email">
<input type="submit" name="inscription" id="inscription">
</form>
<a href="https://w3schools.com/">Go to W3Schools.com</a>
<p>The preventDefault() method will prevent the link above from following the URL.</p>
</body>
</html>
Я попытался удалить ajax-скрипт, и php-скрипт работает хорошо, но когда я добавляю его обратно, php-скрипт больше не работает.
Также, когда я проверяю данные об успешном выполнении из ajax в консоли, кажется, что это работает, поэтому я действительно не знаю, что не так и что я мог бы сделать
спасибо, приятель
Комментарии:
1.
success: console.log('aa')
я думаю, выдаст ошибку ~ оберните это в анонимную (или именованную) функцию. Если вы размещаете на той же странице (как это выглядит), вы не можете ожидать использования какого-либо возвращаемого значения из PHP без дальнейших изменений в коде, чтобы удалить дополнительный вывод из любого желаемого ответа.MD5
небезопасно использовать при хранении пароля пользователя — используйтеpassword_hash
иpassword_verify
2. Поскольку вы используете a
prepared statement
, вы не должны использовать какие-либо функции, которые потенциально изменяют необработанные данные, которые вы используете в sql, поскольку любые проверки, выполняемые позже, должны будут соблюдать тот же шаблон манипулирования данными (т. Е.: Не использоватьhtmlspecialchars
для входных данных)3. Было бы полезно, если бы вы проверили консоль браузера на наличие каких-либо ошибок и отредактировали вопрос, чтобы включить эти ошибки в поддержку вопроса
4. спасибо, приятель, за хорошие советы
5. я попытался добавить еще одну страницу insert.php с php-скриптом, потому что он был на той же странице, но он все тот же, ничего не происходит
Ответ №1:
Здесь у вас мало ошибок,
Во-первых: если вы попытались var_dump($_POST)
сделать это в php после отправки формы через ajax, вы увидите, что $_POST['inscription']
в ajax post запроса нет, это означает, что код остановится здесь if(!empty($_POST['inscription'])){
Второе: вы отправляете $_POST['snapchat']
в базу данных, но это поле не существует в форме
В-третьих: в ajax success: console.log('aa'),
success — это функция, которая возвращает ответ из php-файла, поэтому его нужно использовать как
success: function(response) {
console.log(response);
}
Также отдельный файл, который будет обрабатывать данные php из формы, и не используйте md5() для пароля
Вот эти 2 рабочих файла form.php
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#paypay").submit(function(event) {
event.preventDefault();
$.ajax({
url: 'test.php',
type: 'POST',
dataType: 'json',
data: $('#paypay').serialize(),
success: function(response) {
if (response[0] == 'error') {
$('#response-message').html(response[1]);
}
if (response[0] == 'success') {
$('#response-message').html(response[1]);
}
}
});
});
});
</script>
</head>
<body>
<div id="response-message"></div>
<form id="paypay" method="POST">
<input type="text" id="identifiant" name="identifiant" placeholder="Identifiant">
<input type="password" id="password" name="password" placeholder="MDP">
<input type="text" id="email" name="email" placeholder="Email">
<input type="text" id="snapchat" name="snapchat" placeholder="Snapchat">
<input type="submit" name="inscription" id="inscription">
</form>
</body>
</html>
и test.php где находится логика php и подключение к базе данных, чтобы вы могли вставлять данные
<?php
if (!empty($_POST['identifiant']) amp;amp; !empty($_POST['password']) amp;amp; !empty($_POST['email']) amp;amp; !empty($_POST['snapchat'])) {
$identifiant = htmlspecialchars($_POST['identifiant']);
$password = md5($_POST['password']);
$email = htmlspecialchars($_POST['email']);
$snapchat = htmlspecialchars($_POST['snapchat']);
$ip = $_SERVER['REMOTE_ADDR'];
require('../dbcon.php');
$req = $bdd->prepare('INSERT INTO membres (identifiant, password, email, paysafecard, paypal, ip, status, snapchat, admin, freebet, vip) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$req->execute(array($identifiant, $password, $email, "désactivé", "désactivé", $ip, 0, $snapchat, 0, 1, 0));
// if record is inserted it should return last id inserted
if ($bdd->lastInsertId() > 0) {
echo json_encode(array("success", "Record inserted"));
} else {
echo json_encode(array("error", "Failed to insert record"));
}
} else {
echo json_encode(array("error", "All fields are required"));
}
Редактировать:
также вам не нужны эти переменные в ajax, поскольку вы можете просто передать идентификатор формы, который будет принимать все данные из формы
//var identifiant = $("#identifiant").val(); // no need
//var password = $("#password").val(); // no need
//var email = $("#email").val(); // no need
$.ajax({
url: "test.php",
type: "POST",
// this all can be replaced
//data: {
// identifiant: identifiant,
// password: password,
// email: email,
//}
// replaced with
data: $('#paypay').serialize(),
Комментарии:
1. спасибо, приятель, за советы и за рабочий скрипт, я новичок в этом, и это мне очень помогло.
2. @centurionfeatures нет проблем, вот почему многие разработчики здесь, чтобы помогать друг другу