如何修复由if语句引起的奇怪的PHP/MySQL问题?

问题描述:

我是PHP/mySql的初学者。我正在写一个CMS,但仍处于早期阶段。 我编写了一个代码,用于从mySql表中获取信息,并将其转换为HTML表格。问题是,在应用某个IF语句之前,mySql表中的所有数据都会显示出来,这正是我想要的......但是,在应用IF语句之后,部分数据简单地消失了! (第一个原始的具体)..所以这里是我的代码,将有效地为您诊断我的问题..如果你需要额外的片断告诉我。如何修复由if语句引起的奇怪的PHP/MySQL问题?

首先,这里是我的HTML表之前将IF语句:

before

而这里的AFTER:

after

这里是我的代码,而IF语句:

<?php 
function make_table() { 
    $myResult = get_ind_info_fam(); 
    $ind_field_count = mysql_num_fields($myResult) -1; 

      // Table to show ALL individuals info. 
      echo "<table>" ; 

      // Table Headers: 
      for ($i = 2 ; $i <= $ind_field_count ; $i++) { 
        $field_name = mysql_field_name($myResult, $i); 
        $field_name = ucwords($field_name); 
        if ($i ==2) { 
         $field_name = "Individual Name"; 
        } 
        echo "<th>{$field_name}</th>"; 
       } 

      // Table Data : 
       while ($myData = mysql_fetch_array($myResult)){ 
        echo "<tr>"; 
        for ($i = 2 ; $i <= $ind_field_count ; $i++) { 
         echo "<td>{$myData[$i]}</td>"; 
        } 
        echo "</tr>"; 
       } 
      echo "</table>" ; 
    } 
?> 

并与IF语句代码:

<?php 
function make_table() { 
    $myResult = get_ind_info_fam(); 
// Checking if a correct $_GET["fam"] is entered 
// (not out of range) so an empty table won't be shown : 

    if (isset($myResult)) { 

     if($myData = mysql_fetch_array($myResult)) { 
      $ind_field_count = mysql_num_fields($myResult) -1; 

      // Table to show ALL individuals info. 
      echo "<table>" ; 

      // Table Headers: 
      for ($i = 2 ; $i <= $ind_field_count ; $i++) { 
        $field_name = mysql_field_name($myResult, $i); 
        $field_name = ucwords($field_name); 
        if ($i ==2) { 
         $field_name = "Individual Name"; 
        } 
        echo "<th>{$field_name}</th>"; 
       } 

      // Table Data : 
       while ($myData = mysql_fetch_array($myResult)){ 
        echo "<tr>"; 
        for ($i = 2 ; $i <= $ind_field_count ; $i++) { 
         echo "<td>{$myData[$i]}</td>"; 
        } 
        echo "</tr>"; 
       } 
      echo "</table>" ; 
     } 
    } 
    } 
?> 

这是我get_ind_info_fam()功能:

function get_ind_info_fam() 
{ 
    //****Family name is clicked***** 

    //This function gets Family ID from addresse bar 
    //and extract individual info according to that ID by $_GET variable 
    // 
    //NOTE : this function is used in the article to show content of 
    //  selected family name. 

     if(is_numeric($_GET["fam"])) { 
      $query ="SELECT * FROM individual 
         WHERE g_id={$_GET["fam"]}"; 
      $result = mysql_query($query); 
      return $result ; 
     } 
} 

我真的不知道到底该怎么告诉你得到完整的图片,但如果有任何不够清楚的事情都会让我知道。

你与if()版本获取在两个地方的数据行:

if($myData = mysql_fetch_array($myResult)) { 

while ($myData = mysql_fetch_array($myResult)){ 

第一行扔掉,因为你只要输出表头行不每输出一行数据。

此外,您的初始isset()检查不会做你想做的。无论查询如何执行,mysql_query()都会返回SOMETHING。如果失败,你会得到一个布尔值FALSE,否则你会得到一个结果集句柄。这意味着isset()将永远成功,因为这个价值永远是(大惊喜)。你想要的是:

$myResult = get_ind_info_fam(); 

if ($myResult === FALSE) { 
    die(mysql_error()); 
} 
if (mysql_num_rows($myResult) == 0) { 
    echo "nothing found"; 
} else { 
    .... print out the results ... 
} 
+0

真正帮助我,谢谢:) – rafael 2011-04-13 19:05:15

你没有这个在一个没有IF:

if($myData = mysql_fetch_array($myResult)) { 

仅供参考,您的if语句后立即检查。

It's你的第二个if声明:您获取结果的第一行,并您鸵鸟政策对它做任何事以后,所以当你进入它消失while循环并获得第二行。

It's这一行:

if($myData = mysql_fetch_array($myResult)) {