De ce dai quote doar la o parte?
De ce as da quote la tot?
De acolo poate sa vina problema, in $_POST nu intra doar ce intentionezi tu, intra si ce intentioneaza un hacker.
daca te-ai uita inainte de acel $_POST, este un type casting la int
Eu nu de acolo am dat quote, ci de mai sus. Dar se pare ca am dat reply la cine nu trebuie
Lamurit? Din raspuns se putea vedea ca nu e pentru tine de fapt, ci pentru Ekors.
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
exit(); //sau echo "mesaj"
}
if(!isset($_POST["sad"])){
echo "post not net"; // sau exit();
}
//pe astea ar trebui sa le tii in alta parte, nu in cod. fisier de config poate
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
$sql = "UPDATE indexano SET Views=Views+1 WHERE ID=?" //paramtru. il primesti prin post
$pdo->prepare($sql)->execute([$id]); //id-ul tau
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
Nu am mai pus mana pe php de ceva timp
Sper sa te ajute. Trebuie sa adaptezi la ce ai tu. Posibil sa fie erori de sintaxa.
Exista si solutii mai bune, dar pentru moment keep it simple.
Tine minte
Pe net lumea este rea
In general, never trust user input!
curl -sk -d "sad=123' OR ID >'1" http://my.server.com/update_value.php
Spor!
Observatiile sunt binevenite.
Nu prea vreau sa folosesc PDO pentru un proiect asa mic, dar multumesc tuturor.
O intrebare ar fi daca trebuie sa folosesc mysqli_close dupa fiecare mysqli_connect sau dupa fiecare: require_once 'config.php';
. In caz ca nu folosesc e posibil sa ramana active conectarile si sa apara lagul/procesarea grea?
Poti sa folosesti ce vrei. In raspunsul meu este link si pt mysqli. Fisierul de config.php tine doar detaliile de conectare.
Daca acea conexiune sta deschisa prea mult, va fi inchisa automat.
Nu cred ca o sa ai probleme in cazul tau.
De ce nu? N-am idee de PHP, dar pare cod destul de simplu ce a postat @Cosmin_Popescu. Și că sa nu trebuiască să te gândești la toate posibilitățile de sql injection, bad input etc. zic că merită.
In general, pentru proiectele mici și tipice sunt bune framework-uri.
Hm… deci sa inteleg ca PDO si framework-urile de acest gen au protectia SQL Injection incorporata?
Sau este intradevar incorporata dar in anumite cazuri sunt necesare si actiuni din partea mea, a developer-ului pentru a preveni asta.
Da, cu steluță.
De la StackOverflow citire --> https://stackoverflow.com/q/134099/5910563
Trucul pe care îl bagă @Cosmin_Popescu cu utf8mb4
de asta e.
In orice caz, e o chestie super tricky de făcut. Nu e ceva ce poți emula cu 1-2.
Nu e vorba de PDO, ci de faptul că se folosesc aşa-numitele prepared statements. Tehnica asta de transmitere a argumentelor interogării elimină în totalitate posibilitatea de a injecta cod SQL. Si mysqli are prepared statements: https://www.php.net/manual/en/mysqli.prepare.php (de fapt asta este o capabilitate a serverului de baze de date, nu a clientului).