【发布时间】:2023-03-31 05:01:01
【问题描述】:
我目前有一个数据库,其中有不同的地方作为我的行,每个地方都有一个 id、一个名字和一张图片。
我正在尝试创建一个 while 循环,该循环为每个地方生成一个表单,其中包含一个提交输入和一个 div 作为其标签。我希望每个表单输出每个对应的placeId。我尝试使用<input type='text' id='PlaceIdInput' name='PlaceIdInput' value='$PlaceId'> 执行此操作,但很快发现它仅输出第一个 PlaceId 为 1,即使我单击了位置编号 2 或 3。
我猜是因为它们都有相同的输入名称,这很糟糕。
抱歉,如果我使用了错误的术语,我还在上高中,英语是我的第二语言。我真的很感谢你的支持! :D
while($rad = $resultat->fetch_assoc()){
$PlaceId=$rad["PlaceId"];
$PlaceName=$rad["PlaceName"];
$PlacePicture=$rad["PlacePicture"];
echo("
<form method='POST'>
<input id='PlaceInput' type='submit' name='Place' value='Place'>
<label for='PlaceInput'>
<div class='PlaceDiv'>
<p class='PlaceName'>$PlaceName</p>
<div class='ImageDiv'>
<img class='Image' src='$PlacePicture'>
</div>
</div>
</label>
<input type='text' id='PlaceIdInput' name='PlaceIdInput' value='$PlaceId'>
</form>
");
}
if(isset($_POST["地点"])){
$PlaceIdInput = $_POST["PlaceIdInput"];
$sql = "UPDATE User SET UserCurrentPlace='$PlaceIdInput' WHERE UserId='$UserId'";
if($kobling->query($sql)){
}
else {
echo($kobling->error);
}
}
【问题讨论】:
-
警告:使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST、$_GET或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 -
您是否使用 javascript 或其他方式发布表单?如果它们以不同的形式出现,则上述内容没有理由发布相同的
PlaceIdInput。但是,如果您使用 javascript 并使用 ID 获取值,您很可能只会获得第一个输入,因为它们都具有相同的 ID。 ID 在文档中必须是唯一的。 -
不,我正在使用 php 发布表单
-
刚刚尝试了您的代码,我得到了不同的 ID。我确实得到了相同的
Place虽然因为那是硬编码的。 -
啊,我明白了!谢谢!我通过设置 id='PlaceInput$PlaceId' 和标签 for='PlaceInput$PlaceId' 来修复它。 :D
标签: php mysql sql while-loop