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

| 我是PHP / mySql的初学者。我正在编写CMS,但仍处于早期阶段。 我编写了一个代码,将信息从mySql表中获取,但是将其存储到HTML表中。问题是,在应用某个IF语句之前,将显示mySql表中的整个数据,这就是我想要的...但是,在应用该IF语句后,我的部分数据就消失了! (第一个具体的原始代码)..因此,这是我的代码,可以帮助您高效地诊断我的问题..如果您需要其他内容,请告诉我。 首先,在应用IF语句之前,这是我的HTML表: 之后: 这是我的代码,没有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 ...
}
    
如果没有IF,您将无法做到这一点:
if($myData = mysql_fetch_array($myResult)) {
作为参考,请在If语句之后立即检查。     
这是您的第二个
if
语句:您正在获取结果集的第一行,之后对其不做任何操作,因此当您进入
while
循环并获取第二行时,它便消失了。 这行:
if($myData = mysql_fetch_array($myResult)) {
    

要回复问题请先登录注册