我有以下代码。 $ last_id始终显示为零。我在“源”表中有一个具有自动增量ID的列。这段代码有什么问题?
的index.php:
<?php
// connect to the database
include('connect-db.php');
$last_id = mysql_insert_id($connection);
$content = "Please type your content here!";
?>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#myform").submit( function () {
$.post(
'submit.php',
$(this).serialize(),
function(data){
alert("Your ID: <?php echo $last_id;?>");
}
);
return false;
});
});
</script>
</head>
<body>
<div id="header" >
<form action="submit.php" method="post" id="myform">
<textarea id="editor" name="editor" id="editor"><?php echo $content; ?></textarea>
<br/>
<input type="submit" name="submit" value="Submit" id="submit"/>
</form>
</div>
</body>
</html>
connect-db:
<?php
$server = 'localhost';
$user = 'mumbo';
$pass = 'mumbo123';
$db = 'jumbo';
$connection = mysql_connect($server, $user, $pass)
or die ("Could not connect to server ... \n" . mysql_error ());
mysql_select_db($db)
or die ("Could not connect to database ... \n" . mysql_error ());
?>
submit.php:
<?php
include('connect-db.php');
$submit_date = date("Ymd");
$content = mysql_real_escape_string(htmlspecialchars($_POST['editor']));
$ip_address = $_SERVER['REMOTE_ADDR'];
if ($content != '') {
mysql_query("INSERT INTO source (submit_date, ip, content) values('$submit_date','$ip_address','$content')") or die(mysql_error());
mysql_close($connection);
}
&GT;
答案 0 :(得分:2)
此行在原始页面加载时计算:
alert("Your ID: <?php echo $last_id;?>");
所以它有效:
alert("Your ID: 0");
由于您在此时所做的一切都是连接,因此没有插入ID。我不熟悉jquery,但可能你的回调的数据参数应该包含有关来自submit.php的响应的数据。你需要让submit.php返回ID,然后通过jquery中的任何方式获取数据,并显示它。
编辑:实际上,无论如何,看起来你正在做的事情并不能真正做到我所说的。
您正在设置一个在提交表单时运行的处理程序 - 但是,这是在提交实际发生之前,因此您无法在那里实际获取ID。您可以选择使用类似XmlHttpRequest的方式进行异步调用,或者在submit.php页面上显示此弹出窗口。
答案 1 :(得分:2)
试试这个为submit.php:
<?php
include('connect-db.php');
$submit_date = date("Ymd");
$content = mysql_real_escape_string(htmlspecialchars($_POST['editor']));
$ip_address = $_SERVER['REMOTE_ADDR'];
if ($content != '') {
mysql_query("INSERT INTO source (submit_date, ip, content) values('$submit_date','$ip_address','$content')") or die(mysql_error());
echo mysql_insert_id();
}
?>
并在javascript中:
<script type="text/javascript">
$(document).ready(function(){
$("#myform").submit( function () {
$.post(
'submit.php',
$(this).serialize(),
function(data){
alert("Your ID: " + data);
}
);
return false;
});
});
</script>
答案 2 :(得分:1)
首先不要使用mysql,使用mysqli或pdo,mysql是不推荐使用的系统,不应该使用。它不安全,可以轻松入侵。
其次,mysql_insert_id只有在插入后直接调用它才有效...
AKA
if ($content != '') {
mysql_query("INSERT INTO source (submit_date, ip, content) values('$submit_date','$ip_address','$content')") or die(mysql_error());
$last_id = mysql_insert_id();
echo $last_id
mysql_close($connection);
然后你的jquery必须说
alert("Your ID: "+data);
返回的函数数据是您从脚本回显的任何内容。 Jquery在您设置的任何回调变量(数据)中检索它,然后您可以使用它。