Hallo, ich habe zwei Dateien, die miteinander verbunden werden sollen. Ich möchte eine AJAX-Anfrage an eine andere Seite senden, die eine SQL-Abfrage zum Senden von Formularinformationen verwendet.

Die Anwendung, die ich erstellen möchte, ist ein Fragebogen mit acht Fragen. Jede Frage enthält vier Antworten, die mit derselben ID (qid) gepaart sind, und jede Antwort hat einen Wert aus der Datenbank. Nachdem Sie acht Fragen beantwortet haben, wird eine Schaltfläche angezeigt, die eine AJAX-Anfrage an die Seite test.php (mit dem Namen submitAJAX) sendet.

Das Problem ist, dass obwohl meine Verbindung mit AJAX funktioniert, die Werte aus dem Formular nicht an meine Datenbank gesendet werden. Früher dachte ich, dass das Problem möglicherweise auf der Formularseite liegt, aber jetzt denke ich, dass das Problem in dieser Datei liegt:

test.php (Datei mit json)

<?php
$localhost = "localhost";
$username = "root";
$password = "";
$connect = mysqli_connect($localhost, $username, $password) or die ("Kunde inte koppla");
mysqli_select_db($connect, 'wildfire');
if(count($_GET) > 0){
   $answerPoint = intval($_GET['radiobtn']);
   $qid = intval($_GET['qid']);
$tid = intval($_GET['tid']);
   $sql2 = "INSERT INTO result (qid, points, tid) VALUES ($qid, $answerPoint, $tid)";
   $connect->query($sql2); 
   $lastid = $connect->insert_id;
   if($lastid>0) {
    echo json_encode(array('status'=>1));
}
   else{
    echo json_encode(array('status'=>0));
} 
}
?>

Ich denke, dass das Problem in der Zeile liegen könnte, in der: if($lastid>0) { $ lastid sollte immer größer als 0 sein, aber wenn ich test.php überprüfe, erhalte ich folgende Meldung: {"status":0} Es ist beabsichtigt, dass ich folgende Meldung erhalte: {"status":1}

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
<?php
$localhost = "localhost";
$username = "root";
$password = "";
$connect = mysqli_connect($localhost, $username, $password) or die ("Kunde inte koppla");
mysqli_select_db($connect, 'wildfire');

$qid = 1;
if(count($_POST) > 0){
    $qid = intval($_POST['qid'])+1;

}


?>

<form method="post" action="">
<input type="hidden" name="qid" id="qid" value="<?=$qid?>">
<?php
$sql1 = mysqli_query($connect,"SELECT * FROM question where answer != '' && qid =".intval($qid));
while($row1=mysqli_fetch_assoc($sql1)){
?>
<input type='radio' name='answer1' class="radiobtn" value="<?php echo $row1['Point'];?>">
<input type='hidden' name='tid' class="tid" value="<?php echo $row1['tid'];?>">
<?php echo $row1['answer'];?><br>
<?php
}
?>
<?php if ($qid <= 8) {  ?>
<button type="button" onclick="history.back();">Tillbaka</button>
<button type="submit">Nästa</button>
<?php } else { ?>
<button id="submitAjax" type="submit">Avsluta provet</button>
     <?php } ?>  
</form>

<script src="https://code.jquery.com/jquery-1.11.3.js"></script> 
  <script type="text/javascript">
function goBack() {
    window.history.go(-1);
}
$(document).ready(function(){ 
$("#submitAjax").click(function(){
        if($('.radiobtn').is(':checked')) { 
            var radiobtn = $('.radiobtn:checked').val();
            var qid = $('#qid').val();            
             var answer = $('input[name=answer1]:radio').val();
            $.ajax(
            {
                type: "GET",
                url: 'test.php',
                dataType: "json",
                data: "radiobtn="+radiobtn+"&qid="+qid,
                success: function (response) {
                    if(response.status == true){
                        alert('points added');
                    }
                    else{
                        alert('points not added');   
                    }
                }
            });

            return false;
        }
    });
});
  </script>

    </body>

Die Werte, die ich von test.php an meine Datenbank senden möchte, sind:

Qid (int), tid (int), Punkt (int)

Es besteht eine Datenbankverbindung, und die SQL-Abfrage meiner test.php-Datei sollte funktionieren, sendet jedoch keine Formularinformationen. Gibt es etwas, das ich umschreiben oder reparieren muss, damit es funktioniert?

0
PHP Scrub 5 Jän. 2016 im 19:02

3 Antworten

Beste Antwort

Erstens verwendet Ihr Datenparameter im AJAX-Aufruf nicht die richtige Syntax. Ihnen fehlen Klammern. Es sollte so aussehen:

data: JSON.stringify({ radiobtn: radiobtn, qid: qid }),

Zweitens würde ich vorschlagen, POST anstelle von GET zu verwenden:

type: "POST",

Dies bedeutet, dass Sie Ihre Daten in $ _POST ['radiobtn'] und $ _POST ['qid'] auf test.php suchen müssen. HINWEIS: Sie sollten anhand von isset () nach dem Schlüssel suchen, den Sie erwarten, bevor Sie den zuweisen Wert für eine Variable, wie folgt:

$myBtn = isset($_POST['radiobtn']) ? $_POST['radiobtn'] : null;

Drittens Verwenden Sie zum Testen eine console.log () in Ihrer Bedingung, die nach dem zu aktivierenden Kontrollkästchen sucht, um zu überprüfen, ob die Bedingung wie erwartet funktioniert.

if($('.radiobtn').is(':checked')) {
    console.log('here');

UPDATE:

Viertens: Sie sollten den Inhaltstyp in Ihrem AJAX-Aufruf wie folgt angeben:

contentType: "application/json; charset=utf-8",
2
devlin carnate 5 Jän. 2016 im 20:51

Nachdem Sie Ihre Abfrage ausgeführt haben, die das Ergebnis einfügt, können Sie mit einer SQL-Anweisung die letzte Einfüge-ID auswählen. Versuchen Sie etwas wie

$sql2 = "INSERT INTO result (qid, points, tid) VALUES ($qid, $answerPoint,         $tid)";
$connect->query($sql2); 
$result = $connect->query("SELECT LAST_INSERT_ID()");
$row = $result->fetch_row();
$lastid = $row[0];

Das sollte die korrekte letzte Einfügungs-ID zurückgeben, wenn dort Ihr Fehler aufgetreten ist.

1
user5037156user5037156 5 Jän. 2016 im 16:24

mysqli_insert_id () gibt die ID zurück, die durch eine Abfrage auf a generiert wurde Tabelle mit einer Spalte mit dem Attribut AUTO_INCREMENT.

In Ihrem SQL geben Sie die ID selbst an, es gibt keine automatische Inkrementierung. Sie sollten also 0 von $connect->insert_id erhalten, da die Funktion Null zurückgibt, wenn keine vorherige Abfrage für die Verbindung vorhanden war oder wenn die Abfrage keinen AUTO_INCREMENT -Wert aktualisiert hat .

Für Ihren Zweck können Sie den Wert return von mysqli_query () stattdessen wird TRUE bei Erfolg und FALSE bei Misserfolg zurückgegeben.

if($connect->query($sql2)) {
   echo json_encode(array('status'=>1));
}
else{
   echo json_encode(array('status'=>0));
} 
1
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ 5 Jän. 2016 im 17:00