Souci pour passage de mysql vers le PDO
Résolu/Fermé
cretinator
Messages postés
67
Date d'inscription
samedi 26 janvier 2013
Statut
Membre
Dernière intervention
6 décembre 2014
-
19 févr. 2013 à 15:45
cretinator Messages postés 67 Date d'inscription samedi 26 janvier 2013 Statut Membre Dernière intervention 6 décembre 2014 - 22 févr. 2013 à 12:53
cretinator Messages postés 67 Date d'inscription samedi 26 janvier 2013 Statut Membre Dernière intervention 6 décembre 2014 - 22 févr. 2013 à 12:53
A voir également:
- Souci pour passage de mysql vers le PDO
- Passage qwerty azerty - Guide
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Mysql community server - Télécharger - Bases de données
- Dans le gestionnaire de fichiers ci-dessous, suivez ce chemin : ordinateur > photos > album > maison vers quel fichier mène-t-il ? ✓ - Forum Windows 10
- Transferer photo android vers pc - Guide
2 réponses
Utilisateur anonyme
21 févr. 2013 à 11:23
21 févr. 2013 à 11:23
Tu n'échappera pas à un peu de lecture sur PDO !!
La où PDO devient réellement intéressant c'est en utilisant les requêtes préparées -> protection contre les injections sql , et pour les requêtes qui doivent être exécutées plusieurs fois avec différentes valeurs de paramètres optimisent les performances de l'application.
Quitte à utiliser PDO autant tout bien faire d'un coup!
//Requete préparée ou pas, la connexion la création de l'objet PDO ne change pas
try {
// Création d'un objet PDO.
$dbh = new PDO('mysql:host=localhost;dbname=nombdd', 'root', 'password');
} catch (PDOException $e) {
die( "Erreur ! : " . $e->getMessage() );
}
//A partir de là $dbh est la variable de connexion
//On va utiliser les requêtes préparées :
//On ne met pas directement la variable de la condition
$requete="SELECT arg1 FROM table1 WHERE arg2=:variable";
//Prépare une requête SQL à être exécutée, un template de requête est envoyé au serveur (verification syntaxe et autre)
$res = $dbh->prepare($requete);
//Enfin on fait correspondre :variable avec la variable réelle instanciée
$res->bindParam(":variable",$variable,PDO::PARAM_STR);
//PDO::PARAM_STR fixe le type de la variable comme string (à déterminer selon besoin : PARAM_INT...)
//exécution
$res->execute();
//fetch(PDO::FETCH_ASSOC) fonctionne comme mysql_fetch_assoc()
while($row_req=$res->fetch(PDO::FETCH_ASSOC)){
...
}
//Fermer la connexion , libère des ressources
$res->close();
Vu les requêtes dans ton code j'ai essayé de te donner un exemple à peu près complet tu devrait pouvoir le réadapter à PDO.
Ce que j'ai écrit reste un exemple il existe d'autre syntaxe, on peut encore le travailler : exemple : créer un objet Connection est l'utiliser pour instancier la connexion à la BD :)
Essaie de regarder les différentes possibilités pour chaque ligne histoire de bien comprendre le fonctionnement à de voir les différentes options possibles !!
La où PDO devient réellement intéressant c'est en utilisant les requêtes préparées -> protection contre les injections sql , et pour les requêtes qui doivent être exécutées plusieurs fois avec différentes valeurs de paramètres optimisent les performances de l'application.
Quitte à utiliser PDO autant tout bien faire d'un coup!
//Requete préparée ou pas, la connexion la création de l'objet PDO ne change pas
try {
// Création d'un objet PDO.
$dbh = new PDO('mysql:host=localhost;dbname=nombdd', 'root', 'password');
} catch (PDOException $e) {
die( "Erreur ! : " . $e->getMessage() );
}
//A partir de là $dbh est la variable de connexion
//On va utiliser les requêtes préparées :
//On ne met pas directement la variable de la condition
$requete="SELECT arg1 FROM table1 WHERE arg2=:variable";
//Prépare une requête SQL à être exécutée, un template de requête est envoyé au serveur (verification syntaxe et autre)
$res = $dbh->prepare($requete);
//Enfin on fait correspondre :variable avec la variable réelle instanciée
$res->bindParam(":variable",$variable,PDO::PARAM_STR);
//PDO::PARAM_STR fixe le type de la variable comme string (à déterminer selon besoin : PARAM_INT...)
//exécution
$res->execute();
//fetch(PDO::FETCH_ASSOC) fonctionne comme mysql_fetch_assoc()
while($row_req=$res->fetch(PDO::FETCH_ASSOC)){
...
}
//Fermer la connexion , libère des ressources
$res->close();
Vu les requêtes dans ton code j'ai essayé de te donner un exemple à peu près complet tu devrait pouvoir le réadapter à PDO.
Ce que j'ai écrit reste un exemple il existe d'autre syntaxe, on peut encore le travailler : exemple : créer un objet Connection est l'utiliser pour instancier la connexion à la BD :)
Essaie de regarder les différentes possibilités pour chaque ligne histoire de bien comprendre le fonctionnement à de voir les différentes options possibles !!
Utilisateur anonyme
22 févr. 2013 à 10:24
22 févr. 2013 à 10:24
Le insert fonctionne de la même manière que le select pr les requêtes préparées:
//Attention syntaxe dans la requête :valeur ,pour les valeurs à insérer
$req = "INSERT INTO livredor (id, pseudo, note, message, date) VALUES (:id,:pseudo,:note,:message,:date)";
$sql = $pdo->prepare($req);
$sql->bindParam(":pseudo",$_POST['pseudo'],PDO::PARAM_STR);
$sql->bindParam(":note",$_POST['note'],PDO::PARAM_STR);
$sql->bindParam(":message",$_POST['message'],PDO::PARAM_STR);
$sql->bindParam(":date",date("y-m-d"));
//Jusque là ça devrait marcher
//$sql->bindParam(":ip",????????????;) <-- Je voudrais insérer aussi une variable ip du client, pour pouvoir faire en sorte qu'il puisse envoyer qu'un message par mois c'est possible? (et comment faire?)
//Tu peux ajouter un champ ip mais il faut rajouter une colonne ip dans ta table livredor, ensuite le fonctionnement est le même tu ajoute ip dans ta requête
$req = "INSERT INTO livredor (id, pseudo, note, message, date,ip) VALUES (:id,:pseudo,:note,:message,:date,:ip)";
//Et le bindparam de ip à ajouter à la liste
$sql->bindParam(":ip",$ip,PDO::PARAM_STR);
//Il te faudra récupéré l'adresse ip dans la variable $ip
Quelques observations, ton formulaire et le traitement de de celui ci semble être sur la même page, cependant le action du formulaire renvoie vers Messagelivredor.php et ton header renvoie vers messagelivredor.php . Ce sont deux fichiers distincts?
Lorsque tu soumet ton formulaire les données sont envoyées vers un fichier par le action du formulaire, si tu fais f5 c'est comme si tu ré-appuyais sur le bouton submit donc comme si tu ré_envoyais les données.
//Attention syntaxe dans la requête :valeur ,pour les valeurs à insérer
$req = "INSERT INTO livredor (id, pseudo, note, message, date) VALUES (:id,:pseudo,:note,:message,:date)";
$sql = $pdo->prepare($req);
$sql->bindParam(":pseudo",$_POST['pseudo'],PDO::PARAM_STR);
$sql->bindParam(":note",$_POST['note'],PDO::PARAM_STR);
$sql->bindParam(":message",$_POST['message'],PDO::PARAM_STR);
$sql->bindParam(":date",date("y-m-d"));
//Jusque là ça devrait marcher
//$sql->bindParam(":ip",????????????;) <-- Je voudrais insérer aussi une variable ip du client, pour pouvoir faire en sorte qu'il puisse envoyer qu'un message par mois c'est possible? (et comment faire?)
//Tu peux ajouter un champ ip mais il faut rajouter une colonne ip dans ta table livredor, ensuite le fonctionnement est le même tu ajoute ip dans ta requête
$req = "INSERT INTO livredor (id, pseudo, note, message, date,ip) VALUES (:id,:pseudo,:note,:message,:date,:ip)";
//Et le bindparam de ip à ajouter à la liste
$sql->bindParam(":ip",$ip,PDO::PARAM_STR);
//Il te faudra récupéré l'adresse ip dans la variable $ip
Quelques observations, ton formulaire et le traitement de de celui ci semble être sur la même page, cependant le action du formulaire renvoie vers Messagelivredor.php et ton header renvoie vers messagelivredor.php . Ce sont deux fichiers distincts?
Lorsque tu soumet ton formulaire les données sont envoyées vers un fichier par le action du formulaire, si tu fais f5 c'est comme si tu ré-appuyais sur le bouton submit donc comme si tu ré_envoyais les données.
cretinator
Messages postés
67
Date d'inscription
samedi 26 janvier 2013
Statut
Membre
Dernière intervention
6 décembre 2014
1
Modifié par cretinator le 22/02/2013 à 12:56
Modifié par cretinator le 22/02/2013 à 12:56
Merci j'ai pu résoudre le souci d'affichage, en rajoutant ces lignes au code :
Et pour votre question, non c'est le même fichier.
J'ai lu (sur le site de php) qu'il fallait utilisé la fonction header pour actualisé les champs pour ne pas envoyé deux fois le même texte.(qui marche) mais le hic c'est avec la touche f5...
Dans mon premier script cela fonctionnait la touche f5 renvoyais pas les données grâce à header. mais là il y a un problème...
est ce que c'est à cause des fonction PDOStatements? ou l'header est mal positionné? Ou vu que la fonction action et le header son pas compatible en PDO?
Pour l'IP du client !
Le principe du code :
J'ai compris la démarche ;-)
Mais maintenant comment on fais pour récupéré l'ip du client ? ( la formule)
j'ai cherché sur le net mais sa ne correspond pas trop pour moi.(mais continu à chercher lool)
Et pour bloquer le clients à un poster qu'un message par mois avec son ip et la date posté.
Quelles sont les démarches à entreprendre?
$pseudo = (htmlspecialchars($_POST['pseudo'])); $note = (htmlspecialchars($_POST['note'])); $message = (htmlspecialchars($_POST['message'])); $message = nl2br($message); $date = date("y-m-d"); $req = ("INSERT INTO livredor VALUES('','".$pseudo."','".$note."','".$message."','".$date."')");
Et pour votre question, non c'est le même fichier.
J'ai lu (sur le site de php) qu'il fallait utilisé la fonction header pour actualisé les champs pour ne pas envoyé deux fois le même texte.(qui marche) mais le hic c'est avec la touche f5...
Dans mon premier script cela fonctionnait la touche f5 renvoyais pas les données grâce à header. mais là il y a un problème...
est ce que c'est à cause des fonction PDOStatements? ou l'header est mal positionné? Ou vu que la fonction action et le header son pas compatible en PDO?
Pour l'IP du client !
Le principe du code :
$sql->bindParam(":ip",$ip,PDO::PARAM_STR);
J'ai compris la démarche ;-)
Mais maintenant comment on fais pour récupéré l'ip du client ? ( la formule)
j'ai cherché sur le net mais sa ne correspond pas trop pour moi.(mais continu à chercher lool)
Et pour bloquer le clients à un poster qu'un message par mois avec son ip et la date posté.
Quelles sont les démarches à entreprendre?
Modifié par cretinator le 21/02/2013 à 23:35
Voici mon code en suivant vos démarches mais....:
Mais j'ai plusieurs problèmes....
Lors de la saisie des données,
(le point "header" fonctionne puisque ça me rafraîchi les champs!) mais avec la touche f5 ça m'affiche un message comme quoi les données seront renvoyées!
ensuite il n'y a aucunes données insérés dans ma base ....( et aucun message d'erreur s'affiche)
je n'arrive pas a voir les fautes que j'ai commises...