2011-08-16 2 views
1

を動作していません機関はフォーム構造(htmlページ)に入力され、送信ボタンをクリックするとDB(mysql)に格納されますMySQLの更新クエリは、私は、次のフィールドを使用してMySQLのテーブルに</p> <p>ID(自動インクリメント)</p> <p>タイトル、氏名、年齢、機関、IOD</p> <p>タイトル、名前、年齢などの分野を持っている

このフィールドは123/idと同じです(idフィールドは同じですが、 '123/'前に接頭辞)

id、iodを含むDBに格納する必要があるタイトル、名前、年齢、施設をユーザーが入力すると、

上記を実行すると、タイトル、名前、年齢、機関名、IDは正常に保存されますが、iodは保存されません。

私がここで行ったエラーを教えてもらえますか?

私は、問題はあなたのクエリを実行していないということです、あなたは単なる文字列でクエリを置くが、その後、あなたがdon'(同じコードの一部)

if ($_POST['title'] != '') 
{ 
$value = $_POST['title']; 
$value1 = $_POST['name']; 
$value2 = $_POST['age']; 
$value5 = $_POST['institution']; 

$sql = "INSERT INTO parentid(title,name,age,institution) VALUES('$value','$value1','$value2','$value5')" ; 

} 
$sql1="SELECT * FROM parentid ORDER BY id DESC LIMIT 1"; 
$value6=$row['id']; 
$value4= '123/' . $row['id'] ; 
$sql2="UPDATE parentid SET iod='$value4' WHERE id = '$value6' "; 
+0

あなたの文は意味をなさない場合。 '$ _POST'要素は決して' true'または 'false'にはなりません。したがって、if文に' $ _POST ['title'] 'を持つのは意味がありません。 –

+0

実際にクエリを実行する場所はどこですか? –

+0

@james:PHP mysql –

答えて

3

のコードには、次の構文を書きましたそれと何かをする。

2番目のクエリ(簡単なサンプルコード)の場合:

$sql1="SELECT * FROM parentid ORDER BY id DESC LIMIT 1"; 
$result = mysql_query($sql1); 
if ($row = mysql_fetch_assoc($result)) 
{ 
    $value6=$row['id']; 
    // etc., error handling not added 
} 
0

私の推測では、あなたがエスケープする必要は特殊文字を持っているということです。 私はすでにを知っていると仮定しています。は、これらの文字列をエスケープしてからDBに挿入してください。

PHPでは、それぞれの値をエスケープするために使用するmysql_real_escape_string関数があります。

1

クエリを実行しませんでしたか?また、あなたは

if (!empty($_POST['title']) || !empty($_POST['calc_url'])) { 

    $value = mysql_real_escape_string($_POST['title']); 
    $value1 = mysql_real_escape_string($_POST['name']); 
    $value2 = mysql_real_escape_string($_POST['age']); 
    $value5 = mysql_real_escape_string($_POST['institution']); 

    $sql = "INSERT INTO parentid 
      (title,name,age,institution) 
     VALUES ('$value','$value1','$value2','$value5')" ; 

    mysql_query($sql) or die(mysql_error()); 
} 

はまた、あなたが mysql_insert_id関数を使用してIDを取得...第2の選択を必要としない...パラメータをエスケープする必要があります。

$value6 = mysql_insert_id(); 
$value4= '123/' . $value6 ; 

[更新:

$sql2="UPDATE parentid SET iod='$value4' WHERE id = '$value6' "; 
mysql_query($sql2); 

私は疑問に/貼り付けをコピーするときに、コードの塊を逃してきた場合を除き、あなたが...しかし

1

PDOmysqliを使用するencorage 、いくつかの問題があります。

まず、実際にはクエリを実行していません(私はあなたが実際にどこかのデータベースに接続していると仮定しています)。

$row = mysql_fetch_assoc($result);:あなたは、クエリによって返されたデータセットからデータを取得しない限り、

$result = mysql_query($sql);

第二に、$rowは何も含まれません:あなたは$sqlに文字列を代入したら、クエリを実行することができます

第3に、if文にはUPDATEというクエリが含まれていないため、$_POST['title']が空であるかどうかにかかわらず実行されます。

他にも言及したように、クエリはSQLインジェクション攻撃に対して広く開いています。最低でも入力の周りにmysql_real_escape_stringを使用する必要があります。

最後に、別の読み取りを行う代わりに、mysql_insert_idを使用して最新の挿入物のIDを取得することができます。

がここにあなたのコードを手直しするためにいくつかの試みだ(これはテストされていないとはるかに良いことができることに注意してください):

if($_POST['title'] != '') { 
    //Connect to database here (or somewhere else if you already are) 

    $value = mysql_real_escape_string($_POST['title']); 
    $value1 = mysql_real_escape_string($_POST['name']); 
    $value2 = mysql_real_escape_string($_POST['age']); 
    $value5 = mysql_real_escape_string($_POST['institution']); 

    $sql = "INSERT INTO parentid(title,name,age,institution) VALUES('$value','$value1','$value2','$value5')"; 
    $result = mysql_query($sql); 

    if($result) { 
     $value6 = mysql_insert_id($result); 
     $value4 = '123/' . $value6; 
     $sql2 = "UPDATE parentid SET iod='$value4' WHERE id = '$value6'"; 
     mysql_query($sql2); 
    } 
} 
関連する問題

 関連する問題