Erreur de code de FORM a BDD

GEDEON62
Invité n'ayant pas de compte PHPfrance

27 déc. 2013, 14:24

Bonjour,

Je suis débutant en php et j'essaye d'inscrire via un formulaire 2 infos dans ma base le nom de la mère et le prénom de la mère.
Ma base est bien crée avec Phpmyadmin et les champs nom_mere et prenom_mere sont dans une table famille
Pouvez-vous m'aider je ne trouve pas mon erreur... :cry:

D'avance merci !!!

Voici mon code


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Inscription famille</title>
</head>
<?php
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=mabase', 'root', 'root');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}
?>

<html>
    <head><title>Formulaire d'inscription des familles</title></head>
    <body>
        <h2>Veuillez remplir le formulaire ci-dessous :</h2>
        <form name="inscription" method="post" action="inscription.php">
            <p>Nom de la mère: <input type="text" name="nom_mere"/> <br/></p>
            <p>Prénom de la mère : <input type="text" name="prenom_mere"/><br/></p>
            <input type="submit" name="valider" value="OK"/>
        </form>
<?php
        if (isset ($_POST['valider']))
        {
            $req = $bdd->prepare('INSERT INTO famille(nom_mere, prenom_mere) VALUES(:nom_mere, :prenom_mere)');
			$req->execute(array(
			'nom_mere' => $nom_mere,
			'prenom_mere' => $prenom_mere,
								));

        }
?>        
    </body>
</html>
Modifié en dernier par moogli le 27 déc. 2013, 21:53, modifié 1 fois.
Raison : bbcode php

Mammouth du PHP | 2278 Messages

27 déc. 2013, 16:06

<?php
 if (isset ($_POST['valider']))
 {
 $req = $bdd->prepare('INSERT INTO famille(nom_mere, prenom_mere) VALUES(:nom_mere, :prenom_mere)');
 $req->execute(array(
 'nom_mere' => $nom_mere,
 'prenom_mere' => $prenom_mere,
 ));

 }
?> 
donne forcément des erreurs de ce genre:
Undefined variable: nom_mere in
Undefined variable: prenom_mere in
1) Tester si le bouton a bien été activé(isset ($_POST['valider'])) me semble peu utile, puisqu'il a fallu l'activer pour arriver ci.
2) Il faut extraire les données du $_POST:
$nom_mere = (isset ($_POST['nom_mere])) ? $_POST['nom_mere'] : false;
$prenom_mere = (isset ($_POST['prenom_mere])) ? $_POST['prenom_mere'] : false;
/*ou des tests plus sophistiqués*/
if (($prenom_mere !== false) and ($nom_mere != false))
{
$req = $bdd->prepare('INSERT INTO famille(nom_mere, prenom_mere) VALUES(:nom_mere, :prenom_mere)');
/*il faudait échapper les variables par quote de pdo http://www.php.net/manual/fr/pdo.quote.php, me semble-t-il*/
 $req->execute(array(
 'nom_mere' => $nom_mere,
 'prenom_mere' => $prenom_mere,
}
3) remplacer mysql par mysqli
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

GEDEON62
Invité n'ayant pas de compte PHPfrance

27 déc. 2013, 17:35

merci beaucoup SIrakawa !!!

le viens de tester avec tes corrections et cela ne fonctionne pas...
Je ne comprends pas pour quoi c'est si complexe simplement pour ajouter 2 entrées dans une table par un formulaire...
Il n'y a pas plus simple ?

J'avais intégrer le if pour signaler dès que l'on clique sur valider cela poste dans la base les infos...
Pourquoi "false" ? nous ne sommes pas sur du booléen...
Je pense que tu as raison il doit y avoir un problème de syntaxe avec le DPO...

En tout cas merci d'essayer de m'aider car je pensais qu'une petite manie' comme celle-ci ne réclamait pas autant de code :wink:

GEDEON62
Invité n'ayant pas de compte PHPfrance

27 déc. 2013, 21:04

Je n'ai toujours pas trouve avis aux amateurs ;.)

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

27 déc. 2013, 22:02

salut,

Si tu as copier coller le code de sirakawa (sans corriger) tu dois avoir une erreur (il manque une ' ).
Si tu n'as pas de message d'erreur il faut activer l'affichage des erreurs (display_error = on) et afficher toutes les erreurs (error_reporting = E_ALL).

ensuite est ce qu'il y a un message d'erreur retourné par PDO ?

utilise un try catch autour du prépare et de l'execute.


il faut vérifier le retour de la méthode execute. si c'est false il faut afficher le message d'erreur disponible avec la méthode errorinfo() de ton objet $req (pdoStatement).

La gestion des erreurs est primordiale pour savoir ce qui ne va pas et donc les afficher correctement est obligatoire en developpement.


@sirakawa : la méthode execute, utilise quote pour les données qui lui sont données à manger. C'est d'ailleurs pour cela que les requêtes préparée sont utilisées a tors et à travers alors que la plus part du temps c'est inutile.


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

GEDEON62
Invité n'ayant pas de compte PHPfrance

27 déc. 2013, 23:40

Merci bcp Moogli mais comme j'ai expliqué je suis débutant et pour moi sincèrement c'est du chinois mdr !!

Je suis spécialisé html et css et j'avoue que je savais le php plus difficile mais je pensais cette manie bcp accessible !!
Je veux juste mettre a jour ces 2 variables $prenom_mere et $nom_mere dans ma table famille via un formulaire, c'est tout...

Je te remerçie pour tes explications mais pour l'instant cela ne fait pas encore parti de mes champs de compétences. :oops: