【问题标题】:Passing a javascript variable to a php switch case statement将 javascript 变量传递给 php switch case 语句
【发布时间】:2012-05-10 15:12:35
【问题描述】:

javascript 参数“Step”应该触发 php 中的 switch-case 函数。如果 Step 是 1,则在 php 中触发这段代码并通过 JSON 返回输出。

如果我看一下萤火虫,帖子字符串是:Step=one&inputFname=rick&inputLname=bovenkamp 我认为这是正确的。所以问题一定出在php文件中,我认为是在$_POST部分...

我做错了什么?任何帮助都会非常棒!

javascript代码:

$(document).ready(function() {
    $("form#userForm").submit(function() {
        var inputFname = $('#inputFname').attr('value');
        var inputLname = $('#inputLname').attr('value');
            var Step = "one";
        $.ajax({
            type: "POST",
            url: "main.php",
            data: {Step: Step,inputFname: inputFname,inputLname: inputLname},
            dataType: "json",
            contentType:"application/json; charset=utf-8",
                success: function(data) {
                $("p.succesText").html(data.jsCode);
                    $("form#userForm").hide();
                $("div.success").fadeIn();
            },
            error: function(xhr, status, error) {
                $("form#userForm").hide();
                $("p.errorHead").html("Something went wrong.");
                $("p.errorText").text("ResponseText: " + xhr.responseText
                                        + "Statuscode: " + xhr.status
                                        + "ReadyState: " + xhr.readyState);
                $("div.error").fadeIn();
            }
        });
            return false;
    });
});     

PHP 文件:

<?php header('content-type: application/json; charset=utf-8');

    $log = array();

    $varStep = htmlspecialchars(trim($_POST["Step"]));  

    switch($varStep) {

        case "one":

        $varFname = htmlspecialchars($_POST["inputFname"]);
        $varLname = htmlspecialchars($_POST["inputLname"]);

        //Make Database connection
        $db = mysql_connect("192.168.178.254","root","852456");
        if(!$db) die("Error connecting to MySQL database.");
        mysql_select_db("Ajax" ,$db);

        //Generate code and check if code already exists in the database
        do
        {
            $varCode = rand(10000, 99999);
            $dbCheckCode = "";
            $dbCheckCode = mysql_query("SELECT * FROM TableAjax WHERE code='$varCode'");
        }
        while (mysql_fetch_array($dbCheckCode) !== false);

        //Save the Form data in the database
        $sql = "INSERT INTO TableAjax (fname, lname, code) VALUES (".PrepSQL($varFname) . ", " .PrepSQL($varLname) . ", " .PrepSQL($varCode) . ")";
        mysql_query($sql);  

        //Return code to frontend
        $log['jsCode'] = $varCode;

        break;
    }

    echo json_encode($log);


    //Clean SQL statement
    function PrepSQL($value)
    {
        if(get_magic_quotes_gpc()) 
        {
            $value = stripslashes($value);
        }
        $value = "'" . mysql_real_escape_string($value) . "'";
        return($value);
    }   

?>

【问题讨论】:

  • 你检查过php接收到的值(step)吗?
  • 我建议您立即更改您的 mysql 登录数据,因为将其发布在网站上并不是一个好主意。
  • @Jeroen 别担心那是假数据。顺便谢谢 ;-)
  • 您是否在不使用 ajax 的情况下使用普通表单帖子测试了 php?您可以使用脚本顶部的ini_set('display_errors',1); error_reporting(E_ALL | E_STRICT); 启用错误显示,为所有数据库调用添加错误处理并查看它显示的内容。
  • 嗨 Jeroen,我在没有 ajax 的情况下尝试了它并直接转到 url http://192.168.178.254/test/main.php?Step=one&inputFname=Sjaakie&inputLname=Hoek 不幸的是没有成功它返回一个空[]

标签: php jquery ajax post switch-statement


【解决方案1】:

将步骤放在引号data : {"Step" : Step,...

在这种情况下,您将变量的值作为键传递,也就是说,您实际上是在传递data : {"one" : "one",...。您应该对 inputLnameinputFname 执行相同的操作。

编辑 - 说明

如果您查看 http://api.jquery.com/jQuery.ajax/ 处的 contentType 选项的作用,您会看到默认值为 application/x-www-form-urlencoded,这正是您想要的。基本上你的PHP错误表明$_POST数组是空的,因为它不知道如何读取你的数据,因为格式。您希望返回数据为jsondataType 选项就是您所需要的。

你仍然需要做我在帖子第一部分中指出的事情,但基本上你有两个错误让你绊倒。

我希望这是有道理的!

【讨论】:

  • 我的新数据字符串是:data: {"Step": Step,"inputFname": inputFname,"inputLname": inputLname},不幸的是它给了我同样的错误 Undefined index: Step in /share /MD0_DATA/Web/test/main.php 第 6 行
  • 第 6 行是顺便说一句 varStep = htmlspecialchars(trim($_POST["Step"]));但我不知道该代码有什么问题。
  • 尝试从 JS 中移除 contentType 和 dataType。如果这不起作用,如果您安装了 firebug,您可以发布标题信息吗?
  • 感谢 marteljn,删除 contentype 就成功了! :-) 你有解释吗?
  • 我发布了一个解释作为编辑。我希望这是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 2013-09-24
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多