5

好的,所以我在网上找到了许多教程,并一步一步地遵循了它们。我的问题是我对 javascript/jQuery 的了解比我对 PHP 的了解要好得多,而且我什至无法弄清楚如何调试该部分中出了什么问题。基本上我有一堆按钮和一个按钮,当按下按钮时,它决定了表单中的默认值。

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 文件(我的一个团队成员拥有它),但是一旦我得到它,我会将所有标题变成一个单词标题。这是我们在网络编程/数据库管理方面的第一份工作,所以我们一直在学习。

4

3 回答 3

4

您的数据库查询代码不正确:

    $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 注入攻击。在进一步使用此代码之前,最好阅读并了解如何防止这种情况发生。

于 2013-04-18T16:16:59.260 回答
4

$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');

这将输出任何错误,并且应该可以帮助您找出问题所在。

于 2013-04-18T16:10:46.753 回答
2

sr 它在成功回调函数之外。开始将其放入成功函数中,看看会发生什么

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

请记住,如果 data 预期为 json,它将成为 js 对象,因此您将无法直接使用 data

于 2013-04-18T16:13:36.263 回答