【发布时间】:2018-02-01 03:38:23
【问题描述】:
我有一个表单,它在 foreach 循环中创建多个文本输入,如下所示:
<?php $results = $wpdb->get_results( "SELECT * FROM wp_results WHERE event_id = '$event' AND div_id = '$division'" ); ?>
<form action="" method="post">
<?php foreach ($results as $entry) { ?>
<p>
<?php echo $entry_name;?>
<input type="hidden" name="entry_id" value="$entry->user_id">
<input type="text" name="position" value="">
<input type="text" name="points" value="">
</p>
<?php }?>
<input type="submit" name="submit" value="Save Changes" class="button">
</form>
<?php
if ( isset( $_POST['submit'] ) ){
$entry_id = sanitize_text_field($_POST['entry_id']);
$position = sanitize_text_field($_POST['position']);
$points = sanitize_text_field($_POST['points']);
$wpdb->update('wp_results',
array(
'position' => $position,
'points' => $points,
),
array(
'user_id' => $entry_id,
)
);
}
?>
结果是一个看起来像这样的 html 表单:
<form action="" method="post">
<p>Aiden Hopkins
<input type="hidden" name="entry_id" value="98">
<input type="text" name="position" value="">
<input type="text" name="points" value="">
</p>
<p>Asha Sykes
<input type="hidden" name="entry_id" value="75">
<input type="text" name="position" value="">
<input type="text" name="points" value="">
</p>
<p>Ffion Hughes
<input type="hidden" name="entry_id" value="66">
<input type="text" name="position" value="">
<input type="text" name="points" value="">
<input type="submit" name="submit" value="Save Changes" class="button">
</form>
我遇到的问题是,当我尝试提交表单并将每个用户的结果写入数据库时,它只输入循环的最后一个实例的详细信息而忽略其他实例。
我在这里查看了其他答案,例如How to loop through an array of inputs in a form?,但是当我尝试这样做时,我得到了所有数据库条目的“数组”。
我确信有一种使用 foreach 或其他东西的简单方法可以做到这一点,但我只是对它感到困惑,我必须承认,数组不是我的强项!
【问题讨论】:
-
位置和点在 $_POST 中作为数组传入,在 `foreach($_POST['position'] as $key=>$val) { echo $key." ".$val 上使用 foreach };
-
因为他们的
name是一样的。使他们的名字在形式上不同,并在$_POST中分别接收 -
@clearshot66 你能详细说明你的答案吗,我在 $_POST['entry_id'] 上尝试了 foreach 循环,但没有成功。
-
@TheSumo 那是因为它们不是数组。如果名称没有作为数组传入之后没有 []。您还编辑了您的问题,所以现在我以前的帖子无关紧要
标签: php arrays forms post foreach