我有一个USERS表,用于存储用户ID(users.uid)和全名(users.full_name)。然后我有一个On Call计划表,其中列出了下一年的所有周,以及每个待命转换时段(例如白天和夜晚)的名称字段和用户ID(uid)字段。随叫随到
on_call_week,us_night_uid,us_night_full_nam,us_day_uid,us_day_full_name
17-12-25,53,Jane Doe,94,Jill Todd17-12-18,2342,John Smith,24岁,Bob Orr
然后我有一个表格,列出所有待命周开始日期(旁边有复选框),然后一个提交按钮进入一个页面,该页面列出了一个表格,其中每个选定的通话周都有下拉电话插槽(白天)
当我只传递下拉列表框的值时,我试图弄清楚如何更新UID字段和full_name字段(值为UID,文本为full_names)。 / p>
我应该(以某种方式)尝试传递选择下拉列表的文本吗?如果不是,我应该在FOR循环中创建两个新查询,以获取每个UID的日夜插槽full_names。或者,我是否应该尝试执行某些操作,例如将整个用户表查询到一个数组中,然后在每个FOR循环传递中循环遍历该数组两次以获取两个UID插槽的匹配名称?
我不明白MySQLi我找不到答案的一件事是,如果你多次遍历mysqli_fetch_array,查询是否会被重新制作,或者你可以多次遍历$ result而不需要查询被重制为db(while($ row = mysqli_fetch_array($ result)))?我仍然是PHP的新手,老实说甚至不确定如何使用结果集的临时副本(?)来查看PHP查询数据库的次数。
我正在关注这个old guide如何构建一个表单,根据检查的记录一次更新多个记录。
感谢您的帮助。
<?php
$dbname = "on_call";
include '../shared_recources/db_connect.php';
if(isset($_POST["submit"]) && trim($_POST["submit"]) != "")
{
$checked_weeks = count($_POST["selected_on_call_weeks"]);
for($i=0; $i<$checked_weeks; $i++)
{
$us_day_uid = $_POST["us_day_uid"][$i];
$us_night_uid = ($_POST["us_night_uid"][$i];
mysqli_query($con, "UPDATE on_call.on_call_schedule
SET us_day_full_name = '" . $_POST["us_day_full_name"][$i] . "',
us_day_uid = '?????????',
us_night_full_name = '" . $_POST["us_night_full_name"][$i] . "',
us_night_uid = '" '???????????????' . "',
WHERE id = '" . $_POST["selected_on_call_weeks"][$i] . "'
");
}
}
?>
答案 0 :(得分:0)
代码:
while($row = mysqli_fetch_array($result))
只执行一次查询,然后遍历可存储在PHP机器RAM或数据库服务器上的结果 - 您无法控制它存储的位置,它取决于数据库&php; php驱动器&#39;
你的其他问题很难理解。你必须等待别人给你完整的答案。 如果在问题中添加SQL模式(表模式),那么理解起来要容易得多。
答案 1 :(得分:0)
每次运行[mysqli_query]时,都会在DB上执行查询。
为了更好地了解正在发生的事情,我建议A)注释掉[mysqli_query],这样它就不会碰到数据库然后B)在你的[for]中建立一个字符串变量SQL查询。 然后,您可以在[for]循环后将完成的查询回显到屏幕。这将让您准确了解您将发送给数据库的内容。
在您查看行为后,按照您的预期,您可以取消注释[mysqli_query]并根据需要进行调整 - 或者 - 您可以在[for]循环外运行[mysqli_query] (你回应变量的地方)。
以下是PHP.net的更多细节: http://php.net/manual/en/mysqli.query.php