1

現在の PHP コードを取得してデータベースに挿入しようとしています。現在、名、姓、および電子メールを保存できますが、残りのフォーム データ「性別」および「コンソール」を保存することはできません。ここにコードがあります

<!Doctype html public>

<html>
<body>

fill out the following form:

<table border="1" cellpadding="10">
<td>
<h1> Devices owned Survey </h1>
<form action="submit_answer.php" method = "POST"> 
First Name: <br /> <input type="text" name="first" /><br />
<br />
Last Name: <br /> <input type="text" name="last" /> <br />
<br />
Email: <br /> <input type="text" name="email" /> <br />
<br />
<u>Gender</u>: <br />
<br />
<input type="radio" name="gender" value="male" /> Male<br />
<input type="radio" name="gender" value="female" /> Female <br />
<br />
<u>I Have The Following:</u> <br />
<br />
<input type="checkbox" name="console" value="Playstation3" /> Playstation 3<br />
<input type="checkbox" name="console" value="Xbox360" />  Xbox 360 <br />
<input type="checkbox" name="console" value="Wii" />  Wii <br />
<input type="checkbox" name="console" value="Iphone" />  Iphone <br />
<input type="checkbox" name="console" value="MacBook" />  MacBook <br />
<br />
<input type="submit"/>
</form>

</td>
</table>
</body>
</html>



 PHP //SUMBMIT FORM
<?php

define('DB_NAME', 'survey');
define('DB_USER', 'root');
define('DB_PASSWORD', 'XXXX');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

 if (!$link)
{
die('Could NOT Connect: ' . mysql_error());
}
$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected) 
{
die ('Cant\'t use' . DB_NAME. ':' . mysql_error());
}
echo 'Connected Sucessfully';

$first = $_POST["first"]; // Since method=”post” in the form
$last = $_POST["last"];
$email = $_POST["email"];
$gender = $_POST["gender"];
$console = $_POST["console"];


$sql = "INSERT INTO survey (first, last, email) VALUES                   
( '$_POST[first]','$_POST[last]','$_POST[email]','$_POST[gender]','$_POST[console]')";
$result = mysql_query($sql);

$result = mysql_query($sql) or die ("could not save record");

mysql_close();
?>
//Also trying to validate the form so each question is answered
4

1 に答える 1

2

DB にデータを保存するために使用している方法は、非常に危険です。SQL インジェクション攻撃に対して無防備です。そうは言っても、SQL インジェクション攻撃については、mysql_query.

SQL インジェクションの脆弱性を修正するためにコードを完全に書き直すつもりはありませんが、現在抱えている問題を修正するために...

コードには次のものがあります。

$sql = "INSERT INTO survey (first, last, email) VALUES                   
( '$_POST[first]','$_POST[last]','$_POST[email]','$_POST[gender]','$_POST[console]')";

3 列を指定していますが、5 列を渡しています。他の2列を追加する必要があります

$sql = "INSERT INTO survey (first, last, email, gender, console) VALUES                   
( '$_POST[first]','$_POST[last]','$_POST[email]','$_POST[gender]','$_POST[console]')";

しかし、真剣に、コードを変更してください!

編集:

の配列を取得し$_POST['console']て、カンマ区切りの値を持つ文字列に変換する場合は、次のようにします。

name属性に配列ブラケットを追加します。

<input type="checkbox" name="console[]" value="Playstation3" /> Playstation 3<br />
<input type="checkbox" name="console[]" value="Xbox360" />  Xbox 360 <br />
<input type="checkbox" name="console[]" value="Wii" />  Wii <br />
<input type="checkbox" name="console[]" value="Iphone" />  Iphone <br />
<input type="checkbox" name="console[]" value="MacBook" />  MacBook <br />

配列を繰り返し、値を文字列に追加します。

<?PHP
$consoleArray = $_POST['console'];
$consoleCommaString = "";
if ($consoleArray != null && is_array($consoleArray)) {
    foreach ($consoleArray as $consoleValue) {
        $consoleCommaString .= $consoleValue .", ";
    }
}

$sql = "INSERT INTO survey (first, last, email, gender, console) VALUES ('$_POST[first]','$_POST[last]','$_POST[email]','$_POST[gender]','$consoleCommaString')";
?>
于 2013-05-02T21:44:12.387 に答える