2017-02-07 3 views
0

Ich habe HTML mit Ajax und PHP-Datei. Ich benutze natives PHP mit mysqli für die Datenbank. in verbindung habe ich sript dass named ist config.php. dieses Skript:Ajax Beitrag mit mehreren Abfrage funktioniert nicht

<?php 
 
$db = new mysqli('localhost', 'root', '', 'student'); 
 
?>

Und dann habe ich HTML mit AJAX wie folgt aus:

$("form#form").submit(function(event) { 
 
    event.preventDefault(); 
 
    var formData = new FormData($(this)[0]); 
 
    $.ajax({ 
 
     url: 'student/action.php', 
 
     type: 'POST', 
 
     data: formData, 
 
     async: false, 
 
     cache: false, 
 
     contentType: false, 
 
     processData: false, 
 
     success: function(data) { 
 
      console.log(data); 
 
      if (data == 0) { 
 
       alert('all data updated'); 
 
      } else { 
 
       alert('failed'); 
 
      } 
 
     } 
 
    }); 
 
    return false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<body> 
 
    <form id='form'> 
 
     <input type='hidden' name='type' value='new-data'> 
 
     <input name='name' type='text'> 
 
     <input name='class' type='text'> 
 
     <input name='hobbies' type='text'> 
 
     <button type='submit' name='submit'>Submit</button> 
 
    </form> 
 
</body>

in Student/action.php Skript wie folgt,

<? 
 
php require_once '../config/config.php'; 
 
switch ($_POST[ 'type']) { 
 
    case "new-data": 
 
    $qry1=$db->query("INSERT INTO tableA SET id=NULL, name='$_POST[name]' "); 
 

 
    $qry2=$db->query("INSERT INTO tableB SET id=NULL, name='$_POST[class]' "); 
 

 
    $qry3=$db->query("INSERT INTO tableC SET id=NULL, name='$_POST[hobbies]' "); 
 

 
    if($qry1 && $qry2 && $qry3) { 
 
     echo '1'; 
 
    } else { 
 
     echo '2'; 
 
    } 
 
    break; 
 
} 
 
?>

nah, diese Anwendungen auf Hosting und hier die Verbindung nicht stabil. Wenn ich also per Klick submit einreiche, werden die Daten an student/action.php gepostet. Es muss alle Abfrage einfügen ($ Qry1, $ Qry2, und $ Qry3), aber wenn ich schlechte Verbindung hatte, fügen Sie nur einige Abfragen, nicht alle. Wie man es löst. Dank

+1

Entfernen Sie Speicherplatz von $ db –

+1

Siehe Transaktionen – Strawberry

+0

danke für beantwortet, alle Abfrage wurden erfolgreich abgeschlossen, wenn meine Verbindung ist gut, aber wenn meine Verbindung ist schlecht, es nur einige Abfrage erfolgreich. Ich möchte einen Weg, wie 3 Abfrage in ein Paket einfügen. und wenn meine Verbindung ist schlecht, es ist nicht einfügen und wenn Verbindung ist gut, diese Paketabfrage einfügen erfolgreich. Danke –

Antwort

1

Zuerst nie _GET, $ _REQUEST direkt in der Abfrage $ $ _POST, verwenden (wegen der SQL-Injection), alway verwenden mysqli_real_escape_string:

$name=$db->mysqli_real_escape_string($_POST['name']); 
$class=$db->mysqli_real_escape_string($_POST['class']); 
$hobbies=$db->mysqli_real_escape_string($_POST['hobbies']); 

Und vergessen Sie nicht Anführungszeichen

Wenn Sie möchten sicherstellen, dass alle Anfragen ausgeführt werden oder alle Transaktionen fehlschlagen (Sie benötigen innodb storage engine);

Wenn eine Anfrage fehlschlägt, werden alle vorherigen Anfragen zurückgesetzt. Sie können $ db-> rollback() verwenden; um alle Abfragen vor einem Commit abzubrechen. Weitere Informationen finden Sie unter php doc.

+0

danke Neo, ich werde das versuchen. es ist Aussehen, das ich wünsche. jubeln ... –

+0

danke Neo, ich werde das versuchen. es ist Aussehen, das ich wünsche. jubeln Sie ... BTW, ich verwendete vorbereitete Anweisung. Was ist das Beste? –

+0

Vorbereitete Anweisung kann mehrere gleiche Abfragen beschleunigen, aber es ist keine Transaktion, verwenden Sie $ db-> begin_transaction(); und $ db-> commit(); mit innodb/xtradb Speicher-Engine. – neoteknic