2013-02-21 90 views
2

我一直在试图找出是什么导致这个错误,但由于某种原因。它只是不会显示!持续警告:mysql_fetch_array()预计参数1是资源

它已经给我这样的警告消息:

警告:mysql_fetch_array()预计参数1是资源,布尔在C中给出:\ XAMPP \ htdocs中\ EIS \上线64 usercp.inc.php

我试过使用mysql_error();但它没有显示任何东西。

这里是我的代码:

<?php 
$firstname = getuserfield('txtFname'); 
$lastname = getuserfield('txtLname'); 
echo 'Hello '.$firstname.' '.$lastname.'.<br/>'; 

$anotif = 0; 
$dnotif = 0; 
$anotif = $anotif + getuserfield('approved_notif'); 
$dnotif = $dnotif + getuserfield('disapproved_notif'); 
?> 
<h3>Notifications:</h3> 
Approved:<?php if($anotif<1){echo 0;} else { echo '<a href="?anotif">'.$anotif.'</a>';}?><br/> 
<?php 
if(isset($_GET['anotif'])) { 
    $query = "SELECT * FROM hrf_leave WHERE empid = '$empid' AND formStatus = 1 AND checked = 0"; 
    $query_run = mysql_query($query) or die($query."<br/><br/>".mysql_error()); 
    echo "<table border=1> 
    <tr> 
    <th>Type of Leave</th> 
    <th>Specific Reason</th> 
    <th>Date From</th> 
    <th>Date To</th> 
    <th>Number of Days</th> 
    </tr>"; 
    echo "<tr>"; 
    while($record = mysql_fetch_array($query_run)){ // <------- this is line 64 
     $leave_id = $record['leave_id']; 
     echo "<td>" . $record['type_of_leave'] . "</td>"; 
     echo "<td>" . $record['specific_reason'] . "</td>"; 
     echo "<td>" . $record['date_from'] . "</td>"; 
     echo "<td>" . $record['date_to'] . "</td>"; 
     echo "<td>" . $record['num_of_days'] . "</td>"; 
     echo "</tr>"; 
     $query = "UPDATE hrf_leave SET checked=1 WHERE leave_id = $leave_id"; 
     if($query_run = mysql_query($query)){ 
      $anotif = $anotif-1; 
      $query = "UPDATE hrf_leave SET approved_notif=$anotif WHERE empid = $empid"; 
      if($query_run = mysql_query($query)){ 
       echo 'Recently approved requests'; 
      } 
     } 
    } 
    echo "</table>"; 
} 
?> 
Disapproved:<?php if($dnotif<1){echo 0;} else { echo '<a href="?dnotif">'.$dnotif.'</a><br/>';} ?> 
<?php 
if(isset($_GET['dnotif'])) { 
    $query = "SELECT * FROM hrf_leave WHERE empid = '$empid' AND formStatus = 2 AND checked=0"; 
    $query_run = mysql_query($query); 
    echo "<table border=1> 
    <tr> 
    <th>Type of Leave</th> 
    <th>Specific Reason</th> 
    <th>Date From</th> 
    <th>Date To</th> 
    <th>Number of Days</th> 
    </tr>"; 
    echo "<tr>"; 
    while($record = mysql_fetch_array($query_run)){ 
     $leave_id = $record['leave_id']; 
     echo "<td>" . $record['type_of_leave'] . "</td>"; 
     echo "<td>" . $record['specific_reason'] . "</td>"; 
     echo "<td>" . $record['date_from'] . "</td>"; 
     echo "<td>" . $record['date_to'] . "</td>"; 
     echo "<td>" . $record['num_of_days'] . "</td>"; 
     echo "</tr>"; 
     $query = "UPDATE hrf_leave SET checked=1 WHERE leave_id = $leave_id"; 
     if($query_run = mysql_query($query)){ 
      $dnotif = $dnotif-1; 
      $query = "UPDATE hrf_leave SET disapproved_notif=$dnotif WHERE empid = $empid"; 
      if($query_run = mysql_query($query)){ 
       echo 'Recently disapproved requests'; 
      } 
     } 
    } 
    echo "</table>"; 
} 
?> 

反正,我一直在试图输出的请假单卫生组织检查字段值= 0。一旦看出,系统将其设置为1。一旦链接被点击,所有批准和未批准的通知值都将等于零。

这是我的迷你通知系统。但我不能得到它,因为这个错误的工作..:/

+0

可能重复的[mysql \ _fetch \ _array()期望参数1是资源,布尔给出在选择](http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects-parameter-1资源布尔给定选择) – igorw 2013-02-21 11:47:47

+0

可能是没有返回。 – 2013-02-21 11:51:21

+0

@MartyWallace'register_globals'也许? : -/ – 2013-02-21 11:51:43

回答

5

在代码的followind块,变量$query_run,由产生该警告的代码行中,被覆盖:

$query = "UPDATE hrf_leave SET checked=1 WHERE leave_id = $leave_id"; 
    if($query_run = mysql_query($query)){ 
     $anotif = $anotif-1; 
     $query = "UPDATE hrf_leave SET approved_notif=$anotif WHERE empid = $empid"; 
     if($query_run = mysql_query($query)){ 
      echo 'Recently approved requests'; 
     } 
    } 

使用另一个变量名,因为$query_run已经由主要mysql_fetch_array通话

+0

哦,让我试试! – Tissue 2013-02-21 11:59:19

+0

不错的观察!它像一个魅力。以不同的方式重命名嵌套的query_runs。:) 谢谢! – Tissue 2013-02-21 12:02:21

+0

这是很好的一个。为它+1 – 2013-02-21 12:06:52

0
$query = "SELECT * FROM hrf_leave WHERE empid = '".$empid."' AND formStatus = 1 AND checked = 0"; 
echo $query; 

然后运行在你的phpmyadmin这个查询,你可以看到错误纠正。

您的查询很容易被sql注入。

+0

我应该如何使它无懈可击?我以为mysql命令是贬值的,所以我把它们删除了。 – Tissue 2013-02-21 11:53:35

+1

使用mysqli_ *函数或PDO,至少在你的情况下使用'mysql_real_escape_string' – 2013-02-21 11:55:56

+0

你好,让我把这些命令放回去。我以为他们真的贬值了。 这就是我得到的:你的SQL语法有错误;检查对应于你的MySQL服务器版本使用附近的正确语法手册“$查询=“SELECT * FROM hrf_leave WHERE EMPID =””。$ EMPID。​​第1行“'AND formStatus = 1‘ 这并未’ t真的告诉我任何具体的东西,真的有必要用phpmyadmin中的一个不存在的变量进行查询吗?请解释一下。我在web开发中有点新鲜感 – Tissue 2013-02-21 11:57:45

相关问题