我创建了一个表单,其中某些字段是多个选择的,但是在提交表单后,只有进行多个选择的字段中的最终选择才会被插入到 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="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3d4545457d454545135e5c" rel="noreferrer noopener nofollow">[email protected]</a>">
</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 标签的 name 属性值设置为一个数组,如下所示:
<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 然后提交,您将在网址末尾看到一个查询字符串,内容为:?multi=2&multi=4
如果您写var_export($_GET["multi"])
你会看到4
如果您改为使用 multi[]
作为你的name属性值,选择选项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"])
将值数组减少为字符串。关于这个问题的正确决定超出了这个问题的范围,但是你肯定可以通过一些搜索找到关于这个主题的一些好页面。
简单的回答是,当您为查询声明变量时,您可以将它们内爆。
// in there respective locations...
$TypeOfDwelling = addslashes(implode(',',$_POST['TypeOfDwelling']));
// and
$TypeOfDwelling = implode(',',$_POST["TypeOfDwelling"]);
如果我有更多时间,我会给你更全面的帮助,但现在,请立即用 mysqli 研究准备好的语句——这是必要的。
关于php - 多选字段仅提交最后选择的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44223420/