formulaire et base de données

zazou
Invité n'ayant pas de compte PHPfrance

24 juin 2010, 17:40

Bonjour,
j'ai un soucis avec mon formulaire et mes enregistrements dans une BDD.

Code mon formulaire:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>essai</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <style type="text/css">
    form
    {
        text-align:center;
    }
    </style>
    <body>
  
<?php
// Connexion à la base de données
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=am', 'user', 'mp');
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

// Récupération des données
$reponse = $bdd->query('SELECT * FROM matchs');


// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
?>
<table border="1">
	<tr>
		<td><b> banderoles</b><br>(4 personnes)</td>
		<td><b>salle</b><br>(2 personnes)</td>
		<td><b>Table </b><br>(1 personne)</td>
	</tr>
	<tr>
		

<?php
$res = $bdd->query('SELECT COUNT(banderoles) AS total FROM matchs');
$row = $res->fetch();

echo 'total d\'inscrits = ' . $row['total'];


if ($row['total'] <= 3) 
{ 
	echo ' <form action="f.php" method="post">
        <p>
        <label for="banderoles">Banderoles</label> : <input type="text" name="banderoles" id="banderoles" /><br />
        <label for="salle">Salle</label> :  <input type="text" name="salle" id="salle" /><br />
		<label for="table">Table</label>: <input type="text" name="table" id="table" /><br />

        <input type="submit" value="Envoyer" />
	</p>
    </form>';
	while ($donnees = $reponse->fetch())
{

	echo $donnees[0];
	
	echo '<td>- ' . htmlspecialchars($donnees['banderoles']) . '</td>
	<td>- ' . htmlspecialchars($donnees['salle']) . '<br /></td>
	<td>- ' . htmlspecialchars($donnees['table']) . '<br /></td></tr>'; } 


$reponse->closeCursor();
}
else
{
echo ' <form action="f.php" method="post">
        <p>
        <label for="banderoles">Banderoles</label> : Inscriptions closes<br />
        <label for="salle">Salle</label> :  <input type="text" name="salle" id="salle" /><br />
		<label for="table">Table</label>: <input type="text" name="table" id="table" /><br />

        <input type="submit" value="Envoyer" />
	</p>
    </form>';
	
		while ($donnees = $reponse->fetch())
{

	echo '<td>- ' . htmlspecialchars($donnees['banderoles']) . '</td>
	<td>- ' . htmlspecialchars($donnees['salle']) . '<br /></td>
	<td>- ' . htmlspecialchars($donnees['table']) . '<br /></td></tr>'; } 

$reponse->closeCursor();
}




?>
</table>
et voici mon code f.php :
<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:blabla');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}


if (isset($_POST['banderoles']) and isset($_POST['salle']) and isset($_POST['table']))
{
	$req = $bdd->prepare('INSERT INTO matchs (id, banderoles, salle, table) VALUES
		(
		:id,
		:banderoles, 
		:salle, 
		:table
		)
	');
	
	$req->execute(array(
			    'id' => '',
			    'banderoles' => $_POST['banderoles'],
			    'salle' => $_POST['salle'],
			    'table' => $_POST['table'],
			    ));
}		
	

elseif (isset($_POST['salle']))
{
$req = $bdd->prepare('INSERT INTO matchs (salle) VALUES(?)');
$req->execute(array($_POST['salle']));
}


else 
{
echo 'rien';
}




// Redirection du visiteur vers la page initiale
header('Location: d.php');
?>
Quand je remplis les 3 champs, il ne renvoie rien c'est a dire qu'il reste sur la page du formulaire, aucune erreur n'est indiqué, et aucun enregistrement n'est effectué dans la BDD.

Avez vous des pistes ??
merci

ViPHP
ViPHP | 5462 Messages

24 juin 2010, 17:41


zazzou
Invité n'ayant pas de compte PHPfrance

24 juin 2010, 17:53

J'ai ajouté un :

or die(print_r($bdd->errorInfo())); après ma requête préparée.

et du coup il me renvoie: Array ( [0] => 00000 ) 1

quand je remplit le formulaire...
moi pas comprendre .

ViPHP
ViPHP | 5462 Messages

24 juin 2010, 17:54

et juste avec
$bdd->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
?

zazzou
Invité n'ayant pas de compte PHPfrance

24 juin 2010, 17:57

euh...et bien ca ne fait rien, a moins que je ne l'ai pas mise au bon endroit...
Ou faut il que je le mette en fait ?

ViPHP
ViPHP | 5462 Messages

24 juin 2010, 17:58

euh...et bien ca ne fait rien, a moins que je ne l'ai pas mise au bon endroit...
Ou faut il que je le mette en fait ?
sous
$bdd = new PDO('mysql:blabla');
try
{
        $bdd = new PDO('mysql:host=localhost;dbname=am', 'user', 'mp');
        $bdd->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING  );
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

zazzou
Invité n'ayant pas de compte PHPfrance

24 juin 2010, 18:00

J'ai mis la ligne la ou il faut, en gardant tout le reste du code, et rien ne s'affiche, cela reste sur la page du formulaire en fait .

ViPHP
ViPHP | 5462 Messages

24 juin 2010, 18:04

J'ai mis la ligne la ou il faut, en gardant tout le reste du code, et rien ne s'affiche, cela reste sur la page du formulaire en fait .
enlève ta redirection
header('Location: d.php');

zazzou
Invité n'ayant pas de compte PHPfrance

24 juin 2010, 18:06

J'ai mis la ligne la ou il faut, en gardant tout le reste du code, et rien ne s'affiche, cela reste sur la page du formulaire en fait .
enlève ta redirection
header('Location: d.php');
c'est fait et du coup dans ma barre d'adresse j'ai le f.php et c'est une page blanche...:s

ViPHP
ViPHP | 5462 Messages

24 juin 2010, 18:07

bien,
maintenant apres chaque $req->execute

fais
var_dump($req);

EDIT : verfie dans ton php.ini que

Code : Tout sélectionner

display_errors = On error_reporting = E_ALL | E_STRICT

zazzou
Invité n'ayant pas de compte PHPfrance

25 juin 2010, 10:14

Ok alors je l'ai fais et il me renvoie ca:

object(PDOStatement)#2 (1) { ["queryString"]=> string(109) "INSERT INTO matchs (id, banderoles, salle, table) VALUES ( :id, :banderoles, :salle, :table ) " }

??

ViPHP
ViPHP | 5462 Messages

25 juin 2010, 10:37

Ok alors je l'ai fais et il me renvoie ca:

object(PDOStatement)#2 (1) { ["queryString"]=> string(109) "INSERT INTO matchs (id, banderoles, salle, table) VALUES ( :id, :banderoles, :salle, :table ) " }

??

et toujours rien dans ta table ?

si tu fais du style
$query = $req->execute(................
var_dump($query);
si ta requête a marché il devrai être égale a "true"

Eléphanteau du PHP | 15 Messages

25 juin 2010, 10:43

Non toujours rien dans ma table...

Et quand je fais ce que tu dis, cela ne me renvoie pas true cela renvoie : bool(false)
...

ViPHP
ViPHP | 5462 Messages

25 juin 2010, 10:45

Non toujours rien dans ma table...

Et quand je fais ce que tu dis, cela ne me renvoie pas true cela renvoie : bool(false)
...
false ca veux dire que ca n'as pas marché

t'as bien verfié les valeur de ton php.ini ?

Code : Tout sélectionner

display_errors = On error_reporting = E_ALL | E_STRICT
sinon fais un
var_dump($bdd->errorInfo(), $req->errorInfo());

Eléphanteau du PHP | 15 Messages

25 juin 2010, 10:48


false ca veux dire que ca n'as pas marché

t'as bien verfié les valeur de ton php.ini ?

Code : Tout sélectionner

display_errors = On error_reporting = E_ALL | E_STRICT
sinon fais un
var_dump($bdd->errorInfo(), $req->errorInfo());
oui j'ai vérifié les valeurs php.ini.

quand je fais var_dump($bdd.....

il me met :

Code : Tout sélectionner

bool(false) array(1) { [0]=> string(5) "00000" } array(3) { [0]=> string(5) "00000" [1]=> int(1064) [2]=> string(199) "You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'table) VALUES ( '', 'ze', 'ze', 'ze' )' at line 1" }