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
Bonjour,

je Suis nouveau en programmation et depuis un certain temps je me suis mis en PDO depuis que j'ai appris que la procédure de connexion à une base de donnée par Mysql_connect et Mysql_query étaient périmé

maintenant j'éprouve d'énormes difficultés et je ne trouve pas de solution par rapport à une question très simple , comment parvenir à alimenter une table contenue dans une base via un petit formulaire avec PDO . J'ai consulté toute la littérature ,les tutos , etc faits sur PDO je ne trouve rien qui puisse répondre à ma préoccupation.

J'ai créé une base de donnée avec phpMyadmin nommée : ''amateurs'' et

une table nommée :''inscription''

La table est constituée des 3 champs suivants : ''prénom'' , ''nom'' , ''adresse''

Je comprend comment faire pour me connecter à la base j'ai parfaitement réussi cette étape avec le code suivant :

<?php

$bdd = new PDO('mysql:host=localhost;dbname=amateurs','root','');

echo"Connection a la base réuissie"

?>

maintenant je cherche quelqu'un pour m'aider à écrire le reste du code qui me permettra :

de construire un formulaire pour remplir ma table et la requette appropriée pour transférer les données saisies dans le formulaire vers la table.

Ca me sera d'un grand apport si quelqu'un pourrait m'apporter son aide

merci d'avance

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
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

<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


0
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
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


<?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
0
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
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>
0
Utilisateur anonyme
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.
0

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
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


<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>
0
Utilisateur anonyme
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 ?
0