PHP - 脚本未被执行

时间:2012-01-26 07:50:32

标签: php mysql html ajax

我有一个html表单,用户输入值/选择选项。选择后,这些值将被发送到服务器中的php脚本。该脚本将根据用户选择的值从mysql中检索一些数据。然后将来自mysql的这些值和数据整理在一起并用于POST请求,该请求将被发送到移动设备。我会用curl来做请求。

但是,我无法执行任何POST请求。我没有看到任何结果或变化。我尝试在我的php脚本中执行echo,但即使我使用GET

,它也不会在html表单上打印出来

我的代码在哪里出错了?

html的

<script type="text/javascript">

    function doSubmit() {

        var env = document.frm.Env.value;
        var appname = document.frm.appname.value;
        var target = document.frm.target.value;
        var messages = document.frm.messages.value;

        var strURL = "sendMessage.php?Env=" +env+ "&appname=" +appname+ "&target=" +target+ "&Message=" +messages;

        xmlhttp.open("GET",strURL,true);
        xmlhttp.send(null);

    }
</script>

</head>

<body>

    <form action="">
        Environment: <div id="Env">
            <select name="customers" onchange="showApplications(this.value)">
                <option value="Environment">Select an environment</option>
                <option value="S">Sandbox</option>
                <option value="P">Production</option>
            </select>
        </div>

        </br>

        Application Name: <div id="appname">
            <select name="appname" onchange="showTargets(this.value)">
                <option value="">Select application</option>
            </select>
        </div>

        </br>

        Target Device : <div id="target">
            <select name="target">
                <option>Select Device OS</option>
            </select>
        </div>
        </br>
        Message: <div id="messages"><input type="text" name="Message" maxlength="200" size="50"></input></div>

        </br>

        <input type = "button" value="Send" onclick="doSubmit();">
    </form>

    </br>

</body>
</html>

.PHP

<?php
$env      = mysql_real_escape_string($_POST["env"]);
$appname  = mysql_real_escape_string($_POST["appname"]);
$target   = mysql_real_escape_string($_POST["target"]);
$messages = mysql_real_escape_string($_POST["messages"]);


$conn = mysql_connect("127.0.0.1:3306", "root", "");
mysql_select_db("PushApplication", $conn);

if ($target == "All") {
    echo "Hi";
} elseif ($target == "Apple") {
    echo "Apple";
    $query  = "select deviceID from Device where DeviceType='$target'";
    $result = mysql_query($query);

    $num = mysql_numrows($result);

    $i = 0;
    while ($i < $num) {
        $myResult = mysql_result($result, $i);
        $url      = "http://10.28.68.28:8899/?Env='$env'&AppName='$target'&Token='$myResult'&Message=%7B%22aps%22%3A%7B%22alert%22%3A%22'$messages'%22%7D";
        echo $url;
        curl $url
        ++$i;
    }
}

else
    echo "Hi!";
?>

</select>

3 个答案:

答案 0 :(得分:4)

您应该使用mysql_real_escape_string AFTER mysql_connect

换句话说:你应该在调用mysql_real_escape_string时已经连接到mysql服务器,否则它将返回false +警告并且false被评估为空字符串,这是为什么你的代码后端没有任何实际值。

UPDATE :在php.net的{​​{3}}文档中注意到该函数的第二个参数(即link_identifier(mysql连接资源)):

  

MySQL连接。如果未指定链接标识符,则   假设mysql_connect()打开的最后一个链接。如果没有这样的链接   发现,它会尝试创建一个,就像调用mysql_connect()一样   没有争论。 如果未找到或建立连接,则为E_WARNING   生成级别错误

好的,这里有一些代码问题,要解决这个问题,请执行以下操作:

<强> HTML

    <form name='frm'...

<强> JS

    var env = document.frm.customers.value;
    ...
    var messages = document.frm.Message.value;

<强> PHP

将所有$_POST替换为$_GET

答案 1 :(得分:2)

Javascript访问document.frm,但表单未定义为名称“frm”。我想这是javascript停止的地方,并没有触发xhr的事情。

答案 2 :(得分:1)

您没有从AJAX请求中输出任何内容。如果您使用XMLHttpRequest,则需要定义onreadystatechange()方法,并在某些条件下输出结果。但是,相反,我建议您使用类似jQuery Ajax的内容,它更容易并且支持各种各样的浏览器。