Я создал форму, в которой некоторые из полей являются множественными выборами, однако после отправки формы в mysql вставляется только окончательный выбор в поле, в котором были сделаны множественные выборы. Я не уверен, что делать. Я новичок в MySQL и PHP, поэтому мне нужно, чтобы это было просто. Заранее спасибо.
Вот мой код:
if(isset($_POST['add'])){
$dbhost = 'xxxxxxx';
$dbuser = 'xxxxxxx';
$dbpass = 'xxxxxxx';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Could not connect: ' . mysql_error());
}
if(! get_magic_quotes_gpc() ){
$TypeOfDwelling = addslashes ($_POST['TypeOfDwelling']);
$EmailAdd = addslashes ($_POST['EmailAdd']);
}else{
$TypeOfDwelling = $_POST['TypeOfDwelling'];
$EmailAdd = $_POST['EmailAdd'];
}
$sql = "INSERT INTO zzzzDB
( TypeOfDwelling
, EmailAdd
, CreateDate) VALUES
('$TypeOfDwelling'
,'$EmailAdd'
, NOW())
";
mysql_select_db('xxxxx_xxxxx');
$retval = mysql_query( $sql, $conn );
if(! $retval ){
die('Could not enter data: ' . mysql_error());
}
echo '<img src="../../../images/content__images/image_480x320_a.jpg" alt="image" width="300" height="200" class="img-responsive">';
echo "<br />Thank you for your submission!";
mysql_close($conn);
?>
<form name="MLSrequest" action="<?php $_PHP_SELF ?>" method="post" class="form-inline" role="form">
<table width="95%" cellspacing="0" cellpadding="0" border="0" align="left">
<tbody>
<tr>
<td>
<input type="hidden" name="recipient" value="[email protected]">
</td>
</tr>
<tr>
<td colspan="2"> <div class="form-group">
<label class="sr-only" for="TypeOfDwelling">Select The Type Of Dwelling</label>
<select name="TypeOfDwelling" size="5" class="form-control form-control-lg" id="TypeOfDwelling" multiple="multiple">
<option selected>Select DWELLING TYPE.</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<div class="form-group">
<label class="sr-only" for="EmailAdd">Email Address</label>
<input name="EmailAdd" type="email" class="form-control form-control-lg" id="EmailAdd" size="17px" maxlength="30" placeholder="Email Address" required>
</div>
</td>
</tr>
<td colspan="2">
<button name="add" id="add" type="submit" class="btn btn-primary">Submit Request</button>
</td>
</tr>
</tbody>
</table>
</form>
<?php
}
Вот хитрость, вам нужно установить значение атрибута имени тега select как массив:
<select name="TypeOfDwelling[]" multiple>
Делая это, вы дадите «правильный контейнер» для всех выбранных значений, которые будут сохранены во время отправки.
Это даст вам элемент в массиве $ _POST, например:
$_POST["TypeOfDwelling"]=array(....);
Если вы не используете квадратные скобки, то каждое последующее значение в TypeOfDwelling будет перезаписывать предыдущее, как вы заметили.
Позвольте мне объяснить это, используя ситуацию формы GET …
Допустим, это ваша форма:
<form action="">
<select name="multi" multiple>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
<button>Submit</button>
</form>
Если вы выберете опции 2 и 4, а затем отправите, вы увидите строку запроса в конце URL, которая говорит: ?multi=2&multi=4
Если вы написали var_export($_GET["multi"])
вы бы увидели 4
Если вы вместо этого используете multi[]
в качестве значения вашего имени атрибута, выбрав опции 2 и 4, затем отправив, вы увидите следующую строку запроса: ?multi%5B%5D=2&multi%5B%5D=4
%5B%5D
это URL-кодированная версия []
, Если вы написали var_export($_GET["multi"])
вы бы увидели array(0=>'2',1=>'4')
Теперь, что касается вашей реализации, вам нужно будет обработать этот массив данных, прежде чем вы сможете просто вставить его в свой запрос. Вам нужно будет решить, собираетесь ли вы вставлять несколько строк данных или, возможно, разделять значения запятыми. Если вы собираетесь просто разделить запятые значения, вы можете использовать implode(',',$_POST["TypeOfDwelling"])
уменьшить массив значений до строки. Правильное решение по этому вопросу выходит за рамки этого вопроса, но вы наверняка найдете несколько хороших страниц на SO по этой теме с небольшим поиском.
Короткий ответ: вы можете взорвать их, когда объявите переменную для вашего запроса.
// in there respective locations...
$TypeOfDwelling = addslashes(implode(',',$_POST['TypeOfDwelling']));
// and
$TypeOfDwelling = implode(',',$_POST["TypeOfDwelling"]);
Если бы у меня было больше времени, я бы оказал вам более всестороннюю помощь, но сейчас, пожалуйста, немедленно изучите подготовленные утверждения с помощью mysqli — это необходимо.
Других решений пока нет …