Php 从while循环外部获取变量
我正在做的用户配置文件页,这一个必须显示当前的信息。但当我显示页面时,会显示如下错误: 未定义变量:第97行C:\wamp\www\Assignment\userpage.php中的PhoneNumber 我找不到问题,对我来说似乎没问题Php 从while循环外部获取变量,php,html,mysql,variables,Php,Html,Mysql,Variables,我正在做的用户配置文件页,这一个必须显示当前的信息。但当我显示页面时,会显示如下错误: 未定义变量:第97行C:\wamp\www\Assignment\userpage.php中的PhoneNumber 我找不到问题,对我来说似乎没问题 <!doctype html> <html> <head> <?php header('Content-type: text/html; charset=utf-8'); $link = mysqli_connec
<!doctype html>
<html>
<head>
<?php
header('Content-type: text/html; charset=utf-8');
$link = mysqli_connect("localhost", "root", "");
if (!$link) {
die('Could not connect : '.mysql_error());
}
$db = mysqli_select_db($link, 'assignment');
if (!$db) {
die('Could not select db : '.mysql_error());
}
if ($_SESSION['loggedin'] = true) {
$query = mysqli_query($link, "SELECT UserID FROM users WHERE UserID=.\$_SESSION['UserID']");
}
$UserID = $query;
$result = mysqli_query($link, "SELECT * FROM users where UserID='$UserID'");
while ($row = mysqli_fetch_array($result)) {
global $Lname, $Fname, $PhoneNumber, $Gender, $DOB, $Email;
$Lname = $row['Lname'];
$Fname = $row['Fname'];
$PhoneNumber = $row['PhoneNumber'];
$Gender = $row['Gender'];
$DOB = $row['DOB'];
$Email = $row['Email'];
echo 'nananananana';
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Movie Renting</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body id="wrapper">
<div class="order">
<h1>Таны бүртгэлийн мэдээлэл:</h1>
<form action = "userpage.php" method = "post">
<table frame="box" style="width:900px; height:auto">
<tr>
<td> Овог:</td>
<td> <?php echo $Lname ?></td> </tr>
<tr>
<td> Нэр:</td>
<td> <?php echo $Fname ?></td> </tr>
<tr>
<td> Хэрэглэгчийн нэр:</td>
<td> <?php echo $UserID ?></td> </tr>
<tr>
<td> E-шуудан:</td>
<td> <?php echo $Email ?> </td> </tr>
<tr>
<td> Утасны дугаар:</td>
<td> <?php echo $PhoneNumber ?></td> </tr>
<tr>
<td> Хүйс:</td>
<td> <?php echo $Gender ?></td> </tr>
<tr>
<td> Төрсөн он сар өдөр: </td>
<td> <?php echo $DOB ?></td> </tr>
<a href = "useredit.php">Өөрийн мэдээллээ засах бол энд дарна уу.</a>
</table>
</form>
</div>
</body>
</html>
您不需要使用全局关键字
只需在while循环之外声明变量
$PhoneNumber= "";
while ($row = mysqli_fetch_array($result)) {
$Lname = $row['Lname'];
$Fname = $row['Fname'];
$PhoneNumber = $row['PhoneNumber'];
$Gender = $row['Gender'];
$DOB = $row['DOB'];
$Email = $row['Email'];
echo 'nananananana';
}
echo $PhoneNumber;
现在,您可以从while循环外部访问$PhoneNumber
谢谢
您的“$\u会话['loggedin']=true”将始终返回true,因为它是一个赋值,没有比较!empty()防止未定义的索引通知
将UserId强制转换为整数以防止sql注入(即使它应该是受信任的源)
若您想要空变量,即使并没有人登录(或在数据库中找不到),您也必须声明它们
将mysqli结果对象(从第一个mysqli_查询中获得的)作为字符串参数传递,它的工作方式不是这样的
而($row=mysqli\u fetch\u assoc())将返回最后一个用户,如果(..)是第一个。如果它是主键(userID建议这样做),结果是相同的
以下是更正的代码:
$Lname = '';
$Fname = '';
$PhoneNumber = '';
$Gender = '';
$DOB = '';
$Email = '';
if (!empty($_SESSION['loggedin']))
{
$result = mysqli_query($link,
"SELECT * FROM users WHERE UserID=" . (int)$_SESSION['UserID']
);
if ($row = mysqli_fetch_array($result))
{
$Lname = $row['Lname'];
$Fname = $row['Fname'];
$PhoneNumber = $row['PhoneNumber'];
$Gender = $row['Gender'];
$DOB = $row['DOB'];
$Email = $row['Email'];
}
}
变量的范围是定义变量的上下文。大多数情况下,所有PHP变量都只有一个作用域。这个单一作用域也跨越了包含的和必需的文件
例如:
让我们假设在example.php文件中,您有以下内容:
<?php
$foo = "Hello World"; // global scope
function hello() {
echo $foo; // reference to local scope
}
hello();
?>
While块在其块内没有有限的作用域,因此,相同的原则不适用,但是当While块外不存在变量时,在While块内使用global关键字定义变量会影响变量
因此,在您当前拥有的while块中:
while ($row = mysqli_fetch_array($result)) {
global $Lname, $Fname, $PhoneNumber, $Gender, $DOB, $Email;
$Lname = $row['Lname'];
$Fname = $row['Fname'];
$PhoneNumber = $row['PhoneNumber'];
$Gender = $row['Gender'];
$DOB = $row['DOB'];
$Email = $row['Email'];
echo 'nananananana';
}
在while块外部的全局范围内定义变量$Lname、$Fname、$PhoneNumber、$SENDER、$DOB、$Email,或者将全局变量放置在while块范围之外,以便您可以访问它们,例如:
<?php
$foo = "Hello World"; // global scope
function hello() {
global $foo;
echo $foo; // reference to local scope
}
hello();
?>
global $Lname, $Fname, $PhoneNumber, $Gender, $DOB, $Email;
while ($row = mysqli_fetch_array($result)) {
$Lname = $row['Lname'];
$Fname = $row['Fname'];
$PhoneNumber = $row['PhoneNumber'];
$Gender = $row['Gender'];
$DOB = $row['DOB'];
$Email = $row['Email'];
echo 'nananananana';
}
或者,我会这样做:
$Lname = '', $Fname = '', $PhoneNumber = '', $Gender = '', $DOB = '', $Email = '';
while ($row = mysqli_fetch_array($result)) {
global $Lname, $Fname, $PhoneNumber, $Gender, $DOB, $Email;
$Lname = $row['Lname'];
$Fname = $row['Fname'];
$PhoneNumber = $row['PhoneNumber'];
$Gender = $row['Gender'];
$DOB = $row['DOB'];
$Email = $row['Email'];
echo 'nananananana';
}
或者,即使您不调用文件中的其他文件,在这种情况下也确实不需要使用global关键字,您可以通过以下方式完成此操作:
$Lname = '', $Fname = '', $PhoneNumber = '', $Gender = '', $DOB = '', $Email = '';
while ($row = mysqli_fetch_array($result)) {
$Lname = $row['Lname'];
$Fname = $row['Fname'];
$PhoneNumber = $row['PhoneNumber'];
$Gender = $row['Gender'];
$DOB = $row['DOB'];
$Email = $row['Email'];
echo 'nananananana';
}
从效率的角度考虑,为什么要在每次while循环迭代周期中调用global关键字?我只是在while循环之外定义/声明变量,在while循环经过迭代过程时,值的赋值将添加到while循环中
变量作用域可能会变得有点棘手,希望这能有所帮助。尝试在while之外声明它们。为什么要同时使用mysql和mysqli函数。第97行是什么?数据库看起来如何?要在while之外声明,我应该编写什么代码?例如:声明$Fname??同时避免在查询中直接使用$UserID。尝试验证它。将if($\u会话['loggedin']=true){
更改为if($\u会话['loggedin']=true){
是的。除了$PhoneNumber之外,您是否获得了所有其他变量?while块
在PHP中没有有限的作用域。只有函数、类、方法和闭包具有有限的作用域。也就是说,您可以在while循环外部声明变量,并直接在while循环内部访问它。
$Lname = '', $Fname = '', $PhoneNumber = '', $Gender = '', $DOB = '', $Email = '';
while ($row = mysqli_fetch_array($result)) {
$Lname = $row['Lname'];
$Fname = $row['Fname'];
$PhoneNumber = $row['PhoneNumber'];
$Gender = $row['Gender'];
$DOB = $row['DOB'];
$Email = $row['Email'];
echo 'nananananana';
}