Ș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.'"
'
);
}
}

user3463054
31
Comentarii
Toate răspunsurile la întrebare
2
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ă:
- Schimbi ghilimelele simple în ghilimele duble. (Citește de ce)
- 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ă

Maxime
133
30 nov. 2018 15:18:26
Întrebări similare
1
răspunsuri