根据以前的值

时间:2016-07-30 23:40:17

标签: php ajax

我有一个表单,用户输入他们想要的网址并继续下一步。这一切都是在没有页面刷新的情况下完成的,所以我依靠Ajax来发送信息。当用户提交他们想要的网址时,他们可以进入下一部分。用户还可以选择返回URL页面并更改其URL。我知道如何成功插入网址,但我不知道如何使用新网址更新条目。我尝试了这个,但它不起作用:

$prevUrl;
$newUrl;

if ((isset($_POST["url"]))
{
    $newUrl = $_POST["url"];

if ($prevUrl == "")
{
   $db->query("INSERT INTO Articles (`url`) VALUES ('$newUrl')");
   $prevUrl = $newUrl;
}

else
{
   $db->query("UPDATE Articles SET url = '$newUrl' WHERE url = '$prevUrl'");
   $prevUrl = $newUrl;
}
}

如何更新条目,以便根据之前的网址进行更新?

出了什么问题:当我回去更新网址时,网址不会更新新网址。我的WHERE子句未成功执行。好像$ prevUrl变量是空的。我认为,由于PHP是服务器端,无论页面刷新时显示什么变量,这些都是变量,它们无法更改。由于$ prevUrl最初是空的,因此WHERE语句可能正在执行类似WHERE url =“”的操作。我不确定是不是这样。没有异常错误或任何致命错误。

1 个答案:

答案 0 :(得分:0)

我不知道,如果我让你完成正确,但我认为你想做的事情是不可能的。 Ajax请求只不过是在服务器上执行某些代码并将结果发回,而无需重新加载。发送结果后,服务器上没有任何可用的变量,只需要$ _SESSION。

你的变量$ prevurl不能是其他任何东西,而是' null',因为在代码的开头你就是这样声明的。

在你的情况下,有两种可能性来解决这个问题。您可以在中写入URL $ _SESSION变量:

session_start();
$_SESSION['url']= $newurl;

再次接受它。

或者您修改了表格'文章'这样你就可以更好地检查是否已经有了一个' -entry,因此你必须更新而不是INSERT。

修改

指定我的第一个建议:

$ _SESSION变量可以通过ajax进行大量更改。如果您只想使用ajax来实时提交用户提供的数据,那么这是可能的,但您无法使用<form> - 元素。你必须使用javascript:

<!-- HTML -->
<input id='newurl' />
<input type='button' value='next' onclick='submitURL(document.getElementById("newurl").value)' />
// JAVASCRPT
function submitURL(newurl){
    var xhttp;
    if (window.XMLHttpRequest) {
        xhttp = new XMLHttpRequest();
        } else {
        // code for IE6, IE5
        xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xhttp.open("GET", /*include url_submit.php?data=newurl*/, true );
    xhttp.send();

    xhttp.onreadystatechange = function(){
        if(xhttp.readyState==4&&xhttp.status == 200){
            //change Pagecontent to next page
        }
    };
}
# PHP (url_sumbit.php)
<?php
if(!isset($_SESSION['url']){
    session_start();
}
$_SESSION['url']=$_GET['data'];
?>

提交所有用户数据时,会包含一个.php文件,用于创建数据库条目。

指定第二个建议:

在.php文件中,不是将用户数据保存在$ _SESSION中,而是立即将其写入数据表中。 Promlem是,你不知道你是否需要更新或插入(如果之前已经提交了网址)。所以你必须手动检查,如果有条目,如果是,则更新它,如果没有插入新条目。

我不得不说两种方式都非常难看。一旦结束提交所有数据,这将会容易得多。例如,如果你坚持不重新加载,请写一些javascript,点击“下一步”后不提交。按钮,但替换旧页面内容并存储提交的&#39;隐藏<input>中的数据。最后,所有都正确提交并添加到数据库中。