2017-04-23 58 views
0

在准备声明之前,当我通过ID搜索它正在工作,但添加准备声明后结果是:ID不存在!添加准备陈述结果破碎的代码

这是我的代码:

<form action="" method="post"> 
    <div class="col-lg-3"> 
     <label for=""><h4>Search by ID</h4></label> 
     <div class="input-group"> 
      <input name="search" type="number" class="form-control"> 
      <span class="input-group-btn"> 
       <button name="submit" class="btn btn-default" type="submit"> 
      <span class="glyphicon glyphicon-search"></span> 
      </button> 
      </span> 
     </div> 
<hr> 
    </div> 
    <div class="col-lg-12"> 
     <div class="table-responsive"> 
      <table class="table table-hover"> 
       <thead> 
        <tr> 
         <th>ID</th> 
         <th>Ime</th> 
         <th>Prezime</th> 
        </tr> 
       </thead> 
       <tbody> 
       </tbody> 

       <?php 

       if(isset($_POST['search'])) { 

       $search_id = $_POST['search']; 

       mysqli_set_charset($connection, "utf8"); 
       $stmt = mysqli_prepare($connection, "SELECT id, ime, prezime FROM anketa WHERE id = ? LIMIT 1"); 

       if(isset($stmt)) { 

        mysqli_stmt_bind_param($stmt, 'i', $search_id); 

        mysqli_stmt_bind_result($stmt, $ank_id, $ank_ime, $ank_prezime); 

        mysqli_stmt_execute($stmt); 

       } 

       if(!$stmt) { 
        die("QueryFailed" . mysqli_error($connection)); 
       } 

       if(mysqli_stmt_num_rows($stmt) > 0) { 

        while(mysqli_stmt_fetch($stmt)): 

          echo "<tr>"; 
          echo "<td>{$ank_id}</td>"; 
          echo "<td>{$ank_ime}</td>"; 
          echo "<td>{$ank_prezime}</td>";  
          echo "<td><a class='btn btn-info btn-xs' href='search.php?source=edit&edit={$ank_id}'><i class='fa fa-pencil-square-o'></i> Edit</a></td>"; 
          echo "<td><a class='btn btn-danger btn-xs' onClick=\"javascript: return confirm('Delete?'); \" href='search.php?delete={$ank_id}'><i class='fa fa-trash-o'></i> Delete</a></td>"; 

        endwhile; 

        } else { 

         echo "ID doesn't exist!"; 

        } 

       } 

       ?> 

      </table> 
     </div> 
    </div> 

<?php 

if(isset($_GET['delete'])) { 

$ank_id = $_GET['delete']; 

if(isset($_SESSION['user_role'])) { 

if($_SESSION['user_role'] == 'admin' || 'user_role'] == 'superadmin') { 

$the_anketa_id = mysqli_real_escape_string($connection, $_GET['delete']); 

$query = "DELETE FROM anketa WHERE id = {$ank_id} "; 
$delete_anketa = mysqli_query($connection, $query); 
header("Location: search.php"); 

} 

} 

} 

?> 

</form> 
</div> 

<?php 
if(isset($_GET['source'])) { 
$source = $_GET['source']; 
if($source = 'edit') { 
include "includes/edit.php"; 
} elseif($source = 'submit') { 
header("Location: search.php"); 
} 
} 
?> 

<?php 
} else { 
echo "<script>alert('No access!')</script>"; 
} 
?> 

我不知道问题是删除准备语句或代码,因为没有准备发言了吗?

+1

请阅读[如何创建最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。你有很多代码是没有必要的。 – Pharaoh

+0

对不起,我将来会这样做的。 – shone83

+0

如果您编辑您的问题并删除所有HTML内容(以及其他不重要的内容),那么您可以针对此问题获得更快更好的答案。 – Pharaoh

回答

0

这可能是因为mysqli_stmt_num_rows($ stmt)总是返回零。

PHP文件: http://php.net/manual/en/mysqli-stmt.num-rows.php

您可能需要先调用mysqli_stmt_store_result()之前,你可以得到函数返回正确的值。

+0

它不起作用。如果我理解你,我做到了这一点: if(isset($ stmt)){mysqli_stmt_bind_param($ stmt,'i',$ search_id); mysqli_stmt_bind_result($ stmt,$ ank_id,$ ank_ime,$ ank_prezime); mysqli_stmt_execute($ stmt); mysqli_stmt_store_result($ stmt); } 我尝试了许多与此功能的其他组合,但没有结果... – shone83