Cum să ștergi un rând specific dintr-un tabel de bază de date

26 sept. 2017, 14:37:16
Vizualizări: 15.1K
Voturi: 0

Aici am creat o pagină de profil personalizată bazată pe utilizatorul autentificat pentru a verifica doar datele introduse de acesta într-o bază de date personalizată.

Poți observa că pentru fiecare rând am adăugat un buton "Șterge" fără codul corespunzător.

Totul funcționează bine, cu excepția părții în care vreau să adaug o funcție pentru ștergerea înregistrării. Probabil $wpdb->delete() îmi va rezolva problema.

Acesta este codul meu:

if ( is_user_logged_in() ) {
    global $wpdb;
    $current_user = wp_get_current_user();
    $username = $current_user->user_login;
    $reservations = $wpdb->get_results($wpdb->prepare("SELECT * FROM 
    SaveContactForm7_1 WHERE user = %s", $username));


    echo "<div align='center'>";
    echo "<table class='responsive-table'>";
    echo "<caption>Lista rezervărilor</caption>";
    echo "<thead>";
    echo "<tr>";
    echo "<th scope='col'>Nume</th>";
    echo "<th scope='col'>ID</th>";
    echo "<th scope='col'>Calitate</th>";
    echo "<th scope='col'>Sosire</th>";
    echo "<th scope='col'>Nr Vol</th>";
    echo "<th scope='col'>Ora Aterizare</th>";
    echo "<th scope='col'>Proveniență</th>";
    echo "<th scope='col'>Plecare</th>";
    echo "<th scope='col'>Nr Vol</th>";
    echo "<th scope='col'>Ora Decolare</th>";
    echo "<th scope='col'>Destinație</th>";
    echo "<th scope='col'>Hotel</th>";
    echo "<th scope='col'>Cameră</th>";
    echo "<th scope='col'>Total</th>";
    echo "<th scope='col'>Modifică</th>";
    echo "<th scope='col'>Șterge</th>";
    echo "</tr>";
    echo "</thead>";
    foreach($reservations as $reservation){
    echo "<tbody>";
    echo "<tr>";
    echo "<th  scope='row'>".$reservation->nom."</th>";
    echo "<td data-title='ID'>".$reservation->user."</td>";
    echo "<td data-title='Calitate'>".$reservation->qualite."</td>";
    echo "<td data-title='Sosire'>".$reservation->datearrivee."</td>";
    echo "<td data-title='Nr Vol'>".$reservation->num_vol_arrivee."</td>";
    echo "<td data-title='Aterizare'>".$reservation->heure_atterrissage."
    </td>";
    echo "<td data-title='Proveniență'>".$reservation->provenance."</td>";
    echo "<td data-title='Plecare'>".$reservation->datedepart."</td>";
    echo "<td data-title='Nr VOL'>".$reservation->num_vol_depart."</td>";
    echo "<td data-title='Decolare'>".$reservation->heure_decollage."
    </td>";
    echo "<td data-title='Destinație'>".$reservation->destination."
    </td>";
    echo "<td data-title='Opțiune'>".$reservation->choix."</td>";
    echo "<td data-title='Cameră'>".$reservation->typech."</td>";
    echo "<td data-title='Preț Total' data-type='currency'>".$reservation-
    >calculated_choix."</td>";

Și aici partea cu "Șterge":

echo "<td align='center'>
    <a href='?delete_id=".$reservation->id."' onclick='return confirm(\"Sigur doriți să ștergeți această înregistrare?\")'>
    <img class='icon' width='16' height='16' src='../remove-icon.png' alt='Șterge înregistrare' title='Șterge'></a>
    </td>";
echo "</tr>";
echo "</tbody>";
}
echo "</table>";
echo "</div>";

// Adăugăm logica de ștergere
if(isset($_GET['delete_id'])) {
    $wpdb->delete('SaveContactForm7_1', array('id' => $_GET['delete_id']));
    echo "<script>window.location.href=window.location.pathname;</script>";
}
}
2
Comentarii

Întrebi cum să ștergi un rând folosind MySQL?

kero kero
26 sept. 2017 15:13:33

Partea de ștergere nu este finalul lucrării, este nevoie să o faci să funcționeze. Poți alege să faci acest lucru printr-o cerere Ajax pentru a notifica serverul despre o acțiune și a efectua orice acțiune dorești. O altă abordare ar fi să trimiți o cerere de submit pentru a efectua ștergerea și a reîncărca formularul. Ambele metode au plusuri și minusuri.

Drupalizeme Drupalizeme
26 sept. 2017 15:43:47
Toate răspunsurile la întrebare 2
1

Da, poți folosi wpdb pentru a șterge înregistrarea din tabela personalizată. Iată un exemplu de funcție în WordPress:

require_once ('../../../../wp-load.php');

if (!empty($_POST['id'])) {

  global $wpdb;

  $table='nume_tabel';
  $id = $_POST['id'];
  $wpdb->delete( $table, array( 'id' => $id ) );

}
26 sept. 2017 19:42:45
Comentarii

Aceasta funcționează cu unele modificări

Ramy Mâaouia Ramy Mâaouia
3 oct. 2017 23:03:21
0
  • partea client -> utilizatorul apasă butonul/linkul de ștergere

  • AJAX -> trimite această acțiune de la partea client către partea server pentru a executa funcția PHP care șterge rândul corespunzător din baza de date

  • partea server -> funcție pentru ștergerea rândului din baza de date $wpdb->delete()

  • succes AJAX -> ascunde acest rând din pagina client și actualizează doar această parte a paginii

verifică acest link

26 sept. 2017 19:07:56