[RESOLU] ajouter une ligne mysql php avec un formulaire

Petit nouveau ! | 5 Messages

27 août 2014, 19:55

Bonjour à tous,

j'ai un problème quand je veux ajouter une ligne dans ma base de donnée mysql à partir d'un formulaire.

voilà mon code:
<?php
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=cours_particulier', 'root', '');
	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
	$prenom= $_POST['prenom'];
	$ville= $_POST['ville'];
	$annee_et_option= $_POST['annee_et_option'];
	$email= $_POST['email'];
	$numero_telephone= $_POST['numero_telephone'];
	$tarif= $_POST['tarif'];
	$disponibilité= $_POST['disponibilité'];
	
 if(!empty($_POST))
    {
$req = $bdd->prepare('INSERT INTO cours_particulier(prenom, ville, annee_et_option, email, numero_telephone, tarif, disponibilité) VALUES ($prenom, $ville, $annee_et_option, $email, $numero_telephone, $tarif ,$disponibilité)');
$req->execute(/*array(
	$prenom=> $_POST['prenom'],
	$ville=> $_POST['ville'],
	$annee_et_option=> $_POST['annee_et_option'],
	$email=> $_POST['email'],
	$numero_telephone=> $_POST['numero_telephone'],
	$tarif=> $_POST['tarif'],
	$disponibilité=> $_POST['disponibilité'])*/);
echo "Le formulaire a bien été envoyé";
}else{
echo "echec";
}
?>

ViPHP
xTG
ViPHP | 7331 Messages

27 août 2014, 20:06

Et même pas un message d'erreur... Heureusement que l'erreur est toute bête sinon on était bon pour sortir notre boule de cristal...

Les simples quotes n'interprètent pas les variables.
Exemple :
$variable = "test";
echo '$variable'; // $variable
echo "$variable"; // test
echo $variable; // test
Ensuite pour utiliser correctement les requêtes préparées je te conseille de lire les exemples de la documentation de la fonction. ;)
http://fr2.php.net/manual/fr/pdostatement.execute.php

Petit nouveau ! | 5 Messages

27 août 2014, 20:16

probleme.png
Ah voici le message d'erreur --'

Merci, j'avais déjà lu cette page, mais je ne sais pas comment l'adapter à mon test car les exemples qu'il propose n'est pas un ajout d'une ligne de bdd.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 août 2014, 22:11

salut

utilise un try / catch pour la requête.

Ta requête sql n'est pas syntaxiquement correct, même avec l’interprétation des variables ne changes rien.

utilise la méthode quote ou une requête préparée comme l'indique xTG


@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

28 août 2014, 08:05

Merci, j'avais déjà lu cette page, mais je ne sais pas comment l'adapter à mon test car les exemples qu'il propose n'est pas un ajout d'une ligne de bdd.
Non mais tu n'as pas besoin de ça puisque tu sais déjà la rédiger.
Ce qu'il te faut c'est injecter correctement les variables et ça la page te le montre...

:calories dans une requête sera injecté grâce à :
$sth->execute(array(':calories' => $calories));
C'est le même principe pour toi sauf que les variables n'ont pas le même nom. Tu penses pouvoir t'en sortir ?  :)

Petit nouveau ! | 5 Messages

28 août 2014, 12:06

Non mais les gars, là ça fonctionne pas, j'ai beau essayer 36000 méthodes, il y a toujours le même message d'erreur qui apparaît.
#-o

ViPHP
xTG
ViPHP | 7331 Messages

28 août 2014, 14:16

Je vois pas comment expliquer autrement que "il faut remplacer calories par le nom de ton champ"... 8-|

Montres nous ce que tu as tenté de faire ?

Petit nouveau ! | 5 Messages

28 août 2014, 14:23

Donc voilà ce que j'ai mis:
<?php
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=cours_particulier', 'root', '');
	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
	
	
 if(!empty($_POST))
    {
$req = $bdd->prepare('INSERT INTO cours_particulier(prenom, ville, annee_et_option, email, numero_telephone, tarif, disponibilité) VALUES (:prenom, :ville, :annee_et_option, :email, :numero_telephone, :tarif ,:disponibilité)');

	$prenom= "$_POST[prenom]";
	$ville= "$_POST[ville]";
	$annee_et_option= "$_POST[annee_et_option]";
	$email= "$_POST[email]";
	$numero_telephone= "$_POST[numero_telephone]";
	$tarif= "$_POST[tarif]";
	$disponibilité= "$_POST[disponibilité]";
	
$req->execute(array(':prenom' => $prenom,':ville' => $ville,':annee_et_option' => $annee_et_option,':email' => $email,
':numero_telephone' => $numero_telephone,':tarif' => $tarif,':disponibilité' => $disponibilité
));

echo 'Le formulaire a bien été envoyé';
}else{
echo 'echec';
}
?>
L'erreur est toujours au même endroit : il y a une erreur sur "));" avant le "echo 'Le formulaire a bien été envoyé';"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 août 2014, 15:21

pas besoin d'utiliser des " pour affecter une variable à une autre.
les chaines de caractère DOIVENT être délimitée 'par des " ou des ') mais il faut le faire.

l'affectation d'un tableau à une variable est inutile utilise directement le tableau.

ton code simplifié
<?php
try {
    $bdd = new PDO('mysql:host=localhost;dbname=cours_particulier', 'root', '');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if (!empty($_POST)) {
        $req =
            $bdd->prepare('INSERT INTO cours_particulier(prenom, ville, annee_et_option, email, numero_telephone, tarif, disponibilité) VALUES 
                                                     (:prenom, :ville, :annee_et_option, :email, :numero_telephone, :tarif ,:disponibilite)');

        $req->execute(array(
            ':prenom'           => $_POST['prenom'],
            ':ville'            => $_POST['ville'],
            ':annee_et_option'  => $_POST['annee_et_option'],
            ':email'            => $_POST['email'],
            ':numero_telephone' => $_POST['numero_telephone'],
            ':tarif'            => $_POST['tarif'],
            ':disponibilite'    => $_POST['disponibilité']
        ));

        echo 'Le formulaire a bien été envoyé';
    } else {
        echo 'echec';
    }
} catch (Exception $e) {
    die('Erreur : ' . $e->getMessage() . '<br />'.$e->getTraceAsString());
}
Maintenant est ce que le message d'erreur est plus long que ce que tu nous a donné ?
est ce que tu nous fournir le formulaire html que tu utilises avec ce code ?
est ce que tu peux nous fournir le create table de la table en question pour tester (au besoin) ?

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

28 août 2014, 15:45

Merci ça fonctionne !
Merci beaucoup ;-)