2012-02-07 17 views
0

私はPHPでの経験はほとんどありません。そして今、私は本当にイライラしています。私にはコードがあり、これはうまくいくようです。私のアプリからは、値を入力してPHPデータベースに入れることができます。私のPHPコードから最後の値しか入力しないということです。だからアプリケーションは別として:私は私のデータベースで何かを入力するためにPHPコードを使用する場合、彼は常に最後の値を取るだけです。私のコードは次のとおりです。PHPデータベースは最後の値しか入力しません

<?php 
$DB_HostName = "localhost"; 
$DB_Name = "xxx"; 
$DB_User = "xxx"; 
$DB_Pass = "xxx"; 
$DB_Table = "contacts"; 

if (isset ($_GET["name"])) 
    $name = $_GET["name"]; 
else 
    $name = "Blade"; 

if (isset ($_GET["lastname"])) 
    $lastname = $_GET["lastname"]; 
else 
    $lastname = "Xcoder"; 

if (isset ($_GET["number"])) 
    $number = $_GET["number"]; 
else 
    $number = "111"; 

$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error()); 
mysql_select_db($DB_Name,$con) or die(mysql_error()); 

$sql = "insert into $DB_Table (Firtname) values('$name');"; 
$sql = "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql = "insert into $DB_Table (Number) values('$number');"; 

$res = mysql_query($sql,$con) or die(mysql_error()); 

mysql_close($con); 
if ($res) { 
    echo "success"; 
}else{ 
    echo "faild"; 
}// end else 
?> 

明確にするには:私はfirstname値しか持っていない場合、正しい場所(firstname)に入力します。ファーストネームとラストネームの値がある場合、ファーストネームの値ではなく、ファーストネームの値のみを入力します。そして数字の場合も同じです。私はファーストネーム、ラストネーム、ナンバーを持っていれば、数字だけを正しい場所に置きますが、他の値は入れません。さらに私は一度だけそれを行うことができます。私は別の連絡先を入力したい場合は、彼はいつも言っている(キー 'PRIMARY'の重複エントリ 'myentry')。

+3

:私は2番目のオプション

$sql = "insert into $DB_Table (Firtname) values('$name');"; $sql .= "insert into $DB_Table (Lastname) values('$lastname');"; $sql .= "insert into $DB_Table (Number) values('$number');"; $res = mysql_query($sql,$con) or die(mysql_error()); 

それともそれはとにかく同じテーブルであるとして、それは、テーブル内の1行できるかどうかを好むだろう。 – PeeHaa

答えて

2

解決方法は2つあります。 3つの異なる変数、または3つのクエリを含む1つの変数。あなたはSQLIの脆弱性を持っている

$sql = "insert into $DB_Table (Firtname,Lastname,Number) values('$name','$lastname','$number');"; 
$res = mysql_query($sql,$con) or die(mysql_error()); 
0

これは、すべての3つのクエリで同じ変数名($sql)を使用しているためです。代わりに$sql1,$sql2および$sql3を使用してください。また、それぞれについてmysql_queryを呼び出します(ただし、設定した場合のみ)。

このよう

$sql1 = "insert into $DB_Table (Firtname) values('$name');"; 
$sql2 = "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql3 = "insert into $DB_Table (Number) values('$number');"; 

if (isset ($sql1)) 
{ 
    $res1 = mysql_query($sql1,$con) or die(mysql_error()); 
} 

if (isset ($sql2)) 
{ 
    $res2 = mysql_query($sql2,$con) or die(mysql_error()); 
} 

if (isset ($sql3)) 
{ 
    $res3 = mysql_query($sql3,$con) or die(mysql_error()); 
} 
+0

テーブルがすべて同じであるので、悪いアドバイス、彼のSQLはすべて一緒に悪いです。 – thenetimp

+0

さて、すべてのことを1回のクエリで行うことができます。しかし、少なくともそれは彼の問題を解決する... –

2

あなたは次の2本のライン上の$ SQLを上書きしているため、最終的なSQL行が挿入されているものです。

あなたがそれらをすべて同じ行に入れたい場合、あなたのSQLは間違っています。

$sql = "insert into $DB_Table (Firtname,lastname,number) values('$name','$lastname','$number');"; 
2

毎回$sql文字列を上書きしています。

おそらく、.=を使用して3つのクエリを一緒に追加することを意図していました。データベーステーブルの構造は何ですか?

$sql = "insert into $DB_Table (Firtname) values('$name');"; 
$sql .= "insert into $DB_Table (Lastname) values('$lastname');"; 
$sql .= "insert into $DB_Table (Number) values('$number');"; 
2

$sqlステートメントを上書きしています。あなたはそれらを実行する必要があります。行うことによって:

$sql = "Insert INTO..." 

変数を設定するだけです。 mysql_query()を使用して各クエリを実行する必要があります。あなたがSQLを避けるこれに

$name = mysql_real_escape_string($_GET["name"]); 

ありがとう:

$sql = "INSERT INTO $DB_TABLE (Firstname, Lastname, Number) VALUES ('$name', '$lastname', '$number') 

最後に、それはあなたがあなたの入力をサニタイズ重要なです:

私はまた、あなたがこれをしたい推測しています注射攻撃。