我有一个用来向用户发送邮件的表单。
<form method="post" action="/functions/mails/mailstomysql.php">
<?php
$sql="SELECT UserId, FatherName, FirstName FROM profiles";
echo "<div class='FieldTitle' style='display:none;'>To</div>";
echo "
<div class='ui segment'>
<div class='ui fluid multiple search selection dropdown'>
<input type='hidden' multiple name='ReceiverId[]' required>
<i class='dropdown icon'></i>
<input class='search' tabindex='0'>
<div class='default text'>To</div>
<div class='menu' tabindex='-1'>
"; // list box select command
foreach ($conn->query($sql) as $row){//Array or records stored in $row
echo "
<option class='item' data-value='".$row['UserId']."' value='".$row['UserId']."'>$row[FirstName] s/o $row[FatherName]</option>";
}
echo "
</div>
</div>
</div>
?>
<input type="text" name="MailSubject">
<textarea type="text" name="MailContent"></textarea>
<input id="btnAddRecord" name="submit" type="submit" value="Send">
</form>
这是检索上述表单数据的SQL语句:
$sql="SELECT UserId, FirstName FROM profiles";
这是mailtomysql.php
文件,用于将数据插入MySQL数据库。
$ReceiverId=$_POST['ReceiverId'];
$MailSubject=$_POST['MailSubject'];
$MailContent=$_POST['MailContent'];
$sql = "INSERT INTO mails (
`ReceiverId`, `MailSubject`, `MailContent`, `MailRead`, `MailDate`
)
VALUES (
'$ReceiverId', '$MailSubject', '$MailContent', '1', CURRENT_TIMESTAMP()
)";
if ($conn->query($sql) === TRUE) {
echo "Mail sent!";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
上面的代码工作得非常棒和完美。
我的问题
上面的mailtomysql.php
文件从Multiple Selection Box
插入选定的用户,并将选定的用户id发布到ReceiverId
列,我不希望这样,相反,我希望每个选定的用户都有行。
:
现在ReceverId
114,265, 112
What i want
ReceverId
114年
256年
112年
如果用户想要删除邮件,那么它将删除该邮件,并且该邮件中的其他用户也将看不到该邮件,因为它被用户删除了。
所以我的问题是如何使mailtomysql.php
文件为每个选定的用户制作行,而不是在一行中选择用户id。
编辑:我使用Semantic-Ui从下拉列表中选择选项,但它不起作用
在表单一侧:
<form method="post" action="/functions/mails/mailstomysql.php">
<select multiple name='ReceiverId[]'>
<?php foreach ($conn->query($sql) as $row){
echo "<option class='item' data-value='".$row['UserId']."' value='".$row['UserId']."'>". $row['FirstName'] . "</option>";
} ?>
</select>
<input type="text" name="MailSubject">
<textarea type="text" name="MailContent"></textarea>
<input id="btnAddRecord" name="submit" type="submit" value="Send">
确保值在选项中设置,并且选择的名称为ReceiverId[]。
在接收端,这将导致只有一个查询…
$ReceiverIds = $_POST['ReceiverId'];
$values = "";
foreach($ReceiverIds as $receiver){
//don't forget some validation here...
//this is potentially unsafe too since the values are not properly escaped. Perform proper escaping here...
$values .= "('$receiver', '$MailSubject', '$MailContent', '1', CURRENT_TIMESTAMP()
),'n";
}
$values = rtrim($values, ",'n");
$sql = "INSERT INTO mails (
`ReceiverId`, `MailSubject`, `MailContent`, `MailRead`, `MailDate`
)
VALUES
$values";
$success = $conn->query($sql)
foreach($ReceiverId as $item){
$sql = "INSERT INTO mails (
`ReceiverId`, `MailSubject`, `MailContent`, `MailRead`, `MailDate`
)
VALUES (
'$item', '$MailSubject', '$MailContent', '1', CURRENT_TIMESTAMP()
)";
$success = $conn->query($sql)
}`