2013-04-18 13 views
6

Ok also ich habe eine Reihe von Tutorials online gefunden und bin ihnen Schritt für Schritt gefolgt. Mein Problem ist, dass ich JavaScript/jQuery viel besser kenne als PHP und ich kann nicht herausfinden, wie man überhaupt debuggt, was in diesem Abschnitt schief läuft. Grundsätzlich habe ich eine Reihe von Schaltflächen und eine von und wenn eine Schaltfläche gedrückt wird bestimmt, was die Standardwerte in dem Formular sind.jQuery ruft eine PHP-Datei auf, um Daten von der MySQL-Datenbank zu erhalten?

jQuery Side

$(document).ready(function(){ 
// CSPC and ADDUPDATE TOGGLE ARE DEFINED GLOBALLY 
    $('ul#parts').on('click', 'button', function(){ 
     ADDUPDATETOGGLE = "ADD"; 
     CSPC = $(this).attr("data-cspc"); 
     var form = $('div.sidebar form'), 
       sr = 0; 
     form.find("#cspc").val(CSPC); 
     $.ajax({ 
      type: "GET", 
      url: "getRate.php", 
      data: "pid=A5843", 
      dataType: "json", 
      success: function(data){ 
       sr = data; 
      } 
     }); 
     form.find("#strokeRate").val(sr); 
     showForm(); 
    }); 
}); 

PHP Seite

<?php 

$host = "localhost"; 
$user = "username"; 
$pass = "password"; 
$databaseName = "movedb"; 
$tableName = "part parameters"; 

$con = mysql_connect($host, $user, $pass); 
$dbs = mysql_select_db($databaseName, $con); 
//get the parameter from URL 
$pid=$_GET["pid"]; 
if (empty($pid)){ 
    echo "1"; //default rate 
} 
else{ 
    $db=mysql_pconnect("localhost");//connect to local database 
    mysql_select_db("movedb", $db);//select the database you want to use 
    if (!$db){ 
     echo ("error connecting to database");    
    } 
    else{ 
     //connection successful 
     $sql = "SELECT 'Processing Rate (ppm)' FROM 'part parameters' WHERE 'Part Number' LIKE '" . $pid . "'";//sql string command 
      $result=mysql_query($sql);//execute SQL string command 
      //result contains rows 
      $rows = mysql_fetch_row($result) 
      echo json_encode($rows["Processing Rate (ppm)"]); 
    } 

} 

?> 

Irgendwelche Ideen, warum sr nicht gesetzt zu werden?

Bin ich weg von der Basis?

Ich werde auch schamlos feststellen, dass ich nicht weiß, was $ user und $ pass gesetzt werden soll. Ich kann nirgends das erklärt finden

Vielen Dank im Voraus!

EDIT: Ich folgte die meisten der Anweisungen unten und wenn ich jetzt laufen

http://localhost/getRate.php?pid=A5843 

es heißt „Keine Datenbank ausgewählt.“ Außerdem habe ich jetzt keinen Zugriff auf unsere ursprüngliche MS Access-Datei (eines meiner Teammitglieder hat es), aber sobald ich es bekomme, werde ich alle Header in einen Word-Header machen. Dies ist unser erster Job mit Webprogrammierung/Datenbankmanagement, so dass wir ständig lernen.

+0

MySQL läuft wirklich? Haben Sie auf der Browser-Konsole nach Fehler gesucht? –

+1

Zum einen fehlt '$ rows = mysql_fetch_row ($ result)' ein Semikolon, was zu einem Syntaxfehler führen würde und diese Seite unbrauchbar machen würde. –

+1

'$ user' und' $ password' müssen Ihre Glaubwürdigkeit in der Datenbank sein Server. Sie sind höchstwahrscheinlich falsch, nichts wird jemals funktionieren, bis Sie das beheben. – RandomSeed

Antwort

5

$user und $pass sollte auf den Benutzernamen und das Passwort Ihres MySql-Benutzers eingestellt werden.

ich so etwas wie diese verwenden würde:

JS

success: function(data){ 
      if(data.status === 1){ 
       sr = data.rows; 
      }else{ 
       // db query failed, use data.message to get error message 
      } 
     } 

PHP:

<?php 

    $host = "localhost"; 
    $user = "username"; 
    $pass = "password"; 
    $databaseName = "movedb"; 
    $tableName = "part parameters"; 

    $con = mysql_pconnect($host, $user, $pass); 
    $dbs = mysql_select_db($databaseName, $con); 
    //get the parameter from URL 
    $pid = $_GET["pid"]; 
    if(empty($pid)){ 
     echo json_encode(array('status' => 0, 'message' => 'PID invalid.')); 
    } else{ 
     if (!$dbs){ 
      echo json_encode(array('status' => 0, 'message' => 'Couldn\'t connect to the db'));  
     } 
     else{ 
      //connection successful 
      $sql = "SELECT `Processing Rate (ppm)` FROM `part parameters` WHERE `Part Number` LIKE `" . mysqli_real_escape_string($pid) . "`"; //sql string command 
      $result = mysql_query($sql) or die(mysql_error());//execute SQL string command 
      if(mysql_num_rows($result) > 0){ 
       $rows = mysql_fetch_row($result); 
       echo json_encode(array('status' => 1, 'rows' => $rows["Processing Rate (ppm)"]); 
      }else{ 
       echo json_encode(array('status' => 0, 'message' => 'Couldn\'t find processing rate for the give PID.')); 
      } 
     } 

    } 

?> 

Als ein anderer Benutzer sagte, sollten Sie versuchen, Ihre Datenbankfelder ohne Leerzeichen umbenennen so part parameters = >part_parameters, Part Number =>part_number.

Wenn Sie immer noch Probleme dann (solange es nicht ein Produktionsserver) diese Ihrer PHP-Datei an der Spitze setzen:

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

erhalten Sie folgende Ausgabe Fehler und Sie sollten helfen, arbeiten Was läuft falsch?

3

sr ist es außerhalb der Erfolgs-Callback-Funktion.Starten Sie in die Erfolgsfunktion setzen und sehen, was

$.ajax({ 
     type: "GET", 
     url: "getRate.php", 
     data: "pid=A5843", 
     dataType: "json", 
     success: function(data){ 
      sr = data; 
      form.find("#strokeRate").val(sr); 
     } 
    }); 

bedenken, dass passiert, wenn Daten erwartet werden, eine json zu sein, es wird ein js Objekt worden, so dass Sie keine Daten zu verwenden, um direkt

5
in der Lage,

Ihre DB Abfrage-Code ist falsch:

$sql = "SELECT 'Processing Rate (ppm)' FROM 'part parameters' WHERE 'Part Number' LIKE '" . $pid . "'";//sql string command 

' mit Dingen in der Abfrage zu zitieren verwandelt sie in STRINGS, nicht Feld/Tabellennamen. Ihre Abfrage ist also syntaktisch und logisch falsch. Ihr Code geht einfach von Erfolg aus und fängt niemals die Fehler auf, die mysql ausspuckt.

sollte die Abfrage sein:

SELECT `Processing Rate (ppm)` 
FROM `part parameters` 
WHERE `Part Number` = '$pid' 

Beachten Sie die Verwendung von Backticks (`) auf den Feld/Tabellennamen und die Verwendung von einfachen Anführungszeichen (') auf dem $ pid Wert.

Dann führen Sie die Abfrage mit:

$result = mysql_query($sql) or die(mysql_error()); 

Wenn dies nicht gelingt, werden Sie die Fehlermeldung, dass MySQL Renditen.

Und im großen Schema der Dinge ist Ihr Code anfällig für SQL injection attacks. Lesen Sie besser und lernen Sie, wie Sie das verhindern können, bevor Sie mit diesem Code weitermachen.

+2

Es sollte auch angemerkt werden, dass es UNGEWÖHNLICH ist, Leerzeichen und Klammern in Ihren Feld- und Tabellennamen zu verwenden. Sie sollten diese Änderungen unbedingt in Betracht ziehen, um Leerzeichen und Klammern zu entfernen. –

Verwandte Themen