我正在尝试生成一个表单,该表单相当于一个表下的删除按钮,该表在站点管理页面上显示客户端配置文件信息。该表似乎很好。但是,尽管我没有生成关于未定义变量的错误消息(我的错误消息),但是我希望在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>";
}
有趣的问题。我尝试复制您的情况,它对我有用-从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] 删除。
我来说两句