2012-10-06 78 views
-2

我试图在窗体中将我数据库中的所有用户行作为选择回显出来。Mysql数组无法正常工作

它只显示一个空格。没有其他的。

这是我的代码。

<?php 
session_start(); 
require('../../config.php'); 
$user = $_SESSION['user']; 
$qry=("SELECT `rank`, `uname` FROM users WHERE `uname` = '$user'"); 
$result=mysql_query($qry); 
$row = mysql_fetch_assoc($result); 
$rank = $row['rank']; 
$logged = $_SESSION['loggedin']; 
    if ($logged == true) { 
    if ($rank >= 3) { 
    echo "Succesful, $user.<br /> 
     <form method='POST' action='delete.php'> 
     <select><option>Please select</option>"; 
     while ($row = mysql_fetch_assoc($result)) { 
      $users = $row['uname']; 
      $lol = ucwords($users); 
      } 
     echo "<option>$lol</option>"; 
     echo "</select> 
    </form>"; 
    } else { 
    echo "Your not an admin. $user"; 
    } 
} else { 
echo "Please login."; 
} 

?> 
+1

添加特定的标记,你的问题,也许'php',也许' mysql' - 数据库没有用来吸引注意力。 PS的mysql没有阵列 –

+0

@njk它不工作 - 不明白为什么 - 拒绝谷歌的答案;-) –

回答

2

首先,请停止使用mysql_功能,因为他们正在deprecated。看看mysqli_PDO。请注意,您的脚本容易受到SQL注入的影响。

你的脚本不工作的原因是因为它看起来是你两次拨打mysql_fetch_assoc。当第二次调用它时,如果您的查询只返回一行,则不会有任何输出。

$qry=("SELECT `rank`, `uname` FROM users WHERE `uname` = '$user'"); 
$result=mysql_query($qry); 
$row = mysql_fetch_assoc($result); 
$rank = $row['rank']; 

您将需要重新提交查询(类似下图),并分别调用结果填充下拉,或将结果存储在数组中。

$qry=("SELECT `uname` FROM users"); 
$result=mysql_query($qry); 
while ($row = mysql_fetch_assoc($result)) { 
     echo '<option>' . ucwords($row['uname']) . '</option>'; 
    } 
+0

不工作。 –

+0

@RyanReviews *什么*不起作用? – Kermit

+0

不显示任何内容。 –

0

它看起来像你的while循环设置涨得厉害,我想你需要改变

while ($row = mysql_fetch_assoc($result)) { 
    $users = $row['uname']; 
    $lol = ucwords($users); 
} 
echo "<option>$lol</option>"; 

这个

while ($row = mysql_fetch_assoc($result)) { 
    $users = $row['uname']; 
    $lol = ucwords($users); 
    echo "<option>$lol</option>"; 
} 
+0

Nope不工作。现在,它只是这样说: –

+0

<形式方法=“POST” ACTION =“delete.php”>

+0

@RyanRegards我是诵读困难的还是你只是不使用(问同样的问题?] http://stackoverflow.com/questions/12756514/mysql-array-not-working)也许你应该看看我的答案。 – Kermit

0

更新: 我重读你的问题,似乎你想要显示你桌子上的所有名字。 最初的查询是检查用户是否是管理员。

下面是它的样子。但它只是一个njk'sanswer.

<?php 
session_start(); 
require('../../config.php'); 
$user = $_SESSION['user']; 
$qry=("SELECT `rank`, `uname` FROM users WHERE `uname` = '$user'"); 
$result=mysql_query($qry); 
$row = mysql_fetch_assoc($result); 
$rank = $row['rank']; 
$logged = $_SESSION['loggedin']; 
    if ($logged == true) { 
    if ($rank >= 3) { 
    echo "Succesful, $user.<br /> 
     <form method='POST' action='delete.php'> 
     <select><option>Please select</option>"; 

     // added these 2 lines 
     $qry=("SELECT `rank`, `uname` FROM users"); 
     $result=mysql_query($qry); 

     while ($row = mysql_fetch_assoc($result)) { 
      $users = $row['uname']; 
      $lol = ucwords($users); 
      echo "<option>$lol</option>"; 
      } 

     echo "</select> 
    </form>"; 
    } else { 
    echo "Your not an admin. $user"; 
    } 
} else { 
echo "Please login."; 
} 

?> 
+0

现在它只显示用户我登录为 –

+0

然后尝试在你的mysql控制台或phpmyadmin中运行这个查询SELECT语句,uname FROM用户WHERE uname ='$ user''其中$ user包含任何内容并查看它是否显示2或更多行。如果它只返回一次,那么首先你的查询有问题。 – ace

+0

@ace如果原始查询只返回一行,那么在OP的'while'循环中将不会显示任何内容。 – Kermit

0

重复你确定你的数据库有超过1行?您正在调用读取1次,因此第二次将尝试读取第二行。

也尝试运行查询,直接到MySQL,看看你得到你期待回行,可能是其不返回你所期望的

+0

它运行时,我在惊人的MYSQL中运行它。我不明白为什么它不工作!!!!!!!!!!!!!!! –