Ștergerea datelor dintr-o tabelă personalizată în WordPress

20 iun. 2015, 10:11:05
Vizualizări: 32K
Voturi: 1

Încerc să șterg înregistrări din tabela mea personalizată dar nu se șterge nimic.

Iată codul meu:

<?php
global $wpdb;
$retrieve_data = $wpdb->get_results( "SELECT * FROM wp_paypal" );

// cod pentru afișare aici...

?>
<form method="post" enctype="multipart/form-data">
   <td><input type="submit"  name="delete" value="Delete"  /></td>
</form>
<?php
$myid= $retrieved_data->id;

if (isset($_POST['delete'])) {
        //global $wpdb;
        $wpdb->query(
              'DELETE  FROM $wpdb->paypal
               WHERE id = "'.$myid.'"
              '
        );

    }
}
1
Comentarii

Cu ce problemă te confrunți?

sakibmoon sakibmoon
20 iun. 2015 10:51:54
Toate răspunsurile la întrebare 2
0

Încearcă să folosești $wpdb->prefix în loc de $wpdb în interogările DELETE.

Exemplu:

 $wpdb->query(
              'DELETE  FROM '.$wpdb->prefix.'paypal
               WHERE id = "'.$myid.'"'
);
20 iun. 2015 14:47:08
0

Știu că întârzii... dar principala problemă din întrebarea ta este că folosești ghilimele simple (') în declarația ta:

$wpdb->query(
      'DELETE  FROM $wpdb->paypal
       WHERE id = "'.$myid.'"
      '
);

Asta înseamnă că $wpdb->paypal nu produce rezultatul pe care îl așteptai. Mai întâi, presupui că acesta afișează numele tabelei "paypal". Dar nu este așa.

Dacă $myid are valoarea 4, codul tău PHP va produce această declarație SQL:

DELETE FROM $wpdb->paypal WHERE id = 4

... în loc să fie:

DELETE FROM wp_paypal WHERE id = 4

Pentru a remedia problema, trebuie să:

  1. Schimbi ghilimelele simple în ghilimele duble. (Citește de ce)
  2. Adaugi prefixul tabelei în fața numelui tabelei.

În felul următor:

$table_name = $wpdb->prefix . 'paypal';
$wpdb->query( "DELETE  FROM {$table_name} WHERE id = '{$myid}'" );

De asemenea, asigură-te că sanitizezi variabila $myid deoarece dacă trimit valoarea 0 OR 1=1, aceasta va produce următoarea declarație SQL:

DELETE FROM wp_paypal WHERE id = 0 OR 1=1

... și va șterge toate rândurile din tabelă

30 nov. 2018 15:18:26