2013-12-09 30 views
0

问题标题说明了这一切:我想循环遍历每一行,但我只得到其他所有行。有趣的是,当我使用mysql_num_rows,如下所示,它得到正确的计数。这是怎么回事?mysql_fetch_array和while循环意外返回所有其他记录

$query = "SELECT * FROM `staff`"; 
$result = mysql_query($query) or die(mysql_error()); 
$count = mysql_num_rows($result); 
echo '<form action="" method="post"><ul>'; 
    while ($row = mysql_fetch_array($result)){ 
     echo '<li>' . $row['name'] . ' 
      <select> 
       '; 
       $i = 1; 
       while ($i <= $count) { 
        echo '<option value="' . $i . '">' . $i . '</option>'; 
        $i++; 
       }' 
      </select> 
      </li>'; 
    } 

难道是因为我在计数吗?我也需要数数。这是一个重新排序的应用程序,所以我需要能够改变每个人的位置,但选项只能是可用职位的总数。无论如何,也许有更合乎逻辑的方法来做到这一点?

+0

你的结构是完全错误的。你的嵌套while循环对我来说没有意义。 – Ryan

+0

那好吧帮帮我吧!对于我数据库中的每个员工记录,我希望回显一个列表项以及一个选项,其数量等于数据库中的条目数。我现在可以看到,没有任何东西连接选择的工作人员,但这应该是一个简单的修复 – idelest

+0

其非常接近,除了事实,我只得到一半的列表项目,因为我需要的事实 – idelest

回答

0

您还没有输出是关闭</select>标签字符串:

   while ($i <= $count) { 
        echo '<option value="' . $i . '">' . $i . '</option>'; 
        $i++; 
       }' 
'//    ^--- NB missing echo

目前的情况是,目前PHP解析字符串作为不执行任何操作的文字表达。

因此,你的代码生成的HTML看起来像:

<li>foo 
    <select> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <li>bar 
     <select> 
     <option value="1">1</option> 
     <option value="2">2</option> 
     <option value="3">3</option> 
     <li>baz 
      <select> 
      <option value="1">1</option> 
      <option value="2">2</option> 
      <option value="3">3</option> 

怎么这么破的HTML渲染将取决于一个人的浏览器。你的浏览器似乎只能生产其他选择框?

+0

好的东西非常感谢,因为我之前说过,立即清除这个问题 – idelest