[RESOLU] Livre d'or

Eléphant du PHP | 79 Messages

29 mai 2013, 19:10

Bonjour à tous,
J'ai précédemment créé un livre d'or grâce à un tutoriel que j'ai suivi, mais rien ne fonctionne ^^' ( pour changer x) )
Mon code se constitue sur deux page,

ma page livreor.php :
<?php session_start(); ?>

<!DOCTYPE HTML>
<html>
<head>
<link href="mafavicon.png" rel="shortcut icon" title="montitre" type="image/png" />
<link href="css1.css" rel="stylesheet" type="text/css">
<title>Livre d'or / Laissez votre avis par rapport au site, aux artistes, et divers sujets.</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Livre d'or, donner votre avis, sur les artistes, le site ou d'autres thèmes." />
<meta name="keywords" content="livre d'or, avis, commentaires, messages, site, notation, sujet" />
</head>
<body>
<div id="container">
<?php include("header.inc.php"); ?>
<?php include("menus.inc.php"); ?>
<div id="corpslivreor">
<div id="retourselect">
<a href="livreor.php" title="recharger la page"><h1 class="titre1">Livre d'or</h1></a>
</div>
 <div id="textelivreor">
 <p class="texte2">Ici, vous pourrez donner votre avis par rapport au site, aux artistes ou autres sujets...</p>
 </div>
  <form action="signaturelivreor.php" method="post">
<fieldset>
<p class="classinscr"><label>Votre pseudo :
<input type="text" name="membre_pseudo" />
</label>
</p>
<p class="classinscr">
<label>Votre message :
<input type="text" name="messagelo" />
</label>
</p>
<p class="classinscr">
<label>donnez une note :
<input type="text" name="note" />
</label>
</p>
<p class="classinscr">
<label>
<input type="submit" name="submit" value="envoyer" />
</label>
</p>
</fieldset>
</form>
<?php require_once("connexionlivreor.inc.php"); 
$reponse = $bdd->prepare('SELECT membre_pseudo,messagelo,note,dateedit FROM commentaire ORDER BY dateedit DESC');
$reponse->execute();
$nb_signature = $reponse->fetch(PDO::FETCH_ASSOC);

if ($nb_signature==NULL)
{
	
	echo '<p class="textewarning">'."aucune signature.".'<p>';
	}  
else {

	while ($data = $reponse->fetch()) 
	
	echo htmlspecialchars($data['membre_pseudo']);
	echo htmlspecialchars($data['messagelo']);
	echo htmlspecialchars($data['note']);
	echo htmlspecialchars($data['dateedit']); 
	
	 } $reponse->closeCursor(); ?>


</div>
<?php include("footer.inc.php"); ?>
</div>
</body>
</html>
et ma page signaturelivreor :
<?php session_start(); ?>
<?php  
   if ((isset($_POST['membre_pseudo'])) && (isset($_POST['messagelo']))) { 
      
      if ((!empty($_POST['membre_pseudo'])) && (!empty($_POST['messagelo']))) { 
        
require_once("connexionlivreor.inc.php");
 
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,CURDATE())');
 $reponse->execute(array('membre_pseudo'=>$_POST['membre_pseudo'],'messagelo'=>$_POST['messagelo']));
header('Location: livreor.php'); 
 
      } 
      else { 
         echo "Au moins un des champs est vide."; 
      } 
   } 
  
?> 
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>laissez votre signature, vos commentaires et votre note</title>
</head>
<body>
</body>
</html>
une erreur s'affiche lorsque le membre tente d'envoyer un message :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1' in /home/croba286/public_html/signaturelivreor.php:10 Stack trace: #0 /home/croba286/public_html/signaturelivreor.php(10): PDOStatement->execute(Array) #1 {main} thrown in /home/croba286/public_html/signaturelivreor.php on line 10
Merci pour votre attention.
Créateur du site www.crobara2bal.com.

Eléphant du PHP | 56 Messages

29 mai 2013, 19:31

Quelques erreurs dans le code, j'y ai mis des commentaires. Je n'ai pas tester le code.


livreor.php
<?php 
session_start(); 

?><!DOCTYPE HTML>
<html>
<head>
<link href="mafavicon.png" rel="shortcut icon" title="montitre" type="image/png" />
<link href="css1.css" rel="stylesheet" type="text/css">
<title>Livre d'or / Laissez votre avis par rapport au site, aux artistes, et divers sujets.</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Livre d'or, donner votre avis, sur les artistes, le site ou d'autres thèmes." />
<meta name="keywords" content="livre d'or, avis, commentaires, messages, site, notation, sujet" />
</head>
<body>
<div id="container">
<?php include("header.inc.php"); ?>
<?php include("menus.inc.php"); ?>
<div id="corpslivreor">
<div id="retourselect">
<a href="livreor.php" title="recharger la page"><h1 class="titre1">Livre d'or</h1></a>
</div>
 <div id="textelivreor">
 <p class="texte2">Ici, vous pourrez donner votre avis par rapport au site, aux artistes ou autres sujets...</p>
 </div>
  <form name="SendSignature" action="signaturelivreor.php" method="post">
<fieldset>
<p class="classinscr"><label>Votre pseudo :
<input type="text" name="membre_pseudo" />
</label>
</p>
<p class="classinscr">
<label>Votre message :
<input type="text" name="messagelo" />
</label>
</p>
<p class="classinscr">
<label>donnez une note :
<!-- Definir un nombre entre 0 et 20 -->
<input type="number" min="0" max="20" name="note" />
</label>
</p>
<p class="classinscr">
<label>
<input type="submit" name="SendSignature" value="envoyer" />
</label>
</p>
</fieldset>
</form>
<?php require_once("connexionlivreor.inc.php"); 
// au vu du nombre de contenu a récupéré tu peux faire un SELECT * plutot.
$reponse = $bdd->prepare('SELECT membre_pseudo,messagelo,note,dateedit FROM commentaire ORDER BY dateedit DESC');
$reponse->execute();
$nb_signature = $reponse->rowCount();

if ($nb_signature==NULL){
	echo '<p class="textewarning">Aucune signature...<p>';
} else {
	while ($data = $reponse->fetch(PDO::FETCH_OBJ)){ 
        
        echo htmlspecialchars($data->membre_pseudo);
        echo htmlspecialchars($data->messagelo);
        echo htmlspecialchars($data->note);
        echo htmlspecialchars($data->dateedit); 
	} // end while
         } $reponse->closeCursor(); ?>


</div>
<?php include("footer.inc.php"); ?>
</div>
</body>
</html>




signaturelivreor.php
<?php 
session_start();
if(isset($_POST['SendSignature'])){
   if(isset($_POST['membre_pseudo']) && isset($_POST['messagelo'])){ 
     if(!empty($_POST['membre_pseudo']) && !empty($_POST['messagelo'])){ 
	 	require_once("connexionlivreor.inc.php");
			// 4 champs a inserer, mais 3 valeurs definies
			$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,CURDATE())'); 
			$reponse->execute(array('membre_pseudo'=>$_POST['membre_pseudo'],'messagelo'=>$_POST['messagelo'])); // faux
			$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,:note,Now())'); // probablement plus juste.
			$reponse->execute(array(
			'membre_pseudo'=>$_POST['membre_pseudo'],
			'messagelo'=>$_POST['messagelo'],
			'note'=>$_POST['note']
			)); // probablement plus juste.
			header('Location: livreor.php'); 
} else { 
         echo "Au moins un des champs est vide."; 
      } // end else !empty membre pseudo ou membre
   } // end isset post membre pseudo ou membre messagelo
} // end isset post SendSignature
?> 
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>laissez votre signature, vos commentaires et votre note</title>
</head>
<body>
</body>
</html>
Modifié en dernier par J-oxi le 29 mai 2013, 19:38, modifié 1 fois.

Mammouth du PHP | 571 Messages

29 mai 2013, 19:35

bonjour,

la colonne note est censée recevoir une valeur d'après la définition de ta table commentaire soit tu l'enlèves soit tu l'affectes une valeur:
//on omet la colonne note pour peu qu'elle ne soit pas NON NULL
 $reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,dateedit) VALUES (:membre_pseudo,:messagelo,CURDATE())');

tu n'as pas besoin de faire une vérification par isset dès lors que cette vérification est déjà effectuée par empty() car cette dernière vérifie que les variables sont non nulles et qu'elles existent.

Eléphant du PHP | 79 Messages

30 mai 2013, 14:02

Bonjour à tous,
tout d’abord merci encore à toi j-oxi ^^ tout fonctionne nikel :) ( merci yann également pour ton conseil :)) j'ai eu quelque soucis avec la variable note, je m'en passe donc pour le moment ( je l'ai supprimé je reviendrais dessus après avoir résolu mes soucis principaux xD ).
J'aimerais savoir si il est possible de faire en sorte que le pseudo (du membre connecté) s'auto inscrit et ne puisse être modifiable (directement dans le champs du formulaire).

( le header location ne fonctionnais pas je l'ai donc mis directement à la suite de session start, cela à l'air de fonctionné sans problème )

ma page livreor.php :
<?php session_start(); ?>
<!DOCTYPE HTML>
<html>
<head>
<link href="mafavicon.png" rel="shortcut icon" title="montitre" type="image/png" />
<link href="css1.css" rel="stylesheet" type="text/css">
<title>Livre d'or / Laissez votre avis par rapport au site, aux artistes, et divers sujets.</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Livre d'or, donner votre avis, sur les artistes, le site ou d'autres thèmes." />
<meta name="keywords" content="livre d'or, avis, commentaires, messages, site, notation, sujet" />
</head>
<body>
<div id="container">
<?php include("header.inc.php"); ?>
<?php include("menus.inc.php"); ?>
<div id="corpslivreor">
<div id="retourselect">
<a href="livreor.php" title="recharger la page"><h1 class="titre1">Livre d'or</h1></a>
</div>
<div id="textelivreor">
<p class="texte2">Ici, vous pourrez donner votre avis par rapport au site, aux artistes ou autres sujets...</p>
</div>
<form action="signaturelivreor.php" method="post" name="SendSignature">
<fieldset>
<p class="classinscr"><label>Votre pseudo :
<input type="text" name="membre_pseudo" />
</label>
</p>
<p class="classinscr">
<label>Votre message :
<input type="text" name="messagelo" />
</label>
</p>
<p class="classinscr">
<label>
<input type="submit" name="SendSignature" value="envoyer" />
</label>
</p>
</fieldset>
</form>
<?php require_once("connexionlivreor.inc.php"); 
$reponse = $bdd->prepare('SELECT membre_pseudo,messagelo,dateedit FROM commentaire ORDER BY dateedit DESC');
$reponse->execute();
$nb_signature = $reponse->rowCount();

if ($nb_signature==NULL){
        echo '<p class="textewarning">Aucune signature.<p>';
} else {
        while ($data = $reponse->fetch(PDO::FETCH_OBJ)){ 
        
        echo htmlspecialchars($data->membre_pseudo);
        echo htmlspecialchars($data->messagelo);
        echo htmlspecialchars($data->dateedit); 
        } // end while
         } $reponse->closeCursor(); ?>


</div>
<?php include("footer.inc.php"); ?>
</div>
</body>
</html>
et voici ma page signaturelivreor.php :
<?php session_start();
header('Location: livreor.php');
if(isset($_POST['SendSignature'])){
     if(!empty($_POST['membre_pseudo']) && !empty($_POST['messagelo'])){ 
                require_once("connexionlivreor.inc.php");
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,dateedit) VALUES (:membre_pseudo,:messagelo,Now())'); $reponse->execute(array('membre_pseudo'=>$_POST['membre_pseudo'],'messagelo'=>$_POST['messagelo'])); 
} else { 
         echo "Au moins un des champs est vide."; 
	}
}
?> 
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>laissez votre signature, vos commentaires</title>
</head>
<body>
</body>
</html>
( isset = si il y a, empty = si c'est vide, ! = inverse, donc isset = !empty ,et, empty = !isset, si j'ai bien compris ^^ ? )

Merci encore pour votre attention et votre aide :),
Sincèrement.
Créateur du site www.crobara2bal.com.

Eléphant du PHP | 56 Messages

30 mai 2013, 14:28

Une variable peut exister et être vide, on peut la tester avec isset -> si elle existe
ou son contraire !isset. le point d'exclamation indique 'différent de' donc différent d'existant.

Une variable vide empty
Une variable différente de vide !empty

Pour que le nom de ton membre s'affiche directement, s'il est en session, tu peux utiliser ton $_SESSION['NOM_DE_LA_SESSION_MEMBRE'] pour l'insertion en base de données.

Eléphant du PHP | 79 Messages

30 mai 2013, 15:23

Merci pour ces explication J-oxi =)
Pour que le nom de la variable s'affiche oui, j'ai effectué cet action précédemment pour indiquer à l'internaute qu'il et connecté sous tel pseudo
<?php echo '<p class="textepseu">'.htmlspecialchars($_SESSION['membre_pseudo']).'</p>'; ?>
, mais est il possible d'insérer dans le champs du formulaire directement
<p class="classinscr"><label>Votre pseudo :<input type="text" name="membre_pseudo" /></label>
et que le membre connecté n'est pas à inscrire son pseudo pour poster un message.
Merci pour ton soutien et ton aide j-oxi, sincèrement.
Créateur du site www.crobara2bal.com.

Eléphant du PHP | 56 Messages

30 mai 2013, 16:25

Quelque chose de comme ça :)
Avec ou sans le disabled, si tu veux qu'il puisse le changer.
<input type="text" name="membre_pseudo" value="<?php if(isset($_SESSION['membre_pseudo'])) echo $_SESSION['membre_pseudo'];?>" disabled="disabled" />

Eléphant du PHP | 79 Messages

30 mai 2013, 17:28

Re,
Merci encore de partager tes connaissances j-oxi ça m'aide énormément :))),
Le disabled est très intéressant ( c'est à peu près ce que je souhaite faire lorsque l'utilisateur est connecté il ne peut signer que sous son pseudo ) mais l'envoie du pseudo n'a pas l'air de s'effétuer lorsque je met disabled="" ou disabled="disabled".
Merci encore pour ton aide ^^ sincèrement :).
Créateur du site www.crobara2bal.com.

Eléphant du PHP | 56 Messages

30 mai 2013, 18:00

Tu peux essayer cela alors
<input type="text" name="membre_pseudo" value="<?php if(isset($_SESSION['membre_pseudo'])) echo $_SESSION['membre_pseudo'];?>" readonly />

Eléphant du PHP | 79 Messages

30 mai 2013, 18:43

Re,
Super =D> :D tout fonctionne correctement, merci encore j-oxi :) ( +1 xD)
Créateur du site www.crobara2bal.com.

Eléphant du PHP | 56 Messages

30 mai 2013, 19:03

De rien.
Pour ton système de notation que tu as enlever, tu peux regarder de ce coté la.
http://babylon-design.com/systeme-de-no ... ccessible/

Eléphant du PHP | 79 Messages

30 mai 2013, 19:49

Je vais me pencher la dessus, mais je n'ai encore aucune base en javascript ( il faut ramer pour y arrivé x) )
:)encore une fois Merci beaucoup j-oxi pour toutes ton aide ^^.
Créateur du site www.crobara2bal.com.