2013-05-02 1 views
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 
+0

во-первых, не используйте устаревшие функции mysql, вместо этого используйте PDO или mysqli. во-вторых, это имело уязвимость SQL с высоким уровнем риска. – reikyoushin

+0

Вы проверили радиостанции перед отправкой? - отредактировать - позаботьтесь об инъекции – nicolas

+0

@reik: не при «высоком риске». он плоский BEGGING для инъекции атаки. –

ответ

2

Метод, который вы используете для сохранения данных в вашей БД, чрезвычайно рискован. Вы открыты для 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]')"; 

А если серьезно, измените свой код!

EDIT:

Если вы хотите принять массив $_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')"; 
?> 
+0

В настоящее время я пытаюсь изучить PHP и прочитал о что часто, но я просто пытаюсь заставить это работать. когда вы имеете в виду добавление двух колонок, это делается в базе данных. – Watlers1993

+0

Это было изменено, но когда я пытаюсь нажать более одного варианта для консоли, я могу получить только один ответ, а не несколько ответов, сохраненных в базе данных. – Watlers1993

+0

В вашей таблице 'survey' есть имя столбца' gender' и 'console'? Если нет, вам нужно будет добавить их в свою структуру таблицы. В инструкции INSERT вы определяете список столбцов, а затем список значений, которые идут в этих столбцах. В списке столбцов имеется только 3 столбца, но перечислено 5 значений. Я исправил его, чтобы было перечислено 5 столбцов и указано 5 значений. –