简体   繁体   English

PDO,无法删除所选记录

[英]PDO, can't delete the selected record

i'm having a problem when i try to delete the record which i select in my menu page, after i click delete,the header shows me that the record has been deleted, as well it shows me the message=deleted , but i realize that the record still appear in my menu page, and i also checked the phpmyadmin and it also still exists, i think i'm not reach the selected record in the delete page, here's my code so far : delete.php 当我尝试删除在菜单页面中选择的记录时出现问题,单击删除后,标题显示记录已被删除,并且显示message = deleted,但我意识到该记录仍出现在我的菜单页面中,并且我还检查了phpmyadmin并且它仍然存在,我认为我没有到达删除页面中的选定记录,这是到目前为止的代码:delete.php

    <?php
    include('koneksi.php');
    $page_number = $_GET['page'];
   <?php
include('koneksi.php');
$page_number = $_GET['page'];
                  $dbdit = new PDO('mysql:host=localhost;dbname=laundry','root','');
                  $results = $dbdit->prepare("SELECT COUNT(*) FROM konsumen");
                  $results->execute();
                  $get_total_rows = $results->fetch();
                  $results = $dbdit->prepare("DELETE FROM konsumen ORDER BY kode_pemesanan ASC LIMIT :page_number");
                  $results->bindValue(':page_number',$page_number);
                  $results->execute();
                  if($results){
                      header('location:menu.php?message=deleted&&?page=1');
                  }

menu.php menu.php

if($typeuser == 'admin'){   
                        $item_per_page = 1;
                        $dbcon = new PDO('mysql:host=localhost;dbname=laundry','root','');
                        $results = $dbcon->prepare("SELECT COUNT(*) FROM konsumen");
                        $results->execute();
                        $get_total_rows = $results->fetch();

                        //breaking total records into pages
                        $pages = ceil($get_total_rows[0]/$item_per_page);

                        if(isset($_GET["page"])){
                        $page_number = filter_var($_GET["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH);

                             if(!is_numeric($page_number)){die('Invalid page number!<a href="?page=1"> Back! </a>');} //incase of invalid page number
                        }else{
                         $page_number = 1;
                        }

                        $position = (($page_number-1) * $item_per_page);

                        $results = $dbcon->prepare("SELECT * FROM konsumen ORDER BY kode_pemesanan ASC LIMIT $position, $item_per_page");
                        $results->execute();
                        while($row = $results->fetch()){
                             print_r ("<table>
                                 <tr>
                                 <td>Kode Pemesanan</td><td>:</td><td>".$row['kode_pemesanan']."</td></tr>
                                 <tr><td>Atas Nama</td><td>:</td><td>".$row['atas_nama']."</td></tr>
                                 <tr><td>Jumlah Baju</td><td>:</td><td>".$row['jmlhbaju']."</td></tr>
                                 <tr><td>Jumlah Celana</td><td>:</td><td>".$row['jmlhcelana']."</td></tr>
                                 <tr><td>Jumlah Jaket</td><td>:</td><td>".$row['jmlhjaket']."</td></tr>
                                 <tr><td>Jumlah Jas</td><td>:</td><td>".$row['jmlhjas']."</td></tr>
                                 <tr><td>Jumlah Dress</td><td>:</td><td>".$row['jmlhdress']."</td></tr>
                                 <tr><td>Pengurus Pesanan</td><td>:</td><td>".$row['penguruspesanan']."</td></tr>
                                 <tr><td>Status Pesanan</td><td>:</td><td>".$row['statuspesanan']."</td></tr>
                                 <tr><td>Total Pesanan</td><td>:</td><td>".$row['totalpesanan']."</td>
                                 </tr></table>
                                 <br>
                                 ");    
                        }
                        $min = 1;
                        if(isset($_GET["page"]) && $_GET["page"] > $min ){
                      $previous = $page_number - 1;
                      echo "<a href='?page=$previous'>&larr;Previous</a>&nbsp;&nbsp;";
                    } else echo "<a href='?page=1'>&larr;Previous</a>&nbsp;&nbsp;";

                    echo "<a href='edit.php?page=$page_number'>Edit</a>&nbsp;&nbsp;";
                    echo "<a href='delete.php?page=$page_number'>Delete</a>&nbsp;&nbsp;";

                                            if(isset($_GET["page"]) && $_GET["page"] < $pages ){
                      $next = $page_number + 1;
                      echo "<a href='?page=$next'>Next&rarr;</a>";
                    } else echo "<a href='?page=$pages'>Next&rarr;</a>";
                                        }



                }

There are many issues with this but the main one is that the query you're trying to run makes no sense at all: 这样做有很多问题,但主要的问题是您尝试运行的查询根本没有意义:

DELETE FROM konsumen ORDER BY kode_pemesanan ASC LIMIT :page_number

Not only are you not specifying a record to delete but your DELETE query looks more like a SELECT query with the ORDER BY and LIMIT . 您不仅没有指定要删除的记录,而且DELETE查询看起来更像是带有ORDER BYLIMITSELECT查询。

Your echo "<a href='delete.php?page=$page_number'>Delete</a>&nbsp;&nbsp;"; 您的echo "<a href='delete.php?page=$page_number'>Delete</a>&nbsp;&nbsp;"; link would need to be inside the fetch loop and use the key, not the page number: 链接需要位于fetch循环内并使用密钥,而不是页码:

echo "<a href='delete.php?key={$row['kode_pemesanan']}'>Delete</a>&nbsp;&nbsp;";

And of course you'd need to correct the delete.php to use that key. 当然,您需要更正delete.php才能使用该密钥。

Instead of $page_number = $_GET['page']; 代替$page_number = $_GET['page']; , you could put $key = $_GET['key']; ,您可以将$key = $_GET['key']; , ideally do basic validation and then correct your PDO querying: ,最好进行基本验证,然后更正您的PDO查询:

$results = $dbdit->prepare("DELETE FROM konsumen WHERE kode_pemesanan = :kode_pemesanan");
$results->bindValue(':kode_pemesanan', $key, PDO::PARAM_INT);

if($results->execute()){
    header('location:menu.php?message=deleted&&?page=1');
}
else { // you can do better than this but it's just to show how to properly deal with returned values
    die('error in delete query');
}

There may be other issues but I can't test this on your site to find them. 可能还有其他问题,但是我无法在您的网站上对此进行测试才能找到它们。

Try calling $results->execute(); 尝试调用$results->execute(); again after PREPARING your delete query statement. PREPARING delete查询语句后再次输入。

$results = $dbdit->prepare("DELETE FROM konsumen ORDER BY kode_pemesanan ASC LIMIT :page_number");
$results->bindValue(':page_number',$page_number);
$results->execute();
if($results){
    header('location:menu.php?message=deleted&&?page=1');
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM