8768 sujets

Développement web côté serveur, CMS

Bonjour,

Ma requête simple en dpo fonctionne, pour sécuriser le code je veux faire une requête préparé

Voici mon code :

<?php

$l = (isset($_POST['l']) ? $_POST['l'] : ""); 

$connexion = new PDO('mysql:host='.$VALEUR_hote.';port='.$VALEUR_port.';dbname='.$VALEUR_nom_bd, $VALEUR_user, $VALEUR_mot_de_passe);
$connexion->exec("SET CHARACTER SET utf8"); 


$statement = $connexion->prepare('SELECT l FROM Articles WHERE l = ?');
$statement->execute(array($_POST['l']));

$statement->closeCursor();

?>


Il faut que j'arrive à récupérer le résultat sous forme de $data['l'];

Je pige pas ou ça bloque.

Merci de vos lumières.
Modifié par Tintin75 (25 Jan 2016 - 10:18)
Modérateur
Bonjour,

Après ton $statement->execute(...), tu rajoutes :

while ($data=$statement->fetch())
{
    print $data['l']; // ou tout autre traitement approprié
}


Ceci étant, il me semble qu'ici, $data['l'] vaudra la même chose que $_POST['l'].

EDIT : et dans ton $statement->execute(...), il vaut mieux utiliser $l que $_POST['l'], puisque tu as pris la peine de faire un test d'existence.

Amicalement,
Modifié par parsimonhi (25 Jan 2016 - 10:31)
slt, t'a pas oublier de fetchAll ?
$stmt = $db->prepare("SELECT * FROM table WHERE id=? AND name=?");
$stmt->execute(array($id, $name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);


après tu as une deuxième possibilité :

$stmt = $db->prepare("SELECT * FROM table WHERE id=:id AND name=:name");
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

Modifié par JENCAL (25 Jan 2016 - 10:32)
La valeur interrogé s'affiche bien.

$l = (isset($_POST['l']) ? $_POST['l'] : ""); 

$connexion = new PDO('mysql:host='.$VALEUR_hote.';port='.$VALEUR_port.';dbname='.$VALEUR_nom_bd, $VALEUR_user, $VALEUR_mot_de_passe);
$connexion->exec("SET CHARACTER SET utf8"); 

$statement = $connexion->prepare('SELECT * FROM Articles WHERE l = ?');
$statement->execute(array($_POST['l']));

while ($data=$statement->fetch())
{
    echo $data['l']; // ou tout autre traitement approprié
}


Je veux afficher $data['l'] plus bas dans ma page et ça fonctionne pas. 0 erreur
Modifié par Tintin75 (25 Jan 2016 - 10:51)
parsimonhi a écrit :


Ceci étant, il me semble qu'ici, $data['l'] vaudra la même chose que $_POST['l'].

EDIT : et dans ton $statement-&gt;execute(...), il vaut mieux utiliser $l que $_POST['l'], puisque tu as pris la peine de faire un test d'existence.



Merci
Modérateur
Bonjour,

Quand tu sors de ta boucle où il y a le fetch, $data est nulle (sinon on sortirait pas de la boucle).

Tu dois faire tes traitement sur $data dans la boucle du fetch, ou bien recopier les $data dans autre chose pour un traitement ultérieur (il y en a un différent $data à chaque tour dans la boucle, éventuellement qu'un seul s'il n'y a qu'une seule ligne dans ta base qui correspond, le tout suivi d'un dernier $data qui est forcément nul).

EDIT : si c'est pour une utilisation ultérieure, prends la solution de JENCAL avec le fetchAll() (tu n'auras alors pas à recopier les données dans autre chose).

Amicalement,
Modifié par parsimonhi (25 Jan 2016 - 11:23)
salut,
par contre il faut faire attention avec ta condition car si le $_POST est vide, la requête se fera sur des champs vides. Il serait donc peut être plus logique de n'exécuter ta requête que s'il y a une valeur correspondante dans $_POST.
J'ai trouvé la solution, le code fonctionne bien avec une requêtes préparé. Je commence à mieux comprendre les manips. Bref, j'avance doucement.

J'ai trouvé la solution grâce avec vos remarques et vos conseils.

Merci pour votre aide.
Modifié par Tintin75 (25 Jan 2016 - 14:21)