我有一个表单,用户输入他们想要的网址并继续下一步。这一切都是在没有页面刷新的情况下完成的,所以我依靠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 =“”的操作。我不确定是不是这样。没有异常错误或任何致命错误。
答案 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>
中的数据。最后,所有都正确提交并添加到数据库中。