【问题标题】:PHP Ajax not workingPHP Ajax 不工作
【发布时间】:2013-11-17 22:56:57
【问题描述】:

我的页面上有 3 个按钮,根据用户单击的按钮,我想通过 ajax 运行我的数据库中的删除查询。当用户单击按钮时,javascript 函数似乎可以工作,但它不会在 php 脚本中运行查询。

html页面:

<?php session_start(); ?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-7"> 
<script>
    function myFunction(name)
    {
        var r=confirm("Are you sure? This action cannot be undone!");
        if (r==true)
        {
            alert(name); // check if is getting in if statement and confirm the parameter's value
            var xmlhttp;
            if (str.length==0)
            { 
                document.getElementById("clearMessage").innerHTML="";
                return;
            }
            if (window.XMLHttpRequest)
            {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else
            {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function()
            {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    document.getElementById("clearMessage").innerHTML= responseText;
                }
            }
            xmlhttp.open("GET","clearDatabase.php?q="+name,true);
            xmlhttp.send();
        }
        else
            alert('pff');
    }
</script>
</head>
<body>
<div id="wrapper">
<div id="header"></div>
<div id="main">
    <?php if (session_is_registered("username")){ ?>
    <!--<a href="#">Εκκαθάριση παλαιών μηνυμάτων</a><br />
    <a href="#">Εκκαθάριση παλαιών συνεδρίων</a><br />
    <a href="#">Εκκαθάριση push notifications</a><br />-->
    <input type="button" value="Εκκαθάριση παλαιών μηνυμάτων" onclick="myFunction('messages')" />
    <input type="button" value="Εκκαθάριση παλαιών συνεδρίων" onclick="myFunction('conferences')" />
    <input type="button" value="Εκκαθάριση push notifications" onclick="myFunction('notifications')" />
    <div id="clearMessage"></div>
    <?php } else echo "Login first."; ?>
</div>
<div id="footer"></div>
</div>
</body>
</html>

和 php 脚本:

<?php
if (isset($_GET["q"]))
    $q=$_GET["q"];

$host = "localhost";
$database = "dbname";
$user = "dbuser";
$pass = "dbpass";

$con = mysql_connect($host,$user,$pass) or die(mysql_error()); 
mysql_select_db($database,$con) or die(mysql_error()); 

if ($q=="messages")
    $query = "DELETE FROM push_message WHERE time_sent IS NOT NULL";
else if ($q=="conferences")
    $query = "DELETE FROM push_message WHERE time_sent IS NOT NULL";
else if ($q=="notifications") {
    $query = "DELETE FROM push_friend WHERE time_sent IS NOT NULL";
}

$res = mysql_query($query,$con) or die(mysql_error());

if ($res)
    echo "success";
else
    echo "failed";

mysql_close($con);
?>

【问题讨论】:

  • 警告 自 PHP 5.3.0 起,该函数已被弃用,自 PHP 5.4.0 起已移除 - session_is_registered()
  • @gloomy.penguin 是的,它在 clearDatabase.php 上。它自己运行良好。
  • 所以任何运行http://yoururl.com/clearDatabase.php?q=messages 的人都可以清除数据库.....哇。
  • @Kostis:这至少不会提高安全性。
  • 我强烈建议你 read thisthis also @Kostis

标签: javascript php html mysql ajax


【解决方案1】:

你有一些问题....这是来自clearDatabase.php的文本...我只是让它输出一些通用文本

<?php session_start(); ?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-7"> 
<script>
    function myFunction(name)
    {
        var r=confirm("Are you sure? This action cannot be undone!");
        if (r==true)
        {
            // Issue #1: str is not defined anywhere 
            var str = "sfs"; 

            alert("name " + name); // check if is getting in if statement and confirm the parameter's value
            var xmlhttp;
            if (str.length==0)
            { 
                document.getElementById("clearMessage").innerHTML="";
                return;
            }
            if (window.XMLHttpRequest)
            {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else
            {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            } 
            xmlhttp.onreadystatechange=function()
            {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    // Issue #2: responseText was not defined... it needs to belong to something
                    document.getElementById("clearMessage").innerHTML= xmlhttp.responseText;
                }
            } 
            xmlhttp.open("GET","clearDatabase.php?q="+name,true);
            xmlhttp.send();
        }
        else
            alert('pff');
    }
</script>

注意:运行"clearDatabase.php?q="+name 的任何人都可以从您的数据库中删除任何内容。此外,进行这些更改,但如果 "clearDatabase.php?q="+name 上的代码不起作用,它仍然可能不起作用。

另外:如果您提供了控制台错误,我们会更容易为您解决此问题。

我是如何解决这个问题的:我只是自己复制并粘贴到一个文档中,然后打开 Chrome 版本的 Firebug (control+shift+j),有红色文字告诉我 str 是'没有定义。所以我把它定义为var str=""。然后我意识到它击中了if (str.length==0),所以我给它一个值。然后,我得到一个新的错误,responseText 没有定义。我用谷歌搜索了如何使用 javascript ajax 调用的响应形式(我只知道 jquery)并查看了示例。我看到它需要来自请求并添加了xmlhttp.responseText;。然后它起作用了。

【讨论】:

  • 是的...responseText 是一个错误输入错误。感谢您提供所有有用的建议(安全性、调试)。我是新手,看来我还有很多东西要学!
  • 调试本身就是一种通用技能......无论是什么语言、环境、平台、客户端、服务器端或数据库,它都会帮助您。
  • 要解决安全问题,请查看会话变量。它们并不完全安全,但至少您可以检查该代码两端的会话。或散列它或使用令牌做某事。我真的不知道。
  • 我在其他页面上使用会话变量,但我不确定它是否适用于 ajax 调用(现在我想到它我找不到不工作的理由)而且我没有试过了。无论如何,我的主要任务是开发一个 iphone 应用程序,现在我必须创建一个管理网站来提供一些额外的支持。
【解决方案2】:

试试;

xmlhttp.open("POST","clearDatabase.php?q="+name,true);

代替;

xmlhttp.open("GET","clearDatabase.php?q="+name,true);

【讨论】:

  • 这与请求的类型无关,在 php 中它也在 GET 中接收请求
  • @SamuelPedrosa It should be about it now 和 Orbay 现在应该获得支持,以获得间接建议。
  • 是的,我知道。但我“只是”说“TRY”所以;你能告诉我什么是 diffrenet POST 和 GET 吗?其中一个变得多余了!
  • @Orbay Yeşil 如果您了解 PHP,那么您就会知道您的解决方案会给出相同的结果,因为很明显问题不在于发出的请求类型。你只是想获得积分。
  • @SamuelPedrosa 我正在用“答案”写它们。因为我不能在“问题”下写“评论”。好的? ...我想帮忙。如果我只是想获得积分,我不会冒险。
【解决方案3】:

首先打开xmlhttp请求。

试试这个:

xmlhttp.open("GET","clearDatabase.php?q="+name,true);
xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("clearMessage").innerHTML= responseText;
    }
}
xmlhttp.send(null);

【讨论】:

    【解决方案4】:

    你为什么不使用jquery -> ajax()

    您的代码将如下所示:

    function myFunction(name)
        {
            var r=confirm("Are you sure? This action cannot be undone!");
            if (r==true)
            {
                alert(name); // check if is getting in if statement and confirm the parameter's value
    
                 $.ajax({
                   type: "GET",
                   url: "clearDatabase.php?q="+name,true,
                   success: function (res){
                        $("#clearMessage").html(res );
                  }
                 });
    
            }
            else{
                alert('pff');
               }
        }
    

    【讨论】:

    • 可以在没有 jquery 的情况下完成,而且他们还没有使用它......我不确定他们是否只想为此添加它。
    • @gloomy.penguin 正确...我没有使用它...至少到现在为止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2017-09-20
    • 2015-10-31
    相关资源
    最近更新 更多