2013-04-18 125 views
6

好吧,我已经在网上找到了很多教程,并且一步一步地跟着他们。我的问题是,我知道JavaScript/jQuery比我知道的PHP要好得多,而且我无法弄清楚如何调试该部分中出现的问题。基本上我有一堆按钮和一个按钮,当它被按下时,它决定了默认值在窗体中的内容。jQuery调用一个PHP文件来从MySQL数据库中获取数据?

jQuery的侧面

$(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侧

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

} 

?> 

任何想法,为什么SR是没有得到设置?

我离开基地吗?

我也会无耻地注意到,我不知道$ user和$ pass应该设置为什么。我无法找到解释任何地方

在此先感谢!

编辑:我跟着最下方的方向,现在当我运行

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

它说:“没有数据库中选择。”另外,我现在还没有访问我们原来的MS Access文件(我的一个团队成员拥有它),但是一旦我得到它,我会将所有标题制作成一个单词标题。这是我们在Web编程/数据库管理方面的第一份工作,所以我们不断学习。

+0

MySQL是否真的在运行?您是否在浏览器控制台检查请求错误? –

+1

一方面,'$ rows = mysql_fetch_row($ result)'缺少一个分号,它会导致语法错误并且使这个页面无效 –

+1

'$ user'和'$ password'必须是您对数据库的信用服务器。他们很可能是不正确的,除非你解决这个问题,否则什么都不会有效 – RandomSeed

回答

5

$user$pass应该设置为您的MySql用户的用户名和密码。

我会使用这样的:

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

    } 

?> 

至于其他用户说,你应该尝试没有空间,以便part parameters重命名你的数据库中的字段= >part_parametersPart Number =>part_number

如果您仍然遇到问题则(只要它不是一个生产服务器)把这个在你的PHP文件的顶部:

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

这将输出的任何错误,应该有助于你的工作出了什么问题。

3

sr它在成功回调函数之外。开始把它变成成功的功能,看看会发生什么

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

记住,如果数据预计将是一个JSON,它会成为一个js对象,所以你将不能够直接使用数据

5

你的数据库查询代码不正确:使用'引用的东西在查询

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

把它们转化成字符串,而不是现场/表名。所以你的查询在语法上和逻辑上都是错误的。你的代码只是假设成功,并且从来没有捕获到mysql将要吐出的错误。

查询应该是:

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

注意使用反引号(`)场强/表名,并使用在$ PID值单引号(')的。

然后你执行查询:

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

如果失败,你会得到回报的MySQL错误消息。

而在事物的宏伟计划中,您的代码容易受到SQL injection attacks的影响。更好地阅读并学习如何在使用此代码之前进一步防止这种情况。

+2

还应该指出,在字段和表名中使用空格和括号是非常不寻常的。您应该强烈考虑更改这些以消除空格和括号。 –

相关问题