2012-03-07 2 views
0

Я пытаюсь вставить значение этого множественного контрольного списка в столбец db. Этот код не работает. Может ли кто-нибудь обнаружить проблему?MySQL и PHP multiple checklist db insert

Моя база данных состоит из таблицы под названием «цвета» и одного столбца с названием «цвет».

<?php 
// connect to database 
require "mysql_connect.php"; 
?> 


<?php 
// get value from the form 
$color = $_POST['color']; 

foreach($_POST['color'] as $colors){ 
$insert = mysql_query("INSERT INTO colors (color) VALUES ('$color')"); 
} 
?> 

<form action="add_color.php" method="post" enctype="multipart/form-data" name="colorform"  id="colorform"> 

<input type="checkbox" name="color[]" value="black" /> Black 
<input type="checkbox" name="color[]" value="red" /> Red 
<input type="checkbox" name="color[]" value="blue" /> Blue 
<input type="checkbox" name="color[]" value="white" /> White 

<input name="submit" type="submit" value="Add color" /> 

</form> 

Благодаря

+0

Вы путать себя с $ цвета и $ цветов. –

+0

Вы пытаетесь вставить в 4 разные таблицы ('$ colors')? И где определено значение $ color? Кажется, что вы можете просто перепутать имена переменных. – swayne

ответ

1

Это хороший способ, чтобы добавить ваших цвета

<?php 

     require "mysql_connect.php"; 
    // connect to database 
    $colors=array(); 
    // get value from the form 
    if (isset($_POST['color'])) $colors = $_POST['color']; 

    foreach($colors as $color) 
    { 
     mysql_query ("INSERT INTO colors ('color') VALUES ('$color')"); 
    } 
?> 

<form action="add_color.php" method="post" enctype="multipart/form-data" name="colorform"  id="colorform"> 

<input type="checkbox" name="color[]" value="black" /> Black 
<input type="checkbox" name="color[]" value="red" /> Red 
<input type="checkbox" name="color[]" value="blue" /> Blue 
<input type="checkbox" name="color[]" value="white" /> White 

<td><input name="submit" type="submit" value="Add color" /> 
</form> 

если (IsSet ($ _POST [ «цвет»])) Это условие является важным, поскольку это предотвратит ошибку индексации в случае массив пуст

$ цветов = массив(); Кроме того, не объявлять переменные, чтобы предотвратить получение незадекларированных varibles, ранее, в вашем коде, это произойдет, если пользователь не определяет цвет

Запомнить PHP на стороне сервера и, таким образом получая ошибки на PHP создавать лазейки для атаки.Попробуйте прочитать о PHP Best Practices, его очень impotant

надеется, что это помогает :-)

1

Я хотел бы также предположить, что вы дезинфицировать ваш из входов, прежде чем вставить в вашу базу данных. Вы не указываете, какой тип столбца цвета, может быть и несоответствие.

Когда вы говорите INSERT INTO $colors - это то, что вы имеете в виду? Имя вашей таблицы является переменной? Вероятно, у вас должно быть правильное имя таблицы вместо $colors.

Кроме того, вы использовали $ цвет, который я не вижу определенную, вы, вероятно, имел в виду использовать $ цвета, так что должно быть больше, как это:

INSERT INTO tblColors (color) VALUES ('$colors') 

Чтобы проверить возвращаемое значение, чтобы увидеть, что ошибки вы получаете:

$query = "INSERT INTO tblColors (color) VALUES ('$colors')"; 
$insert = mysql_query($query) or die("A MySQL error has occurred.<br />Your Query: " . $query . "<br /> Error: (" . mysql_errno() . ") " . mysql_error()); 
+0

закрывающий тег не является обязательным. –

+0

Мое имя таблицы - это «цвета». Я имел в виду «цвета» вместо «$ colors» (ошибка ввода). Я изменил имя так, как вы предлагали, но оно все еще не работает :( –

+0

Я бы предложил повторять ваши строки запросов, чтобы убедиться, что вы помещаете то, что, по вашему мнению, вы вставляете. Я предполагаю, что вы настроили свою базу данных, и ваше соединение с базой данных правильно. Вы также можете проверить также ошибки mysql в своем запросе. –

0
$insert = mysql_query("INSERT INTO $colors (color) VALUES ($color)"); 

Изменить его:

$insert = mysql_query("INSERT INTO colors_table_name (color) VALUES ($color)"); 

Кроме того, пожалуйста, проверьте возвращаемое значение вставки, возможно, вы получаете ошибки? Первой очевидной проблемой было то, что имя таблицы заменялось цветом из-за переменной, является ли это желаемым эффектом?

+0

проблема пятнистая, но это все еще уязвимость SQL-инъекции –

+0

Я изменил имя, как вы сказали, но оно все еще не работает :( –

+0

* khm * он также предложил проверить ошибки –

0
<?php 
// connect to database 
require "mysql_connect.php"; 
?> 


<?php 
// get value from the form 
$colors = $_POST['color']; 

foreach($colors as $color){ 
    $insert = mysql_query("INSERT INTO colors (color) VALUES ($color)"); 
} 


<form action="add_color.php" method="post" enctype="multipart/form-data" name="colorform"  id="colorform"> 

<input type="checkbox" name="color[]" value="black" /> Black 
<input type="checkbox" name="color[]" value="red" /> Red 
<input type="checkbox" name="color[]" value="blue" /> Blue 
<input type="checkbox" name="color[]" value="white" /> White 

<td><input name="submit" type="submit" value="Add color" /> 

</form> 
0

У вас есть ваши переменные задом, ошибки синтаксиса SQL, SQL инъекций уязвимости, а также полное отсутствие обработки ошибок

$color = $_POST['color']; <---stuff the POST data array into $color 

foreach($_POST['color'] as $colors){ <--- loop over the POST data directly 

$insert = mysql_query("INSERT INTO colors (color) VALUES ($color)"); 
                  ^^^^^^---insert the array 
                  ^^^^^^---no quotes 

Вы можете использовать $ цвета (с S), чтобы сохранить лицо цвета, но затем вставьте $ color, который является массивом.

Никогда не предполагайте, что запрос завершился. Если бы голая минимальная обработка or die(...) ошибки, вы видели, почему ваши запросы потерпели неудачу:

foreach($_POST['color'] as $color) { 
    $safe_color = mysql_real_escape_string($color); 
    $result = mysql_query("INSERT INTO colors (color) VALUES ('$safe_color');") or die(mysql_error()); 
} 
+0

Спасибо, что разобрал некоторые проблемы. Теперь моя проблема в том, что когда я повторяю $ color, он выводит только одно значение. Например, если я проверяю черный и красный, он печатает только красный цвет. Если я выбираю черный, красный и синий, он печатает только синий. Но он ничего не добавляет к базе данных. –

+0

Где вы делаете эхо? Внутри петли? Он должен печатать каждый цвет, который. Убедитесь, что вы получаете правильные значения из формы, выполнив 'var_dump ($ _ POST)' где-нибудь и посмотрите, что появляется. –

+0

После выбора первых трех цветов и отправки я получил это: ["color"] => array (3) {[0] => string (5) "black" [1] => string (3) "red" [ 2] => string (4) "blue"} –