php ajax вставить в форму

#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 нет проблем, вот почему многие разработчики здесь, чтобы помогать друг другу