SQL - izpis
2 naročnika
2 naročnika
Tole kodo spodaj naložim pred headerjem (verjetno nima veze), zdaj me pa zanima, kako bi v samem contentu izpisal tole vrstico, kjer ima zapis vrednost $verify, ki jo podam v url-ju.
SELECT vem kako narediti, ampak sintakse ne "zadanem"..
Poskusil sem <?php echo SELECT field1,field2,field3 FROM wpposts WHERE postcontent = '$verify'"; ?>
Hvala za pomoč.
Tole naložim pred headerjem:
<?php
$mysqli = new mysqli("host", "user", "pass", "xxx");
$verify = $mysqli->realescapestring($_GET['verify']); // escape GET var
$query = "SELECT * FROM wpposts WHERE postcontent = '$verify'"; // Build query
if ($result = $mysqli->query($query)) { // Check return query
while ($row = $result->fetch_assoc()) { // Fetch Row
$query = "UPDATE wp_posts SET post_status = 'publish' WHERE post_content = '$verify'"; // Update query
$mysqli->query($query); // Run
}
$result->close(); // free result set
}
?>
mogoče tale vrstica nagaja: $result->close(); // free result set ?
4 odgovori
Glede na to, da maš WP, bi za začetek raje uporabil WP classe za ta job:
https://codex.wordpress.org/Class_Reference/wpdb
Drugače pa izpiši si zgeneriran sql stavek z verify kodo in jo prilepi v phpmyadmin. Tam ti bo izpisalo, če je napaka kje v queryu.
Še eno vprašanje. Kako pa je to iz varnostnega vidika?
Trenutno je takole, uporabnik odda formo (Contact form 7), na mejl dobi link (koda v prvem postu) in ko ga klikne, se postu spremeni status iz pending v published.
Je možno, da preko forme nekdo vnese kakšno kodo, ki bi npr. pobrisala bazo wordpress-a? Če ja, kaj bi bil najboljši način, da se to prepreči? Stripslashes? Hvala
Paziti moraš na spremenljivke, ki jih dobiš od uporabnika in se uporabljajo za buildanje querya. V prvem postu si se pravilno lotil (realescapestring), v primeru, da uporabljaš WP classe lahko uporabiš metodo prepare:
https://codex.wordpress.org/ClassReference/wpdb#ProtectQueriesAgainstSQLInjectionAttacks
https://codex.wordpress.org/ClassReference/wpdb#RunAnyQueryontheDatabase
Dodatno se lahko zavaruješ še tako, da preveriš tipe vseh podanih spremenljivk. Recimo, da je tvoj "verify" vedno 6 mestno celo število. V tem primeru vedno preverjaš, če je to res.
Predvidi čim več in nikoli ne zaupaj uporabniku (: