2016-04-14 8 views
2

Ich habe Probleme beim Ausführen von SQL über AJAX, wenn eine Dropdown-Box geändert wird und möchte, wenn möglich, einige Hilfe.Dropdown-Box zum Einfügen von Wert in MYSQL db OnChange mit AJAX und PHP

Background Info Ich habe einen Tageskalender mit der Erstellung, die in einem Fitnessstudio liefen alle Klassen zeigt beauftragt worden, der an seinem Maximum ist 5 x Klassen von 6 (30) Personen pro Stunde für 14 hours.I‘ M kein Profi und ich habe einen verschachtelten Weg um dieses Problem geschaffen, lass es mich wissen, wenn ich habe.

Ich habe es geschafft, die Ansicht zu erstellen, die aus 14 Spalten von 30 Dropdown-Boxen besteht (5 x Klassen von 6 pro Stunde für 14 Stunden). Jedes Dropdown-Feld fragt die Datenbank ab, und wenn sich ein Eintrag befindet, wird das Feld mit dem Namen des bookinguser ausgefüllt. Wenn keine Buchung gefunden wird, wird eine Drop-Down-Box erstellt, die die Mitglieder-Tabelle abfragt und alle Mitglieder des Fitness-Studios vorstellt, die diese Person hoffentlich bei der Buchung einbucht. - Hierin ist meine aktuelle Ausgabe!

Der Name jeder Dropdown-Box entspricht der Uhrzeit, der Gruppe und der Anzahl der Mitarbeiter, die ich an die JavaScript-Funktion und eventuell an die SQL-Anweisung übergeben möchte. Der Wert jeder Option entspricht der Mitglied-ID, die ebenfalls übergeben wird und alle Informationen enthält, die zum Erstellen des SQL benötigt werden.

Der Code, den ich

HTML bisher - von der PHP-generierten snipped Schleifen

<div id="results"> 
<div id="07" class="column">07:00<br/> 
<div id="group1"> 
<select name="07:00-1-0" onchange="getda(this.value,this)"> 
    <option value="none">---------------</option> 
    <option value="2">John Doe</option> 
    <option value="1">Joe Bloggs</option> 
</select> 
<select name="07:00-1-1" onchange="getda(this.value,this)"> 
    <option value="none">---------------</option> 
    <option value="2">John Doe</option> 
    <option value="1">Joe Bloggs</option> 
</select> 

PHP

<?php 
$mysqli = new mysqli("localhost", "root", "", "gym"); 

/* check connection */ 
if ($mysqli->connect_errno) { 
printf("Connect failed: %s\n", $mysqli->connect_error); 
exit(); 
} 
function hyphenate($str) { 
return implode("-", str_split($str, 2)); 
} 
function getmembers($time,$group,$iteration) 
{ 
$date=$_GET["date"]; 

$date=hyphenate($date); 
$date = explode('-', $date); 
$new_date = $date[2].'-'.$date[1].'-'.$date[0]; 

$mysqli = new mysqli("localhost", "root", "", "gym"); 
if ($iteration == 0){ 
$result = $mysqli->query("select members.memberid, members.firstname, members.lastname from bookings inner join members on bookings.memberid = members.memberid where bookings.date = '$new_date' and time = '$time' and bookings.groupnumber = '$group' order by bookings.bookingid ASC limit 1"); 
} 
else {$result = $mysqli->query("select members.memberid, members.firstname, members.lastname from bookings inner join members on bookings.memberid = members.memberid where bookings.date = '$new_date' and time = '$time' and bookings.groupnumber = '$group' order by bookings.bookingid ASC limit 1,$iteration"); 
} 
$rowcount=mysqli_num_rows($result); 
if ($rowcount==$iteration && $iteration == 0) 
{ 
$result = $mysqli->query("select firstname, lastname,memberid from members order by firstname ASC"); 


echo '<select name="'.$time.'-'.$group.'-'.$iteration.'" onchange="getda(this.value,this)"><option value="---------------">---------------</option>'; 

while ($row = $result->fetch_assoc()) { 

       unset($firstname, $lastname); 
       $firstname = $row['firstname']; 
       $lastname = $row['lastname']; 
       $memberid = $row['memberid']; 
       echo '<option value="'.$memberid.'">'.$firstname . ' ' . $lastname .'</option>'; 

} 

echo "</select>"; 
} 
else if ($rowcount>=$iteration){ 
echo '<select name="'.$time.'-'.$group.'-'.$iteration.'" onchange="getda(this.value,this)">'; 

while ($row = $result->fetch_assoc()) { 

       unset($firstname, $lastname); 
       $firstname = $row['firstname']; 
       $lastname = $row['lastname']; 
       $memberid = $row['memberid']; 
       echo '<option value="'.$memberid.'">'.$firstname . ' ' . $lastname .'</option><option value="cancel">Cancel</option>'; 
} 
echo "</select>"; 
} 
else{ 
    $result = $mysqli->query("select firstname, lastname, memberid from members order by firstname ASC"); 


echo '<select name="'.$time.'-'.$group.'-'.$iteration.'" onchange="getda(this.value,this)"><option value="---------------">---------------</option>'; 

while ($row = $result->fetch_assoc()) { 

       unset($firstname, $lastname); 
       $firstname = $row['firstname']; 
       $lastname = $row['lastname']; 
       $memberid = $row['memberid']; 
       echo '<option value="'.$memberid.'">'.$firstname . ' ' . $lastname .'</option>'; 

} 

echo "</select>"; 

} 
} 

?> 

JS

function getda(id,booking){ 
$.ajax({ 
type: 'post', 
url: 'samefile.php', 
data: { 
    get_option:id 
    }, 
success: function (response) { 
    document.getElementById("result").innerHTML=response; 
} 
    }); 
} 

samefile.php

Die Konsole in Chrom sieht gut aus (unten), aber keine Datensätze eingefügt und die PHP-Warnung wird nicht angezeigt. Ich habe keine der Variablen an die SQL übergeben, als ich zuerst getestet habe, dass eine Abfrage ordnungsgemäß ausgeführt wurde

jquery.min.js: 4 XHR fertig geladen: POST "http://localhost/gym/samefile.php" .send @ jquery.min.js: 4n. extend.ajax @ jquery.min.js: 4getda @ cal.php date = 140416:? 42onchange @ cal.php date = 140416: 36ListPicker._handleMouseUp @ about: blank: 535

Antwort

0

könnte in jQuery aussehen wollen .change() . Ich denke, dass es mit etwas wie unten für deinen Code funktionieren würde. Man könnte es auch Ihre Funktion aufrufen, die auch

$(".class").change(function() { //can use #id here too 
     $.ajax({ 
     type: 'post', 
     url: 'samefile.php', 
     data: { 
      get_option:this.value 
     }, 
     success: function (response) { 
      document.getElementById("result").innerHTML=response; 
     } 
     }); 
    }); 
+0

Ich habe die Klasse .dropdown auf alle Dropdown-Boxen hinzugefügt und im Code in die Klasse geändert, aber ich habe immer noch kein Glück. Ich habe auch die Änderungsparameter entfernt –

0

Ich sehe drei Probleme in samefile.php Ajax in sich hat - include falsch geschrieben, ein zusätzliches Semikolon und eine fehlende Schließbügel:

<?php 
if(isset($_POST['get_option'])) 
    { 
     include 'config/config.php'; 

     $name = $_POST["get_option"]; 

     //this should be converted to parameterized queries 
     $sql = "insert into bookings (memberid,date,time,groupnumber) values (1,'2016-04-14','09:00',3)"; 
     $query = mysqli_query($sql); 

     if(is_object($query)){ 
      echo 'successfully inserted'; 
     } else { 
     echo 'insert failed'; 
     } 

     $mysqli->close(); 

    } else { 
     echo 'no data to process!'; 
    } 

?> 
+0

Hallo, die Korrekturen haben leider das Problem nicht gelöst, würde es eine Möglichkeit für mich geben zu testen, dass der Code in selffile.php ausgeführt wird, versuchte ich die js-Warnung, aber nichts passiert –

+0

Richtig, mit Ajax können Sie keinen Alarm verwenden, da dies alles hinter den Kulissen geschieht. Um Daten zurückzugeben, echo es einfach aus der PHP-Datei. Ich habe die Warnung aus meiner Antwort heraus bearbeitet.Mit diesem Code konnte ajax 'no data to process' zurückgeben, was bedeutet, dass $ _POST ['get_option'] nicht gesetzt, 'erfolgreich eingefügt oder fehlgeschlagen wurde. Überprüfen Sie auch, ob Sie in Ihrem HTML ein Element mit id = "result" haben. Ich sehe im obigen Code einen namens resultS, aber wenn Sie dieses Element nicht im DOM haben, werden Sie nichts sehen. – larsAnders