PHP MySQLi传递选择或查询的文本值

时间:2017-12-21 13:46:20

标签: php mysqli

我有一个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] . "' 

                            ");                 
    }
}
?>

2 个答案:

答案 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