Я отправляю информацию для сохранения в базе данных MySQL, используя Jquery / AJAX и PHP. Это то, что я сделал до сих пор:
function Addinfo() { var ew = document.getElementById("ew").value; var mw = document.getElementById("mw").value; var dataString = 'ew1=' + ew + '&mw=' + mw; if (ew == '' || mw == '') { alert("Please Fill All Fields"); } else { $.ajax({ type : "POST", url : "ajaxadd.php", data : dataString, dataType : 'text', cache : false, }) .done(function (data) { $('#message1').html(data); }) } return false; }
и мой PHP-код:
<?php $ew2 = $_POST['ew1']; $mw2 = $_POST['mw1']; $connection = mysql_connect("localhost", "root", ""); $db = mysql_select_db("tp", $connection); if (isset($_POST['ew1'])) { $query = mysql_query("insert into table(ew, mw) values ('$ew2', '$mw2')"); $addresult = mysql_query("SELECT * FROM `table` WHERE `ew` = '" . $_POST['ew1'] . "' ORDER BY `id` DESC LIMIT 1"); $aircraft = mysql_fetch_assoc($addresult); echo $aircraft; } mysql_close($connection); // Connection Closed ?>
Он успешно сохраняет информацию в базе данных, но я даже не могу получить сообщение об успехе, не говоря уже о переменной из PHP. Я прочитал бесчисленные сообщения об асинхронных вызовах, функциях обратного вызова и обещаниях, но я как-то не могу заставить это работать. Любая помощь будет оценена по достоинству.
JQuery: (файл main.js)
$(document).ready(function(){ $('.ajaxform').on('submit', function(e){ e.preventDefault(); $.ajax({ // give your form the method POST type: $(this).attr('method'), // give your action attribute the value ajaxadd.php url: $(this).attr('action'), data: $(this).serialize(), dataType: 'json', cache: false, }) .success(function(response) { // remove all errors $('input').removeClass('error').next('.errormessage').html(''); // if there are no errors and there is a result if(!response.errors && response.result) { // success // loop through result and append values in message1 div $.each(response.result, function( index, value) { $('#message1').append(index + ': ' + value + '<br/>'); }); } else { // append the error to the form $.each(response.errors, function( index, value) { // add error classes $('input[name*='+index+']').addClass('error').after('<div class="errormessage">'+value+'</div>') }); } }); }); });
PHP (файл ajaxadd.php)
<?php // assign your post value $inputvalues = $_POST; // assign result vars $errors = false; $returnResult = false; $mysqli = new mysqli('host', "db_name", "password", "database"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } // escape your values foreach ($inputvalues as $key => $value) { if(isset($value) && !empty($value)) { $inputvalues[$key] = htmlspecialchars( $mysqli->real_escape_string( $value ) ); } else { $errors[$key] = 'The field '.$key.' is empty'; } } if( !$errors ) { // insert your query $mysqli->query(" INSERT INTO `table`(`ew`, `mw`) values ('".$inputvalues['ew1']."', '".$inputvalues['mw']."') "); // select your query // this is for only one row result $addresult = " SELECT * FROM `table` WHERE `ew` = '".$inputvalues['ew1']."' ORDER BY `id` DESC LIMIT 1 "; if( $result = $mysqli->query($addresult) ) { // collect results while($row = $result->fetch_assoc()) { // assign to new array // make returnResult an array for multiple results $returnResult = $row; } } } // close connection mysqli_close($mysqli); // print result for ajax request echo json_encode(['result' => $returnResult, 'errors' => $errors]); exit; ?>
HTML:
<!doctype html> <html class="no-js" lang=""> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>Ajax form submit</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <form class="ajaxform" action="ajaxadd.php" method="POST"> <input type="text" name="ew1" /> <input type="text" name="mw" /> <button type="submit">Submit via ajax</button> </form> <div id="message1"></div> <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.12.0.min.js"><\/script>')</script> <script src="main.js"></script> </body> </html>
$.ajax({ type: "POST", url: "ajaxadd.php", ew1:ew, mw1:mw, data: dataString, dataType: 'text', cache: false, })
В PHP-коде в конце, где вы
echo $aircraft
изменяет его на echo json_encode($aircraft);
и в AJAX fucntion, где вы упомянули
cache:false
include success:function(response){alert response;}
Это даст вам значение переменной воздушного судна в функции AJAX. Удачи!
Вы должны изменить свой PHP-код, как показано ниже, вместо прямого возврата mysql_fetch_assoc, поскольку он возвращает только первую строку вашего результата SQL.
<?php $ew2 = $_POST['ew1']; $mw2 = $_POST['mw1']; $connection = mysql_connect("localhost", "root", ""); $db = mysql_select_db("tp", $connection); if (isset($_POST['ew1'])) { $result = array(); $query = mysql_query("insert into table(ew, mw) values ('$ew2', '$mw2')"); $addresult = mysql_query("SELECT * FROM `table` WHERE `ew` = '" . $_POST['ew1'] . "' ORDER BY `id` DESC LIMIT 1"); while($aircraft = mysql_fetch_assoc($addresult)) { $result[] = $aircraft; } #echo $aircraft; // wait until whole result is collected echo json_encode($result); } mysql_close($connection); // Connection Closed ?>
Также вы должны отредактировать свой javascript-код, как показано ниже;
function Addinfo() { var ew = document.getElementById("ew").value; var mw = document.getElementById("mw").value; var dataString = 'ew1=' + ew + '&mw=' + mw; if (ew == '' || mw == '') { alert("Please Fill All Fields"); } else { $.ajax({ type : "POST", url : "ajaxadd.php", data : dataString, dataType : 'text', cache : false, success: function(data) { //$('#message1').html(data); alert(data); }, error: function(data) { alert("Error"); } }); } return false; }
Кроме того, вы можете проверить $ connection и $ db для успешной инициализации соединения с базой данных и выбора базы данных, и снова совет для вашего php-кода должен использовать расширение mysqli вместо расширения mysql, которое устарело. Вы можете просто заменить mysql часть ваших методов вызова на mysqli. Также совет @ RakhalImming неплохо подходит для обеспечения безопасности вашего кода.