Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从while循环外部获取变量_Php_Html_Mysql_Variables - Fatal编程技术网

Php 从while循环外部获取变量

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

我正在做的用户配置文件页,这一个必须显示当前的信息。但当我显示页面时,会显示如下错误: 未定义变量:第97行C:\wamp\www\Assignment\userpage.php中的PhoneNumber

我找不到问题,对我来说似乎没问题

<!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';
    }