【问题标题】:PHP - script not being executedPHP - 脚本未执行
【发布时间】:2012-01-26 17:10:16
【问题描述】:

我有一个用户输入值/选择选项的 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>

【问题讨论】:

  • 什么是xmlhttp?您的&lt;script&gt; 标签中是否缺少某些内容?
  • 你试过&lt;form action="" method="post"&gt;吗?
  • 挑出来的代码迷糊了,能不能重构分享一下。
  • xmlhttp 是我使用 ajax 得到的一个例子。我已删除顶部的代码,因为它们与问题无关。

标签: php mysql html ajax


【解决方案1】:

你应该使用mysql_real_escape_string 之后 mysql_connect

换句话说:当您调用mysql_real_escape_string 时,您应该已经与mysql 服务器建立了连接,否则它将返回false + 警告并且false 被评估为空字符串,这就是您没有得到的原因代码中后端的任何实际值。

更新:在mysql_real_escape_stringphp.net 的文档中注意到函数的第二个参数(即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

【讨论】:

  • 同意,mysql_real_escape_string 是一个与 SQL 相关的函数,只有在您连接到数据库时才会起作用。
  • 嗨,我已经改变了它的位置。但收不到任何回应。删除 mysql_real_escape_string 也无济于事。有什么办法可以打印出我的变量来检查它们的内容?
  • 当然!您可以将它们记录到文件中,在浏览器中打开调试视图(任何现代浏览器通常附带某种开发工具栏,我个人喜欢 chrome)查看后端返回的内容,您可以console.log 您的结果ajax 查询... 警告:console 通常由浏览器的开发者工具栏的开发者添加,因此它不是“本机”js 对象(这不在 ECMAScript 中)。
  • 哦!我明白了...您使用 GET 方法发送数据并尝试使用 POST 接收;)在 php 文件中将 $_POST 更改为 $_GET 或在 js 中将 GET 更改为 POST。所以,你实际上犯了两个错误:D
【解决方案2】:

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

【讨论】:

  • +1 用于指出可能存在的问题。但是仍然不起作用。还是谢谢。
【解决方案3】:

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

【讨论】:

  • 哦,是的。这是正确的。已经添加了这个,至少现在它被称为 php 脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多