2013-03-10 72 views
-1

我有下面的代碼。 $ last_id始終顯示爲零。我在「源」表中有一列自動遞增ID。這段代碼有什麼問題?爲什麼PHP mysql_insert_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> 

連接-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); 
} 

>

回答

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> 
+0

它的工作原理!謝謝! – 2013-03-10 05:34:33

+0

@Mumbo珍寶:歡迎您 – 2013-03-10 05:52:44

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頁面上使用此彈出窗口。

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在你設置的任何回調變量(數據)中檢索它,然後你可以使用它。

+0

作品!謝謝! – 2013-03-10 05:36:00

+0

沒問題。如果可以,請考慮使用pdo。使用準備好的語句從sql注入完全保證你。 – 2013-03-10 05:53:14