2012-01-25 11 views
1

誰かが私を喜ばせることができるかどうか疑問に思う。mysql_insert_id()

PHPでmysql_insert_id()コマンドを実装しようとしていますが、これを動作させることができないようです。

私は本当に簡単なスクリプト(下記)を使ってテストしていますが、 'testimages'テーブルではなく 'testfinds'テーブルに作成するレコードしか取得できません。私は私が発見し、自分のコードに対してこれをチェックし、そこにどんな違いがあるようには思えないし、私は二重の私がしたい場合は、単に確認するために、テーブルとフィールド名をチェックした例を進めてきた

<?php 
    $conn = mysql_connect("hostname","username","password"); 
    if (!$conn) { 
    die('PHP Mysql database connection could not connect : ' . mysql_error()); 
    } 
    $findname=$_POST[findname]; 
    $phototitle=$_POST[phototitle]; 

    $db_selected = mysql_select_db("database", $conn); 
    $sql = "INSERT INTO testfinds (findname)VALUES ('$findname')"; 
    $result = mysql_query($sql, $conn); 

    $findid = mysql_insert_id($conn); 

    $sql = "INSERT INTO testimages (phototitle) VALUES ('$phototitle','$findid')"; 
    $result = mysql_query($sql, $conn); 

    //echo "Inserted record id is : " . mysql_insert_id(); 
    mysql_close($conn); 
    ?> 

そこには誤りがありましたが、何も見つかりませんでした。

これは私が使用しているフォームで、やはり機能をテストするのに本当に簡単なものです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>Map</title>   
     <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=en"></script>  

<form enctype="multipart/form-data" action="savephp.php" name="save" id="savefindsandimages" method="post"> 
<label>Find Name:<input type="text" name="findname" id="findname" /> 
    <br /> 
    <br /> 
    Photo Title: 
    <input type="text" name="phototitle" id="phototitle" /> 
<br /> 
    <br /> 
</label> 
<p> 
    <input type="submit" value="Add"> 

誰かがこれを見て、私が間違っている場所を教えてもらえたかどうかは疑問でしたか?

感謝

+2

** WARNING **あなたのコードは、SQLインジェクション攻撃に対して非常に敏感です! –

+0

こんにちは、私の記事を読んで返信する時間を取ってくれた多くのスナックス。私はあなたのSQL警告について非常に心配していることを認めなければなりません。私はこれにかなり新しいことを認めなければならないかもしれませんが、なぜ私のコードがこれらの攻撃の1つに公開されているのかを簡単に説明できますか?種類に関しては – IRHM

+0

が対象です。おそらく準備された声明を調べることが役立つでしょう –

答えて

4

あなたの2番目のINSERTクエリが少し間違っています表示されます。

INSERT INTO testimages (phototitle) VALUES ('$phototitle','$findid') 

あなたが設定している他のフィールド名前を付ける必要がある - (phototitle)(phototitle,otherfieldname)でなければなりませんが。それを修正し、あなたのスクリプトが期待どおりに機能するかどうかを確認してください。

また、それはタイプミスだ場合、私は知りませんが、あなたは持っている:

$findname=$_POST[findname]; 
$phototitle=$_POST[phototitle]; 

$_POST変数は、おそらく$_POST["findname"]$_POST["phototitle"]をお読みください。最後に、コメントに記載されているように、あなたのスクリプトはSQLインジェクション攻撃に対して脆弱です。詳細はBobby Tablesを参照してください。

3

あなたはSQLの列名が欠落しています

$sql = "INSERT INTO testimages (phototitle, COLUMN_NAME_HERE) VALUES ('$phototitle','$findid')"; 
+0

皆さん、ご協力いただきありがとうございます。本当に感謝しています。これで治療が可能になりました。 – IRHM

関連する問題