2016-04-04 119 views
-3

當我點擊搜索按鈕時沒有在文本框中輸入任何文本,它給了我「警告:mysqli_fetch_assoc()期望參數1爲mysqli_result,字符串給出」this error ,我怎麼能弄清楚這個問題,這裏是我的代碼的任何幫助將不勝感激警告:mysqli_fetch_assoc()期望參數1是mysqli_result,給出的字符串

<?php 
$title ="Manage Page"; 
include "includes/home_page_header.php"; 
?> 
<?php 
$error_array = array(); 
$count =1; 
$firstName = $lastName = $email = $status =$res_users = $checkbox =""; 

if(isset($_POST['Search'])) 
{ 
    $firstName = $_POST['firstName']; 
    $lastName = $_POST['lastName']; 
    $email  = $_POST['email']; 
    $status = $_POST['status'];  


if($firstName !="") 
{ 
    $sql_users ="SELECT * FROM `users` WHERE `firstName` LIKE '$firstName'"; 
} 
else if($lastName !="") 
{ 
    $sql_users ="SELECT * FROM `users` WHERE `lastName` LIKE '$lastName'"; 
} 
else if($email !="") 
{ 
    $sql_users ="SELECT * FROM `users` WHERE `email` LIKE '$email'"; 
} 
else if($firstName !="" && $lastName !="") 
{ 
    $sql_users ="SELECT * FROM `users` WHERE `firstName` LIKE '$firstName' AND `lastName` LIKE '$lastName'"; 
} 
else 
{ 
    $sql_users = "SELECT * FROM `users`"; 
} 

if(isset($_GET['user_id'])) 
{ 
    $user_id = $_GET['user_id']; 

    $sql_users = "DELETE from `users` WHERE user_id=".$user_id; 

if ($link->query($sql_users) == TRUE) 
{ 
    $error ="Record deleted successfully"; 
    array_push($error_array,$error); 
} 
if ($link->query($sql_users) == FALSE) 
{ 
    $error = "Your Abort Delete operation"; 
    array_push($error_array,$error); 
} 
} 

if($status == "Active") 
{ 
    $sql_users= "SELECT * FROM `users` WHERE `status` LIKE 'Active'"; 
    $res_users = mysqli_query($link,$sql_users); 

    if($res_users && mysqli_num_rows($res_users) > 0) 
    {   
     while($log_row_users = mysqli_fetch_assoc($res_users))        
     { 
      $status = $log_row_users["status"];     
     } 
    } 
} 
if($status == "Inactive") 
{ 
    $sql_users= "SELECT * FROM `users` WHERE `status` LIKE 'Inactive'"; 
    $res_users = mysqli_query($link,$sql_users); 

    if($res_users && mysqli_num_rows($res_users) > 0) 
    {   
     while($log_row_users = mysqli_fetch_assoc($res_users))        
     { 
      $status = $log_row_users["status"];   
     } 
    } 
} 
$res_users = mysqli_query($link ,$sql_users); 


} 
if(isset($_POST['delete_all'])) 
{ 

} 

?> 
<script> 
$(document).ready(function() 
{ 
    $(".delete_button").on('click',function() 
    { 
     var result =confirm("Are you sure you want to delete ?"); 
     if(result) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    }); 
}); 
//function wantTodelete(user_id) 
//{ 
// return confirm("Are you sure you want to delete ?"); 
//} 


$(document).ready(function() 
{ 
    $("#checkAll").change(function() { 
    $("input:checkbox").prop('checked', $(this).prop("checked")); 
}); 
}); 

</script> 
<table border="1px" class="manage_table"> 
<form name="listingForm" action="" method="post"> 
<tr> 
<?php 
if($error_array !=0) 
{ 
    foreach($error_array as $value) 
    { 
     echo "<tr style='color:green;'><td></td><td> ". $value. "</td></tr>"; 
    } 
} 
?> 
</tr> 
<tr> 
<td></td> 
<td><input type="text" name="firstName"></td> 
<td><input type="text" name="lastName"></td> 
<td><input type="text" name="email"></td> 
<td> 
<select name="status"> 
<option>Select Status </option> 
<option value="Active" <?php echo $status;?>>Active  </option> 
<option value="Inactive" <?php echo $status;?>>Inactive </option> 
</select> 
</td> 
<td><input style="width:135px" type="submit" name="Search" value="Search"></td> 
<td><input type="submit" id="delete_all" name="delete_all" value="Delete All" onclick="return deleteAll();" /></td> 
</tr> 
<tr> 
<th>Sr.No</th> 
<th>First Name</th> 
<th>Last Name</th> 
<th>Email</th> 
<th>Status</th> 
<th>Action</th> 
<th><input type="checkbox" id="checkAll" name="check_all[]"/></th> 
</tr> 
<?php      
if($log_row_users = mysqli_fetch_assoc($res_users))        
{    
    $user_id  = $log_row_users['user_id']; 
    $firstName = $log_row_users['firstName']; 
    $lastName  = $log_row_users['lastName']; 
    $email  = $log_row_users['email']; 
    $status  = $log_row_users['status']; 

?> 
<tr> 
<td><?php echo $count++ ;?></td> 
<td><?php echo $firstName;?></td> 
<td><?php echo $lastName ;?></td> 
<td><?php echo $email ;?></td> 
<td> 
<?php 
if($status == "Active") 
{ 
    echo "<b style='color:#3CF'>".$status."</b>"; 
} 
if($status == "Inactive") 
{ 
    echo "<b style='color:#F00'>".$status."</b>"; 
}; 
?> 
</td> 
<td> 
<a style="margin-left:25px" href="http://localhost/sample/home_page_edit.php?user_id=<?php echo $user_id;?>" onclick="redirectMe();" name="redirect" id="redirect"><img src="images/pencil.png" /></a> 


<a style="margin-left:35px" href="http://localhost/sample/home_page_manage.php?user_id=<?php echo $user_id;?>" name="delete_button" class="delete_button" ><img src="images/delete.png" /></a> 
</td> 
<th> 
<input name="checkbox[]" type="checkbox" id="checkbox[]" class="checkbox"> 
</th> 
</tr> 
</form> 
<?php 
} 
?> 
</table> 
<?php 
include "includes/home_page_footer.php"; 
?> 
+0

它應該是'$結果= mysqli_query($的SQL); while($ row = mysqli_fetch_array($ result)):[...] endwhile;',但是,也許你的查詢返回一個空的結果,所以它導致錯誤?在提取它們之前檢查你的結果是不是null。請注意,你有很多注入點,搜索如何防止SQLi注入。對於速度查詢,你可以這樣做:'foreach($ db-> query($ sql)as $ row):[...] endforeach;' – KDOT

回答

1

在腳本的開始你初始化$res_users使用空字符串("")。

如果沒有設置$_POST['Search'],你永遠不執行$res_users = mysqli_query(...);,所以$res_users仍然是一個空字符串,當你調用

if($log_row_users = mysqli_fetch_assoc($res_users)) 

我建議你一定要規範你的代碼執行有關HTML輸出之前查詢的所有操作。否則,你可以重複$_POST檢查:

if(isset($_POST['Search']) && $log_row_users = mysqli_fetch_assoc($res_users)) 
1

以更加面向對象的方法快速查詢:

[...] 
    $sql_users= "SELECT * FROM `users` WHERE `status` LIKE 'Inactive'"; 
    foreach($link->query($sql_users) as $row) 
    { 
     $status = $row["status"];  
    } 
[...] 

您也可以使用它作爲一個布爾值來檢查查詢跑:

[...] 
    if($db->query($sql)): [...] endif; 
[...] 

我還建議你在循環數據前檢查你的結果是否爲空:

[...] 
    $result = mysqli_query($link, $sql); 
    if($result != null): [...] endif; 
[...] 

另外,看看@ fusion3k的答案。您的基礎設施造成了您的限制。您需要重新評估如何處理此問題,並檢查how to prevent SQLi injections

編輯:您可以使用面向對象的方法(OOP)更簡單地管理數據流。

class Handler 
{ 
    public function __construct($args) 
    { 
     if(is_array($args)) 
     { 
      switch($args['type']) 
      { 
       case "Insert": 
        break; 
       default: 
        break; 
      } 
     [...] 

然後使用它像這樣:

new Handler(array(
    'type' => $_POST[...] 
    [...] => [...] 
)); 
4

試試這個它會幫助你

if(isset($_REQUEST['Search'])) 
    { 
     $q = "SELECT * FROM users WHERE user_id!='' "; 

     $firstName = $_REQUEST['firstName']; 
     $lastName = $_REQUEST['lastName']; 
     $email  = $_REQUEST['email']; 
     $status  = $_REQUEST['status']; 

     $temp=''; 
     if(!empty($firstName)) 
     { 
      $temp.=" AND "; 
      $temp.="firstName LIKE '%$firstName%'"; 
     } 

     if(!empty($lastName)) 
     { 
      $temp.=" AND "; 
      $temp.="lastName LIKE '%$lastName%'"; 
     } 

     if(!empty($email)) 
     { 
      $temp.=" AND "; 
      $temp.="email LIKE '%$email%'"; 
     } 

     if(!empty($status)) 
     { 
      $temp.=" AND "; 
      $temp.="status LIKE '$status'"; 
     } 

     $qry = $q. $temp. " order by user_id ASC"; 
    } 
    else 
    { 
     $qry = "SELECT * FROM users order by user_id DESC"; 
    } 
相關問題