Impasse avec PDO
Fermé
abdoulayecoumba
Messages postés
3
Date d'inscription
dimanche 11 octobre 2015
Statut
Membre
Dernière intervention
12 octobre 2015
-
11 oct. 2015 à 06:17
Utilisateur anonyme - 13 oct. 2015 à 08:47
Utilisateur anonyme - 13 oct. 2015 à 08:47
6 réponses
Mars Radio DNB
Messages postés
13872
Date d'inscription
vendredi 6 novembre 2009
Statut
Contributeur
Dernière intervention
2 novembre 2020
1 419
11 oct. 2015 à 08:52
11 oct. 2015 à 08:52
salut,
débutant aussi du moins ca fait longtemps que mon pote webmaster a pris le relais, mais si cela peut t'aider
voici un exemple d'un de mes anciens formulaire d'enregistrement des membres
deja repere la ligne <form action="add_user.php" method="post">
fait des recherche sur post
et tu vois on appelle add_user.php qui contiens l'action d'ajouter un uttilisateur
il contient pas exemple (que le début apres c'est plus complexe y a plein de chose a traiter sécuriser mais en gros ca donne):
espérant t'aider mais franchement y a des super tuto maintenant ... sur open classroom etc...
https://openclassrooms.com/fr/subscriptions/subscribe/premium-solo?promocode=ADOC02&utm_campaign=230911335&utm_medium=cpc&utm_source=google&utm_term=search
débutant aussi du moins ca fait longtemps que mon pote webmaster a pris le relais, mais si cela peut t'aider
voici un exemple d'un de mes anciens formulaire d'enregistrement des membres
<div id="cont">
<h1>Inscription</h1>
<form action="add_user.php" method="post">
<fieldset>
<legend>S'enregistrer :</legend>
<label>Pseudo : <input type="text" name="user_pseudo"></label><br>
<label>Mot de passe : <input type="password" name="user_pass"></label><br>
<label>email : <input type="text" name="email"></label><br>
<label>Nom : <input type="text" name="nom"></label><br>
<label>Prénom : <input type="text" name="prenom"></label><br>
<label>Adresse : <input type="text" name="adresse"></label><br>
<input type="submit" value="Envoyer" />
<input type="reset" value="Rétablir" />
</fieldset>
</form>
</div>
deja repere la ligne <form action="add_user.php" method="post">
fait des recherche sur post
et tu vois on appelle add_user.php qui contiens l'action d'ajouter un uttilisateur
il contient pas exemple (que le début apres c'est plus complexe y a plein de chose a traiter sécuriser mais en gros ca donne):
<?php
// <label>Nom : <input type="text" name="nom"></label>
// <label>Prénom : <input type="text" name="prenom"></label>
// <label>Adresse : <input type="text" name="adresse"></label>
$_POST['user_pseudo'];
$_POST['user_pass'];
$_POST['email'];
$_POST['nom'];
$_POST['prenom'];
$_POST['adresse'];
$pseudo=$_POST['user_pseudo'];
$pass=$_POST['user_pass'];
$email=$_POST['email'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$adresse=$_POST['adresse'];
?>
espérant t'aider mais franchement y a des super tuto maintenant ... sur open classroom etc...
https://openclassrooms.com/fr/subscriptions/subscribe/premium-solo?promocode=ADOC02&utm_campaign=230911335&utm_medium=cpc&utm_source=google&utm_term=search
codeurh24
Messages postés
760
Date d'inscription
samedi 29 mars 2014
Statut
Membre
Dernière intervention
8 septembre 2018
123
Modifié par codeurh24 le 11/10/2015 à 14:07
Modifié par codeurh24 le 11/10/2015 à 14:07
Bonjour,
https://www.php.net/manual/fr/mysqlinfo.api.choosing.php
tu n'est pas obliger d'utiliser PDO, moi j'utilise mysqli.
Ce que tu nous montre comme code avec PDO n'est pas obligatoirement une connexion réussie
php.net donne l'exemple de connexion qui est vérifié par un try catch.
https://www.php.net/manual/fr/pdo.connections.php
mais si tu fait ça:
le code risque de bloquer ta page et ne rien afficher, ok a premier vue c'est bien mais ton code va évoluer et lorsque tu fera autre chose que de la BDD il peut ce produire une autre erreur grave et tu ne pourra pas repérer facilement d'où vient le problème.
Considérons que ton découpage des tables soit bon.
En partant de cette table:
La requete qui sera utilisé pour insérer les données sera en version courte:
(Les requêtes on été reprises de phpmyadmin que j'ai légèrement modifiées, elles peuvent êtres testées dans l'onglet sql)
Maintenant que sa fonctionne il faut créer le formulaire qui va remplir la table.
dans un fichier php il faut écrire donc la partie bdd suivi du html, le html c'est ce qui affiche le formulaire.
version sans traitement bdd
version avec la bdd
pour exécuter des requêtes non préparées comme dans mysql ou mysqli
j'utilise exec de pdo:
https://www.php.net/manual/fr/pdo.exec.php
dans la requête d'exemple insert donné au début des explications, jai remplacé martin par $_POST['inscription_prenom'] qui correspond dans le formulaire html à name="inscription_prenom" qui correspond au deuxième champ que l'on a d'affiché sur la page web, donc prénom
pour remplacer martin j'ai utilisé des guillemets double pour échapper:
".$_POST['inscription_prenom']."
https://www.commentcamarche.net/faq/13095-les-guillemets-apostrophes-et-les-chaines
j'espere que sa va t'aider, j'ai simplifier au maximum mais sa ne remplacera pas les cours php/mysql et html que tu doit déjà avoir compris
https://www.php.net/manual/fr/mysqlinfo.api.choosing.php
tu n'est pas obliger d'utiliser PDO, moi j'utilise mysqli.
Ce que tu nous montre comme code avec PDO n'est pas obligatoirement une connexion réussie
php.net donne l'exemple de connexion qui est vérifié par un try catch.
https://www.php.net/manual/fr/pdo.connections.php
<?php
try {
// si une erreur ce produit (grave)
} catch (PDOException $e) {
/* alors on affiche l'erreur récupérée avec $e
ou on passe a un plan B dans le déroulement du code */
}
mais si tu fait ça:
$bdd = new PDO('mysql:host=localhost;dbname=amateurs','root','');
echo"Connection a la base réuissie"
le code risque de bloquer ta page et ne rien afficher, ok a premier vue c'est bien mais ton code va évoluer et lorsque tu fera autre chose que de la BDD il peut ce produire une autre erreur grave et tu ne pourra pas repérer facilement d'où vient le problème.
Considérons que ton découpage des tables soit bon.
En partant de cette table:
CREATE TABLE IF NOT EXISTS `inscription` (
`id_inscription` int(11) NOT NULL AUTO_INCREMENT,
`prénom` varchar(50) NOT NULL,
`nom` varchar(50) NOT NULL,
`adresse` varchar(255) NOT NULL,
PRIMARY KEY (`id_inscription`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
La requete qui sera utilisé pour insérer les données sera en version courte:
INSERT INTO `inscription` VALUES (NULL, 'martin', 'dupond', '25 rue truc, 75000 paris')
(Les requêtes on été reprises de phpmyadmin que j'ai légèrement modifiées, elles peuvent êtres testées dans l'onglet sql)
Maintenant que sa fonctionne il faut créer le formulaire qui va remplir la table.
dans un fichier php il faut écrire donc la partie bdd suivi du html, le html c'est ce qui affiche le formulaire.
version sans traitement bdd
<?php
// partie php qui gere PDO
if( isset($_POST['inscription_prenom']) and isset($_POST['inscription_nom']) and isset($_POST['inscription_adresse']) )
{
}else
{
?>
<!-- partie html qui affiche la page web avec le formulaire -->
<html>
<head>
</head>
<body>
<!-- debut affichage du formulaire -->
<form action="" method="post">
<input type="text" style="width:150px;" placeholder="Entrez un nom" name="inscription_nom" /><br />
<input type="text" style="width:150px;" placeholder="Entrez un prénom" name="inscription_prenom" /><br />
<input type="text" style="width:400px;"placeholder="Entrez une adresse" name="inscription_adresse" /><br />
<input type="submit" value="Valider" />
</form>
<!-- fin affichage du formulaire -->
</body>
</html>
<!-- fin affichage du html -->
<?php
}
?>
version avec la bdd
<?php
// partie php qui gere PDO
if( isset($_POST['inscription_prenom']) and isset($_POST['inscription_nom']) and isset($_POST['inscription_adresse']) )
{
try {
$dbh = new PDO('mysql:host=localhost;dbname=amateurs', 'root', '');
if( $dbh->exec("INSERT INTO `inscription` VALUES (NULL, '".$_POST['inscription_prenom']."', '".$_POST['inscription_nom']."', '".$_POST['inscription_adresse']."')") !== FALSE ) {
} else {
echo "BDD, table inscription, erreur d'insertion: ".$dbh->errorInfo();
}
$dbh = null;
echo "Inscription reussie";
} catch (PDOException $e) {
print "Erreur !: " . $e->getMessage() . "<br/>";
die();
}
}else
{
?>
<!-- partie html qui affiche la page web avec le formulaire -->
<html>
<head>
</head>
<body>
<!-- debut affichage du formulaire -->
<form action="" method="post">
<input type="text" style="width:150px;" placeholder="Entrez un nom" name="inscription_nom" /><br />
<input type="text" style="width:150px;" placeholder="Entrez un prénom" name="inscription_prenom" /><br />
<input type="text" style="width:400px;"placeholder="Entrez une adresse" name="inscription_adresse" /><br />
<input type="submit" value="Valider" />
</form>
<!-- fin affichage du formulaire -->
</body>
</html>
<!-- fin affichage du html -->
<?php
}
?>
pour exécuter des requêtes non préparées comme dans mysql ou mysqli
j'utilise exec de pdo:
https://www.php.net/manual/fr/pdo.exec.php
dans la requête d'exemple insert donné au début des explications, jai remplacé martin par $_POST['inscription_prenom'] qui correspond dans le formulaire html à name="inscription_prenom" qui correspond au deuxième champ que l'on a d'affiché sur la page web, donc prénom
pour remplacer martin j'ai utilisé des guillemets double pour échapper:
".$_POST['inscription_prenom']."
https://www.commentcamarche.net/faq/13095-les-guillemets-apostrophes-et-les-chaines
j'espere que sa va t'aider, j'ai simplifier au maximum mais sa ne remplacera pas les cours php/mysql et html que tu doit déjà avoir compris
abdoulayecoumba
Messages postés
3
Date d'inscription
dimanche 11 octobre 2015
Statut
Membre
Dernière intervention
12 octobre 2015
12 oct. 2015 à 00:18
12 oct. 2015 à 00:18
Merci à tout le monde et surtout à codeurh24 pour toutes les explications qu'il m'a fournies
Mais suite à toute la litterature que j'ai eu sur PDO , je la préfére à Mysqli
Ainsi j'ai pu essayé de faire de construire ceci pour resoudre mon probleme quelqu'un pourrait il regarder et me rectifier s'il y'a lieu
Wamp me signale une erreur à la ligne l 31 c'est au niveau de la ligne '' $req->bindValue(:prenom, '$prenom', PDO: ARAM_STR); ''
j'ai beau cherché mais je sais pas à quoi cela est dû
le méssage d'erreur est le suivant:
Parse error: syntax error, unexpected ':' in C:\wamp\www\Nouveau dossier (2)\Site2\mon quatrieme site.php on line 31
merci
<html>
<head>
</head>
<body>
<?php
$prenom = $_POST['prenom'] ;
$nom = $_POST['nom'] ;
$adresse = $_POST['adresse'] ;
echo"
<form method='post' action='form.php'>
Prenom :
<br/>
<input type='text' name='prenom'/>
Nom :
<br/>
<input type='text' name='nom'/>
Adresse :
<br/>
<input type='text' name='adresse'/>
<input type='submit' value='Inscription'/>
</form>
";
$bdd = new PDO('mysql:host=localhost;dbname=amateurs','root','');
$req = $bdd->prepare("INSERT INTO agent(prenom,nom,adresse) VALUE (:prenom, :nom, :adresse)");
$req->bindValue(:prenom, '$prenom', PDO: ARAM_STR);
$req->bindValue(:nom, '$nom', PDO: ARAM_STR);
$req->bindValue(:adresse, '$adresse', PDO: ARAM_STR);
$req->execute();
?>
</body>
</html>
Mais suite à toute la litterature que j'ai eu sur PDO , je la préfére à Mysqli
Ainsi j'ai pu essayé de faire de construire ceci pour resoudre mon probleme quelqu'un pourrait il regarder et me rectifier s'il y'a lieu
Wamp me signale une erreur à la ligne l 31 c'est au niveau de la ligne '' $req->bindValue(:prenom, '$prenom', PDO: ARAM_STR); ''
j'ai beau cherché mais je sais pas à quoi cela est dû
le méssage d'erreur est le suivant:
Parse error: syntax error, unexpected ':' in C:\wamp\www\Nouveau dossier (2)\Site2\mon quatrieme site.php on line 31
merci
<html>
<head>
</head>
<body>
<?php
$prenom = $_POST['prenom'] ;
$nom = $_POST['nom'] ;
$adresse = $_POST['adresse'] ;
echo"
<form method='post' action='form.php'>
Prenom :
<br/>
<input type='text' name='prenom'/>
Nom :
<br/>
<input type='text' name='nom'/>
Adresse :
<br/>
<input type='text' name='adresse'/>
<input type='submit' value='Inscription'/>
</form>
";
$bdd = new PDO('mysql:host=localhost;dbname=amateurs','root','');
$req = $bdd->prepare("INSERT INTO agent(prenom,nom,adresse) VALUE (:prenom, :nom, :adresse)");
$req->bindValue(:prenom, '$prenom', PDO: ARAM_STR);
$req->bindValue(:nom, '$nom', PDO: ARAM_STR);
$req->bindValue(:adresse, '$adresse', PDO: ARAM_STR);
$req->execute();
?>
</body>
</html>
Utilisateur anonyme
12 oct. 2015 à 08:17
12 oct. 2015 à 08:17
Bonjour
PDO: ARM_STR n'existe pas, c'est PDO::PARAM_STR
De plus, dans tes bindValue, c'est $prenom qu'il faut mettre (sans apostrophes) et non '$prenom'. '$prenom' avec des apostrophes n'a aucun rapport avec la variable $prenom, c'est juste une chaîne de caractères. Essaye echo '$prenom'; et echo $prenom pour bien voir la différence.
PDO: ARM_STR n'existe pas, c'est PDO::PARAM_STR
De plus, dans tes bindValue, c'est $prenom qu'il faut mettre (sans apostrophes) et non '$prenom'. '$prenom' avec des apostrophes n'a aucun rapport avec la variable $prenom, c'est juste une chaîne de caractères. Essaye echo '$prenom'; et echo $prenom pour bien voir la différence.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
abdoulayecoumba
Messages postés
3
Date d'inscription
dimanche 11 octobre 2015
Statut
Membre
Dernière intervention
12 octobre 2015
12 oct. 2015 à 20:02
12 oct. 2015 à 20:02
Bonsoir, j'ai essayé de rectifier mon code comme vous me l'aviez suggère maintenant wamp ne me signale plus aucune erreur et m'affiche correctement mon formulaire , le seul problème auquel je suis actuellement confronté est que lorsque je tente de saisir des informations avec le formulaire, dés que j'appuis sur le bouton ''ENVOYER'' le navigateur m'affiche ''PAGE WEB INTROUVABLE''
quel est le problème
quel est le problème
<html>
<head>
</head>
<body>
<?php
if ( isset( $_POST['prenom'] ))
{
$prenom = $_POST['prenom'] ;
$nom = $_POST['nom'] ;
$adresse = $_POST['adresse'] ;
$bdd = new PDO('mysql:host=localhost;dbname=amateurs','root','');
$req = $bdd->prepare("INSERT INTO agent(prenom,nom,adresse) VALUE
(:prenom, :nom, :adresse)");
$req->bindValue(':prenom', $prenom, PDO::PARAM_STR);
$req->bindValue(':nom', $nom, PDO::PARAM_STR);
$req->bindValue(':adresse', $adresse, PDO::PARAM_STR);
$req->execute();
echo'Merci de vous être enregistré';
}
else
{
echo"
// Le formulaire //
<form method='post' action='form.php'>
Prenom :
<br/>
<input type='text' name='prenom'/>
<br/>
Nom :
<br/>
<input type='text' name='nom'/>
<br/>
Adresse :
<br/>
<input type='text' name='adresse'/>
<input type='submit' value='Inscription'/>
</form>
";
}
?>
</body>
</html>
Utilisateur anonyme
13 oct. 2015 à 08:47
13 oct. 2015 à 08:47
Première remarque : comment fais-tu pour cliquer sur "envoyer" alors qu'il n'y a plus de bouton "envoyer" dans ton formulaire ? Tu as changé son nom, maintenant c'est "Inscription".
Ceci étant dit, tu devrais pouvoir résoudre ce nouveau problème toi-même.
S'il te dit qu'il ne trouve pas la page web, c'est qu'elle n'existe pas.
Quelle page doit-il aller chercher quand tu cliques sur le bouton ?
Ceci étant dit, tu devrais pouvoir résoudre ce nouveau problème toi-même.
S'il te dit qu'il ne trouve pas la page web, c'est qu'elle n'existe pas.
Quelle page doit-il aller chercher quand tu cliques sur le bouton ?