2012-03-09 7 views
1

紛失_は、タイプオーバーでスタックオーバーフローが発生しました。私はテストしています。PHPからデータベースに追加するとNULLが挿入される

私は次の2つのファイルを使用して、私のデータベースに値を挿入しようとしている:

は、レコードの追加:

<form action="AddVenue.php" method="post" /> 
<p>Venue Name: <input type="text" name="venue_name" /></p> 
<p>Venue Capacity: <input type="text" name="venue_capacity" /></p> 
<input type="submit" value="Submit" /> 
</form> 

AddVenue.php

<?php 
require("dbconnection.php"); // Connect to Database 

// Select Database 

$db= 'database'; 
mysql_select_db($db) or die("Could not select database"); 


$venue_name = $_POST['venue_name']; 
$venue_capacity = $_POST['venue_capacity']; 

$sql = "INSERT INTO Venues (venue_name) VALUES ('$venue_name')"; 
$sql = "INSERT INTO Venues (venue_capacity) VALUES ('$venue_capacity')"; 

if (!mysql_query($sql)) 
{ 
     die('Error: ' . mysql_error()); 
} 



mysql_close(); 
?> 

現時点では、フィールドvenue_capacityにフォルトを追加しますが、私はtは常にvenue_nameフィールドにNULLを追加します。容量フィールドはINTで、名前フィールドはVARCHARです。

なぜそれがそれをしているのかわかりません。私は二重と三重をチェックした名前と同じパットです。誰にもアイデアはありますか?

+1

入力をエスケープする必要があります。$ venue_name = mysql_real_escape_string($ _ POST ['venue_name']); – Martin

答えて

4

あなたは1に2つのクエリを結合する必要があります。

INSERT INTO Venues (venue_name, venue_capacity) VALUES ('$venue_name', '$venue_capacity'); 

フォームもvenue_name代わりのvenuenameという名前のフィールドを持っている必要があります。

4

あなたは、あなたが同じレコードに意味_name="venuename"

+1

それは唯一の問題ではありません。彼は最初のクエリを実行していません。 – Jon

+0

@ジョン、それは本当です。 – joakimdahlstrom

2

を見逃していますか?

あなたはこのように同じ文の中にそれらを挿入する必要があります。

$sql = "INSERT INTO Venues (venue_name, venue_capacity) VALUES ('$venue_name', '$venue_capacity')"; 

そして、プリペアドステートメントを使用してください。現時点では、あなたのコードはSQLインジェクションに対して極端に賢明です。チェックをしなくてもPOST変数から値を読み取るだけだからです。あなたが前にこれを行うに使用する場合$venue_name = $_POST['venue_name']; ?

+0

ありがとうございます。これはいつでも生きることができません。私はただ学びたいだけです。あなたが言及した攻撃の防止に関する情報に私を導く可能性はありますか? –

+0

あなたはそれについてウェブ上にたくさんの情報を見つけるでしょう。 php.netは、準備されたステートメントの出発点として、 [php.net](http://php.net/manual/de/pdo.prepared-statements.php)または[stackoverflow](http :/stackoverflow.com/questions/1457131/php-pdo-prepared-statements) – kufi

0

まず最初:

どうやってこれを行うことができます<input type="text" name="venuename" /></p>

- >あなたが入力された名前のコードに小さな_を忘れてしまいました。

二つ目:

は、あなたがそのようにそれを行う場合は、最初の1を実行せずに$ sqlを新しい値を入れます。

代わりにそれを試してみてください:あなたが最初にそれを行うことなく、新しいクエリで$sqlをリセットしている

$sql = "INSERT INTO Venues (venue_name, venue_capacity) VALUES ('$venue_name', '$venue_capacity')"; 
1

これを試してみてください:

を追加録音:

<form action="AddVenue.php" method="post" /> 
    <p>Venue Name: <input type="text" name="venue_name" /></p> 
    <p>Venue Capacity: <input type="text" name="venue_capacity" /></p> 
    <input type="submit" value="Submit" /> 
</form> 

AddVenue.php

<?php 

$venue_name = mysql_real_escape_string($_POST['venue_name']); 
$venue_capacity = mysql_real_escape_string($_POST['venue_capacity']); 

$sql = "INSERT INTO Venues (venue_name,venue_capacity) VALUES ('$venue_name','$venue_capacity')"; 

if (!mysql_query($sql)) 
{ 
     die('Error: ' . mysql_error()); 
} 

?> 

EDIT(変更の上に説明すると) あなたの入力にタイプミスがありました"venu_name"と2つの異なるSQL文字列を使用していました(もしそれらがacテーブルの構成に応じて2つの異なるフィールドにデータが挿入されます)。 2番目のクエリ文字列が最初に上書きされたため、実行されませんでした。

また、非常に重要なことは、あなたはあなたのデータを何らかの方法で消毒していないということです!おそらくあなたはそれのためにJavaScriptを使用するつもりでしたか?あなたの入力をチェックしないと、多くの厄介な攻撃に対して脆弱になります。

+0

ああ、問題ありません。 – mason81

+0

非常に感謝しています。 –

関連する問題