我为本地的钓鱼俱乐部准备了一份“渔获量报告”表格,目前用户一次只能提交一次渔获量,因此经常需要多次返回该表格来报告一天的渔获量。
我正在尝试对其进行调整,以便“物种”列表变成一个多选项选择框。
每个捕获都需要在数据库中拥有自己的行。
这是面向用户的表单,我已将其从“选择”更改为“选择多个”:
<form action="addspecies.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="datecaught" id="todayDate"/>
<script type="text/javascript">
function getDate()
{
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm}
today = yyyy+""+mm+""+dd;
document.getElementById("todayDate").value = today;
}
//call getDate() when loading the page
getDate();
</script>
<!--Date caught: <input type="date" name="datecaught"><p>-->
<table width="600" cellpadding="5">
<tr>
<td>Boat Name:</td>
<td>
<select name="boatname">
<option value = "">---Select---</option>
<?php
$queryusers = "SELECT BoatName FROM SpeciesHuntBoats WHERE CatchYear2=$year ORDER BY BoatName ASC";
$db = mysqli_query($db, $queryusers);
while ( $d=mysqli_fetch_assoc($db)) {
echo "<option value='".$d['BoatName']."'>".$d['BoatName']."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td>Species:</td>
<td>
<select name="species" multiple size="5">
<option value = "">---Select---</option><br>
<?php
$queryspecies = "Select Species from SpeciesHuntSpecies ORDER BY Species ASC";
$db2 = mysqli_query($db2, $queryspecies);
while ( $s=mysqli_fetch_assoc($db2)) {
echo "<option value='".$s['Species']."'>".$s['Species']."</option>";
}
?>
</select>
</td>
</tr>
<tr><td>Angler's Name:</td><td><input type="text" name="angler" size="40"></td></tr>
<tr><td>Notes:</td><td><textarea rows="2" cols="40" name="notes"></textarea></td></tr>
<tr>
<td>Photo (optional):</td>
<td><input type="file" name="file"></td>
</tr>
<tr><td></td><td><input type="submit" value="Submit"></td></tr></table>
</form>
那么addspecies.php的相关部分在这里:
$datecaught = $_POST['datecaught'];
$boatname = $_POST['boatname'] ;
$species = $_POST['species'];
$angler = $_POST['angler'];
$notes = $_POST['notes'];
$bm = "SELECT BoatMake FROM SpeciesHuntBoats WHERE BoatName='$boatname'";
$q = mysql_query($bm);
$n = mysql_fetch_assoc($q);
$boatmake = $n['BoatMake'];
$skip = "SELECT Skipper FROM SpeciesHuntBoats WHERE BoatName='$boatname' AND CatchYear2='$year'";
$qq = mysql_query($skip);
$nn = mysql_fetch_assoc($qq);
$skipper = $nn['Skipper'];
$http_referrer = getenv( "HTTP_REFERER" );
// Image add
$imagename=$_FILES["file"]["name"];
//Get the content of the image and then add slashes to it
$imagetmp=addslashes (file_get_contents($_FILES['file']['tmp_name']));
$query_rsCatch = "INSERT INTO SpeciesHunt (DateCaught, CatchYear, BoatName, BoatMake, Species, Species, Angler, Skipper, Notes, PhotoName, Photo) VALUES('$datecaught','$year','$boatname','$boatmake','$species','$species2','$angler','$skipper','$notes','$imagename','$imagetmp')";
$rsCatch = mysql_query($query_rsCatch, $webdb) or die(mysql_error());
我该如何让用户可以选择(例如 4 个物种)并仅提交一次,但在数据库中创建 4 个单独的条目?
最佳答案
多重选择应该有一个数组样式名称:
<select name="species[]" multiple size="5">
然后在 PHP 中,$_POST['species']
将是一个包含所有选择的数组。您可以循环遍历数组并插入每个数组。
foreach ($species as $s) {
$query_rsCatch = "INSERT INTO SpeciesHunt
(DateCaught, CatchYear, BoatName, BoatMake, Species, Angler, Skipper, Notes, PhotoName, Photo)
VALUES('$datecaught','$year','$boatname','$boatmake','$s','$angler','$skipper','$notes','$imagename','$imagetmp')";
$rsCatch = mysql_query($query_rsCatch, $webdb) or die(mysql_error());
}
您还应该停止使用 mysql_*
函数。它们在很多年前就被弃用了,最终在 PHP 7 中被完全删除。转换为 PDO 或 mysqli,并学习使用准备好的语句来防止 SQL 注入(inject)。
关于php - 将选择框中的多个值插入到单独的行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53882038/