Сценарий вставки данных Ajax не работает правильно.Как я могу улучшить этот код? - PullRequest
0 голосов
/ 25 февраля 2019

Я создал страницу с кнопкой Bootstrap Modal.Когда пользователь нажимает на эту кнопку, открывается модальное окно и отображается форма для вставки данных в таблицу Mysql через код Ajax и PHP.Что происходит, так это то, что мой Ajax Script не работает должным образом.Я пытался найти похожие вопросы, но я не нашел решения:

  1. Мой php-код Ajax не работает правильно
  2. Почему код вУспешный вызов AJAX не работает?
  3. Как вставить в таблицу MySQL, используя ajax?

В моей таблице 3 столбца:

ID   --> INT(11) AI
name --> VARCHAR(100)
email--> VARCHAR(100)

Ниже приведен модальный код, который я использую для добавления данных с помощью сценария Ajax:

<button type="button" class="btn btn-block btn-primary" data-toggle="modal" data-target="#dataModal>ADD USER</button>

<!-- Modal -->
<div class="modal fade" id="dataModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
   <div class="modal-dialog modal-lg" role="document">
      <div class="modal-content">
         <div class="modal-header">
            <h5 class="modal-title" >Add Users</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
            </button>
         </div>
         <div class="modal-body">
            <form id="usersForm" method="post">
               <input type="text" name="name"/>
               <input type="email" name="email"/>
         </div>
         <div class="modal-footer">
         <button type="button" class="btn btn-secondary" data-dismiss="modal">CLOSE</button>
         <button type="submit" class="btn btn-success" id="submit" >ADD USER</button>
             </form>    
         </div>
      </div>
   </div>
</div>

Чтобы отправить данные в базу данных с помощью сценария PHP ( insert.php ), я использую этот код сценария Ajax в своем проекте:

<!--AJAX-->   

<script type="text/javascript">
$(document).on('submit','#usersForm',function(e) {
var Name = $("#name").val();
var Email = $("#email").val();

// AJAX code to send data to php file.
    $.ajax({
        type: "POST",
        url: "insert.php",
        data: {Name:name, Email:email},
        dataType: "JSON",
        success: function(data) {
         alert("Data Inserted Successfully.");
        },
        error: function(err) {
        alert(err);
        }
    });

 }

</script>

Ниже приведен код insert.php , который я использую для вставки данных в таблицу Mysql:

<?php

include('db_connect.php');

$Name = $_POST['name'];
$Email = $_POST['email'];

$stmt = $connection->prepare("INSERT INTO users (name, email) VALUES(:name, :email)");

 $stmt->bindparam(':name', $Name);
 $stmt->bindparam(':email', $Email);
 if($stmt->execute())
 {
  $res="Data Inserted Successfully:";
  echo json_encode($res);
  }
  else {
  $error="Not Inserted,Some Probelm occur.";
  echo json_encode($error);
  }

  ?>

И мой скрипт подключения к базе данных PHP db_connect.php :

<?php

$username = 'root';
$password = '';
$connection = new PDO( 'mysql:host=localhost;dbname=system', $username, $password );

?>

Если я добавлю действие в тег формы, как это:

form id = "usersForm" method = "post" action = "insert.php"

данные отправляются в базу данных, но если я удалю action = "insert.php" при использовании ничего не происходитНажмите кнопку «Отправить».Я думаю, что-то связано с моим сценарием Ajax.Что бы это могло быть?

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019
<input type="text" name="name"/>
<input type="email" name="email"/>

В вашей форме добавьте ID attr для ввода.

<input type="text" name="name" id="name" />
<input type="email" name="email" id="email" />

Или попробуйте изменить ваш ajax:

var Name = $("#name").val();
var Email = $("#email").val();

на

var Name = $("#usersForm input[name="name"]").val();
var Email = $("#usersForm input[name="email"]").val();

Такжедобавить e.preventDefault ();за необновление страницы, после

$(document).on('submit','#usersForm',function(e) {
e.preventDefault();
0 голосов
/ 25 февраля 2019

Я нашел и другой способ решить эту проблему:

<script>

$(document).on('submit', '#usersForm', function(event){
        event.preventDefault();
    $.ajax({
                url:"insert.php",
                method:'POST',
                data:new FormData(this),
                contentType:false,
                processData:false,
                success:function(data){
                    alert('OK');
                    $('#usersForm')[0].reset();
                    $('#dataModal').modal('hide');
                }
});
});

</script>
0 голосов
/ 25 февраля 2019

Вот исправление вашего кода.Попытайся.это работает.

Убедитесь, что вы включили вашу библиотеку jquery.

во-вторых, вы не установили идентификатор для электронной почты и имя в форме ввода согласно

id = "name" id = "email"

В-третьих, вы должны удалить элемент формы вокруг ввода текста.просто удалите это.

<form id="usersForm" method="post">
</form

и используйте его следующим образом

     <input type="text" name="name" id="name"/>
       <input type="email" name="email" id="email"/>
 <button type="submit" class="btn btn-success" id="submit" >ADD USER</button>

наконец, в Ajax-вызове вы устанавливаете переменные Email и Имя как заглавная буква, но в своем php вы публикуете ее как маленькое письмо.пожалуйста, будьте осторожны

Ниже приведен код с изменениями

        <script src="jquery.min.js"></script>
<script>
$(document).ready(function(){
    $('#submit').click(function(){
var Name = $("#name").val();
var Email = $("#email").val();

alert(Name);
alert(Email);

// AJAX code to send data to php file.
    $.ajax({
        type: "POST",
        url: "insert.php",
        data: {Name:name, Email:email},
        dataType: "html",
        success: function(data) {
         alert("Data Inserted Successfully.");
        },
        error: function(err) {
        alert(err);
        }
    });
})
});




</script>

или вы также можете использовать мой недавно протестированный код.

        <script src="jquery.min.js"></script>

<script type="text/javascript">

$(document).ready(function(){


    $('#submit').click(function(){
alert('ok');

var name = $('#name').val();
var email = $('#email').val();

//set variables to check for valid email
    atpos = email.indexOf("@");
    dotpos = email.lastIndexOf(".");


        if(name==""){

            alert('please Enter name');


        }

 else if(email==""){

            alert('please Enter Email');


        }


else  if (atpos < 1 || ( dotpos - atpos < 2 ))
    {
        alert("Please enter correct email Address")
        return false;
    }





else{

$('#loader').fadeIn(400).html('<span>Please Wait, Your Data is being Submitted</span>');





var datasend = "nm="+ name + "&em=" + email;

        $.ajax({

            type:'POST',
            url:'insert.php',
            data:datasend,
                        crossDomain: true,
            cache:false,
            success:function(msg){


alert('message successfully inserted');

                //empty name and email box after submission
$('#name').val('');
                $('#email').val('');
                $('#loader').hide();
                $('#alertbox').fadeIn('slow').prepend(msg);
                $('#alerts').delay(5000).fadeOut('slow');

            }

        });

        }

    })

});


</script>






<div id="loader"></div>
 <div id="alertbox"></div>


               <input type="text" name="name" id="name"/>
               <input type="email" name="email" id="email"/>
         <button type="submit" class="btn btn-success" id="submit" >ADD USER</button>

Обновленный раздел

Попробуйте это.он будет отображать успешное сообщение после того, как ajax отправка будет в порядке

    <script type="text/javascript">

    $(document).ready(function(){


        $('#submit').click(function(){


    var name = $('#name').val();
    var email = $('#email').val();

    //set variables to check for valid email
        atpos = email.indexOf("@");
        dotpos = email.lastIndexOf(".");


            if(name==""){

                alert('please Enter name');


            }

     else if(email==""){

                alert('please Enter Email');


            }


    else  if (atpos < 1 || ( dotpos - atpos < 2 ))
        {
            alert("Please enter correct email Address")
            return false;
        }





    else{

    $('#loader').fadeIn(400).html('<span>Please Wait, Your Data is being Submitted</span>');





    var datasend = "Name="+ name + "&Email=" + email;

            $.ajax({

                type:'POST',
                url:'insert.php',
                data:datasend,
                            crossDomain: true,
                cache:false,
                success:function(msg){

    if(msg=='success'){
    alert('message successfully inserted');
    }else{
alert('message submission failed');
}
                    //empty name and email box after submission
    $('#name').val('');
                    $('#email').val('');
                    $('#loader').hide();
                    $('#alertbox').fadeIn('slow').prepend(msg);
                    $('#alerts').delay(5000).fadeOut('slow');

                }

            });

            }

        })

    });


    </script>

php, например, файл тестирования. insert.php

<?php


$Name = $_POST['Name'];
$Email = $_POST['Email'];


echo "success";
?>

, поэтому ваш php-файл должен выглядеть так:

<?php

//include('db_connect.php');

$Name = $_POST['Name'];
$Email = $_POST['Email'];


$stmt = $connection->prepare("INSERT INTO users (name, email) VALUES(:name, :email)");

 $stmt->bindparam(':name', $Name);
 $stmt->bindparam(':email', $Email);
 if($stmt->execute())
 {
  //$res="Data Inserted Successfully:";
  //echo json_encode($res);

echo "success";
  }
  else {
 // $error="Not Inserted,Some Probelm occur.";
  //echo json_encode($error);
echo "failed";
  }

  ?>
...