从嵌套在运行mysqli_fetch_assoc()函数的函数中的函数访问变量值

皮埃尔

我正在尝试生成一个表单,该表单相当于一个表下的删除按钮,该表在站点管理页面上显示客户端配置文件信息。该表似乎很好。但是,尽管我没有生成关于未定义变量的错误消息(我的错误消息),但是我希望在while循环中的每个迭代中使用函数生成的形式不包含变量$ id,$ firstname,$ lastname。配置已设置为执行此操作,并且实际上可以正常工作)。我只是得到一个表示删除的按钮,并且表单处理功能失败,因为$ _POST值为空(表单本身中的变量值也是如此)。因此,问题必须出在表单函数对表变量的访问上。

如果我将表单作为回显语句而不是函数包含在循环中,则该按钮将按需工作。但是,我想将这两个方面分开(我想)是神经质和特质的组织偏好。我以前遇到过这类问题,可以通过更好地了解变量范围来解决。但是,表单函数中的变量被定义为全局变量,这让我无所适从。

这是while循环及其与mysqli_fetch_assoc()的交互的特殊之处吗?

我在php.net手册中对mysqli_fetch_assoc()的描述中寻求了可能导致此问题的指示,但我发现没有任何迹象表明这是不允许的。

任何帮助将是巨大的。另外,作为一个自学成才的人,请尝试在您的评论和批评中保持建设性。我相信我有很多东西要学习,非常感谢那些了解我以外的人的指导。

这是我的表生成函数:

function table_delete_client() {
$client_set = find_all_clients();   

while($client = mysqli_fetch_assoc($client_set)) {
    $id =           htmlentities($client['id']);
$firstname =        htmlentities($client['firstname']);
$lastname =         htmlentities($client['lastname']);
$position_en =      htmlentities($client['position_en']);
$position_fr =      htmlentities($client['position_fr']);
$division_en =      htmlentities($client['division_en']);
$division_fr =      htmlentities($client['division_fr']);
$organisation_en =  htmlentities($client['organisation_en']);       
$organisation_fr =  htmlentities($client['organisation_fr']);       
$telephone =        htmlentities($client['telephone']);
$email =        htmlentities($client['email']);
$email_list =       htmlentities($client['email_list']);        
$username =     htmlentities($client['username']);

echo "<table>" .
     "<tr>" .
         "<th>ID</th>" .
         "<td>$id</td>" .
     "</tr>" .
     "<tr>" .
             "<th>First Name</th>" .
     "<td>$firstname</td>" .
     "</tr>" .
     "<tr>" .
      "<th>Last Name</th>" .
      "<td>$lastname</td>" .
     "</tr>" .
     "<tr>" .
      "<th rowspan='2'>Position</th>" .
      "<td>$position_en</td>" .
     "</tr>" .
     "<tr>" .
      "<td>$position_fr</td>" .
     "</tr>" .
     "<tr>" .
      "<th rowspan='2'>Division</th>" .
      "<td>$division_en</td>" .
     "</tr>" .
     "<tr>" .
      "<td>$division_fr</td>" .
     "</tr>" .
         "<tr>" .
      "<th rowspan='2'>Organisation</th>" .
      "<td>$organisation_en</td>" .
     "</tr>" .
     "<tr>" .
      "<td>$organisation_fr</td>" .
     "</tr>" .
     "<tr>" .
      "<th>Telephone</th>" .
      "<td>$telephone</td>" .
     "</tr>" .
     "<tr>" .
      "<th>Email</th>" .
      "<td>$email</td>" .
     "</tr>" .
         "<tr>" .
      "<th>Email List</th>" .
      "<td>$email_list</td>" .
     "</tr>" .
     "<tr>" .
      "<th>Username</th>" .
      "<td>$username</td>" .
     "</tr>" .
         "</table>" .
     "<br />";

         form_delete_client();
        }
        mysqli_free_result($client_set);
}

这是嵌套在“ while”循环中的表单生成函数:

function form_delete_client() { 
global $id;
global $firstname;
global $lastname;

echo $firstname;

echo "<form id=\"delete_client\" method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "?sub_page=2\">" .
 "<input type=\"hidden\" name=\"id\" value=\"" . $id . "\" />" .
 "<input type=\"hidden\" name=\"firstname\" value=\"" . $firstname . "\" />" .
 "<input type=\"hidden\" name=\"lastname\" value=\"" . $lastname . "\" />" .
 "<input type=\"submit\" id=\"delete_button\" class=\"button\" name=\"submit\" value=\"Delete " . $firstname . " " . $lastname . "\" />" .
"</form>" .
"<br>";
}
Quixrick

有趣的问题。我尝试复制您的情况,它对我有用-从mysqli while循环内调用函数。

<?php

$link = mysqli_connect('HOST', 'USER', 'PASS', 'DATABASE');

$sql = 'SELECT * FROM cds';

$result = mysqli_query($link, $sql);

while ($row = mysqli_fetch_array($result)) {
    $firstname = $row['titel'];
form_delete_client();
}

function form_delete_client() { 
    global $firstname;
    echo "<BR>".$firstname;
}

输出:

<BR>Beauty<BR>Goodbye Country (Hello Nightclub)<BR>Glee

函数应该在循环内正常工作。我不确定在您的情况下为什么没有传递数据。我想它可能与您调用a有关,global $firstname而theglobal被设置一次,然后不会被覆盖。但这只是一个猜测。我建议做的是以下内容:

form_delete_client($id, $firstname, $lastname);

然后,您的函数将如下所示:

function form_delete_client($id, $firstname, $lastname) { 
    echo $firstname;
    echo "<form id=....";
}

然后,您无需进行任何全球化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mysqli_fetch_assoc 的 While 函数是无限的

来自分类Dev

带有PHP的JS函数mysqli_fetch_assoc echo

来自分类Dev

使用mysqli_fetch_assoc从函数返回多个值

来自分类Dev

在函数外访问变量值

来自分类Dev

如何访问 map 函数中的变量值?

来自分类Dev

从函数获取变量值

来自分类Dev

Twilio函数-变量值

来自分类Dev

从函数获取变量值

来自分类Dev

闭包何时捕获javascript中的变量值(在外部函数中定义):何时定义或执行嵌套函数?

来自分类Dev

jQuery全局变量值已更改也应从函数中访问

来自分类Dev

PHP 访问 mysqli_fetch_assoc 值

来自分类Dev

从Solidity中的另一个函数访问在一个函数中初始化的变量值

来自分类Dev

如何在jquery中的函数外获取变量值

来自分类Dev

递归函数的变量值在PHP中未更改

来自分类Dev

无法在函数angularjs中更新变量值

来自分类Dev

Python-更改函数中的类变量值

来自分类Dev

从其他函数中获取变量值 Python

来自分类Dev

如何在FreeMarker函数中传递分配变量值

来自分类Dev

在 PHP 中跨函数共享变量值

来自分类Dev

将变量值放入 Swift 的异步函数中

来自分类Dev

如何在函数中设置变量值?

来自分类Dev

使用函数中的内容更改变量值

来自分类Dev

保留变量值的Python递归函数

来自分类Dev

函数不改变变量值

来自分类Dev

获取在函数内部创建的变量值

来自分类Dev

变量值未跨函数更新

来自分类Dev

变量值未在函数内部传递

来自分类Dev

Swift变量值和函数

来自分类Dev

通过函数设置窗口变量值