-1

我有以下代码。$last_id 始终显示为零。我在“源”表中有一个具有自动增量 ID 的列。这段代码有什么问题?

索引.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>

连接数据库:

<?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 ());
?>

提交.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);
}

?>

4

3 回答 3

3

试试这个作为 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>
于 2013-03-10T05:29:28.680 回答
2

此行是在原始页面加载时计算的:

             alert("Your ID: <?php echo $last_id;?>");

所以它是有效的:

             alert("Your ID: 0");

由于此时您所做的只是连接,因此没有插入 ID。我不熟悉 jquery,但大概回调的数据参数应该包含有关来自 submit.php 的响应的数据。您需要让 submit.php 返回 ID,然后通过 jquery 中的任何方式获取该数据,并显示它。

编辑:实际上,无论如何,看起来你正在做的事情并不能真正做到我所说的。

http://api.jquery.com/submit/

您正在设置一个处理程序,该处理程序在提交表单时运行 - 但是,这是在提交实际发生之前,因此您实际上无法在那里获得 ID。您的选择是使用 XmlHttpRequest 之类的东西来进行异步调用,或者在 submit.php 页面上显示此弹出窗口。

于 2013-03-10T05:25:17.260 回答
2

首先不要使用mysql,使用mysqli或者pdo,mysql是一个弃用的系统,不应该使用。它不安全,很容易被黑客入侵。

其次,mysql_insert_id 只有在插入之后直接调用它才有效...

又名

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 在您设置的任何回调变量(数据)中检索它,然后您可以使用它。

于 2013-03-10T05:29:33.777 回答