2013-04-18 5 views
6

Ok, więc znalazłem kilka tutoriali online i śledziłem każdego z nich krok po kroku. Mój problem polega na tym, że znam javascript/jQuery o wiele lepiej niż ja wiem PHP i nie mogę wymyślić, jak jeszcze debugować, co dzieje się w tej sekcji. Zasadniczo mam garść przycisków i od i po naciśnięciu przycisku określa, jakie wartości domyślne są w formularzu.jQuery wywołuje plik PHP, aby pobrać dane z bazy danych mysql?

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 strona

<?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)"]); 
    } 

} 

?> 

Jakieś pomysły dlaczego sr nie jest ustawiony uzyskiwanie?

Czy jestem daleko od bazy?

Będę również bezwstydnie pamiętać, że nie wiem, co należy ustawić $ user i $ pass. Nie mogę znaleźć tego wytłumaczonego nigdzie

Z góry dziękuję!

EDIT: po większości kierunków poniżej i teraz gdy uruchamiam

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

mówi "Nie wybrano bazy danych." Ponadto, nie mam dostępu do naszego oryginalnego pliku MS Access teraz (jeden z moich członków zespołu to ma), ale gdy go otrzymam, wszystkie nagłówki staną się jednym nagłówkiem. To jest nasza pierwsza praca z programowaniem/zarządzaniem bazami danych, więc ciągle się uczymy.

+0

MySQL naprawdę działa? Czy sprawdziłeś błędy żądania na konsoli przeglądarki? –

+1

Po pierwsze, '$ rows = mysql_fetch_row ($ result)' brakuje średnika, co spowodowałoby błąd składni i uczyniłoby tę stronę bezużyteczną. –

+1

'$ user' i' $ password' musi być twoimi credntials w bazie danych serwer. Najprawdopodobniej są niepoprawne, nic nie zadziała, dopóki tego nie naprawisz. – RandomSeed

Odpowiedz

5

$user i $pass należy ustawić na nazwę użytkownika i hasło MySQL.

użyję coś takiego:

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.')); 
      } 
     } 

    } 

?> 

jako inny użytkownik powiedział, należy spróbować zmiany nazwy pól bazy danych bez spacji więc part parameters = >part_parameters, Part Number =>part_number.

Jeśli nadal występują problemy, a następnie (o ile nie jest to serwer produkcyjny) umieścić to na górze pliku PHP:

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

wyjście to wszelkie błędy i powinien pomóc wypracować co jest nie tak.

3

sr jest poza funkcją oddzwaniania powodzenia.Zacznij wprowadzenie go do funkcji sukcesu i zobaczyć co się dzieje

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

pamiętać, że jeśli oczekuje się dane być json, stanie się obiektem JS, więc nie będzie w stanie bezpośrednio wykorzystać dane

5

Kod zapytania DB jest niepoprawna:

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

użyciu ' zacytować rzeczy w zapytaniu zamienia je na struny, nazwy nie field/table. Więc twoje zapytanie jest błędne pod względem składniowym i logicznym. Twój kod po prostu zakłada sukces i nigdy nie złapie błędów, które będzie wypluwał mysql.

Zapytanie powinno być:

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

Uwaga wykorzystanie backticks (`) o nazwach Pole/stołowych, a korzystanie z apostrofami (') na wartość $ PID.

Następnie należy wykonać frazę:

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

Jeśli to się nie powiedzie, pojawi się komunikat o błędzie, że MySQL wraca.

I w wielkim układzie rzeczy, twój kod jest podatny na SQL injection attacks. Lepiej przeczytaj i dowiedz się, jak temu zapobiec, zanim przejdziesz dalej za pomocą tego kodu.

+2

Należy również zauważyć, że jest bardzo NIEZWYKLE użycie spacji i nawiasów w nazwach pól i tabel. Należy zdecydowanie rozważyć ich zmianę, aby wyeliminować spacje i nawiasy. –

Powiązane problemy