gpt4 book ai didi

php - 为什么我的数组只返回最后一行

转载 作者:行者123 更新时间:2023-11-29 01:43:59 26 4
gpt4 key购买 nike

我已搜索该网站,但找不到答案或它与我的查询设置有何关系。这是我的文件,用于处理我的发布数据并传递给 db。我有一个包裹在 table 周围的表格。表中的单元格由数组填充。当我离开此页面时,我希望将表格单元格中的值写入数据库中的新表格。表中的每一行代表数据库中的一个单独行。

这是我所有帖子数据的来源。

    <form action="post_movement.php?class_id=<?php echo $class_id; ?>&pagenum=<?php echo $pagenum; ?>" method="post">
<table border=1 width=800px>
<tr>
<th width=300px>Client</th>
<th width=50px>Order</th>
<th width=200px>Movements</th>
<th>Sets/Reps/Seconds</th>
<th width=150px>Rest</th>
<th>X Completed</th>
</tr>

<?php

// Get workout class and output in table format -------------------------------------------------

if(empty($workout_class) === false)
{
foreach($workout_class as $wc){
if ($wc['pagenum'] !== $pagenum) continue 1;

echo '<tr>
<td><input type="hidden" name="first_name[]" value="'.($wc['first_name']).'">'. ($wc['first_name']).'
<span><input type="hidden" name="nickname[]" value="'.($wc['nickname']).'">('. ($wc['nickname']).')</span>
<span><input type="hidden" name="last_name[]" value="'.($wc['last_name']).'">'. ($wc['last_name']).'</span>
</td>
<td><input type="hidden" name="order[]" value="'.($wc['order']).'">'. ($wc['order']). '</td>
<td>
<select name="movement[]" width=200>
<option>'. ($wc['mv_00']). '</option>
<option>'. ($wc['mv_01']). '</option>
<option>'. ($wc['mv_02']). '</option>
<option>'. ($wc['mv_03']). '</option>
<option>'. ($wc['mv_04']). '</option>
</select></td>
<td><input type="hidden" name="rep_set_sec[]" value="'.($wc['rep_set_sec']).'">'. ($wc['rep_set_sec']). '</td>
<td><input type="hidden" name="rest[]" value="'.($wc['rest']).'">'. ($wc['rest']). '</td>
<td>00</td>
</tr>';
} // foreach($data_array
//print_r($data_array);
} // if(!empty

?>

<! End Table ---------------------------------------------------------------------------------->
</table>
<input type="submit" value="Complete Movement">

</form>

这是我的 php,它处理来自表单的发布数据并将其提交给查询。

    if (empty($_POST)=== false){
$movement_data = array('user_id', 'class_id', 'class_name', 'first_name', 'last_name', 'nickname', 'order', 'movement', 'rep_set_sec', 'rest', 'date');
foreach($movement_data as $key => $value){
$movement_data = array(
'user_id' => $session_user_id,
'class_id' => $_GET['class_id'],
'class_name' => $class_name,
'first_name' => $_POST['first_name'],
'last_name' => $_POST['last_name'],
'nickname' => $_POST['nickname'],
'order' => $_POST['order'],
'movement' => $_POST['movement'],
'rep_set_sec' => $_POST['rep_set_sec'],
'rest' => $_POST['rest'],
'date' => $today
);
}

completed_movement($movement_data);
//header('Location: new_client.php');
//exit ();

}

这是我将 POST 数据插入数据库的查询。

    function completed_movement($movement_data){
array_walk($movement_data, 'array_sanitize');

$fields = '`' . implode('`, `', array_keys($movement_data)) . '`';
$data = '\'' . implode('\', \'', $movement_data) . '\'';


$query = mysql_query ("INSERT INTO `completed_movements` ($fields) VALUES ($data)");

}

HTML 表单页面有两行数据,看起来像这样。

    Colby (Big Cheese) Dodson | 1A | Key Movement | Sets/Reps/Seconds | Rest|
-------------------------------------------------------------------------
Mike (Big Mac) Mckenzie | 1A | Key Movement | Sets/Reps/Seconds | Rest|

一个 var_dump ($_POST) 产生这个。我可以在那里看到那个值,只是不确定它看起来是否像它应该的那样。

    array(7) { 
["first_name"]=> array(2) {
[0]=> string(5) "Colby"
[1]=> string(4) "Mike" }
["nickname"]=> array(2) {
[0]=> string(10) "Big Cheese"
[1]=> string(7) "Big Mac" }
["last_name"]=> array(2) {
[0]=> string(6) "Dodson"
[1]=> string(8) "McKenzie" }
["order"]=> array(2) {
[0]=> string(2) "1A"
[1]=> string(2) "1A" }
["movement"]=> array(2) {
[0]=> string(12) "Key Movement"
[1]=> string(12) "Key Movement" }
["rep_set_sec"]=> array(2) {
[0]=> string(17) "Sets/Reps/Seconds"
[1]=> string(17) "Sets/Reps/Seconds" }
["rest"]=> array(2) {
[0]=> string(4) "Rest"
[1]=> string(4) "Rest" }
}

这是它执行 var_dump 时应该看起来的样子吗?

我需要数组的每一行看起来像这样。前三个值是 user_id、class_id 和 class_name,它们不是上一页我的 html 表单的一部分。这些值在解析脚本页面上被拾取并与我的结果的每一行一起传递。

    $row = array(29, 48, Class 1, Colby, Big Cheese, Dodson, 1A, Key Movement, Sets/Reps/Secons, Rest)

我的表单中的每个条目都需要这样一行。

最佳答案

while($row = mysql_fetch_assoc($query));
return $movement_data;

print_r($movement_data);

您的 while 循环遍历整个数组 - 没有计算代码。完成后,它返回最后一个值,因为这是变量中的唯一项。您的 print_r 永远不会被评估。

编辑添加:

foreach($movement_data as $key => $value);

您的 foreach 语句中还有一个尾随分号。这将产生相同的结果。

再次编辑:

每个表单值都作为值数组传递;所以你需要做的是遍历数组,并一个一个地处理它们。下面的代码应该可以工作,但我还没有测试过。

它在 $_POST["first_name"] 数组上循环 - 对于其中的每一个值,它都会填充一个临时数组,并将其传递给您的函数。其中一些值是硬连接的,一些来自等效数组索引 - 第一次运行使用值为 0 的索引元素,依此类推。

$i = 0;
while (isset($_POST["first_name"][$i])) {
$movement_data = array(
'user_id' => $session_user_id,
'class_id' => $_GET['class_id'],
'class_name' => $class_name,
'first_name' => $_POST['first_name'][$i],
'last_name' => $_POST['last_name'][$i],
'nickname' => $_POST['nickname'][$i],
'order' => $_POST['order'][$i],
'movement' => $_POST['movement'][$i],
'rep_set_sec' => $_POST['rep_set_sec'][$i],
'rest' => $_POST['rest'][$i],
'date' => $today
);

completed_movement($movement_data);

$i++;
}

关于php - 为什么我的数组只返回最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12010468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com