-1

私は次のコードを持っています。$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);
}

?>

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 に答える