Posez votre question Signaler

Livre d'or Problème en php/mySQL [Résolu]

web-actu 31Messages postés 16 novembre 2008Date d'inscription - Dernière réponse le 21 août 2009 à 11:09
Bonjour, j'ai recement eu un probleme avec le livre d'or.
Voici le code source :
<?php
include ("includes/header.php");
include ("includes/menu.php");
include_once ("includes/bdd.php");
?>
<div id="corps">
<form method="post" action="livreor.php">
        <p>Mon site vous plaît ? Laissez-moi un message !</p>
        <p>
		<?php if(isset($_SESSION['id']))
		{ ?>
		   Pseudo : <strong><?php echo $_SESSION['pseudo'] ;?></strong><br />
		   	<input type="hidden" name="pseudo" value="<?php echo $_SESSION['pseudo'] ?>"/>
		<?php }
		else
		{ ?>
            Pseudo : <input name="pseudo" /><br />
			<?php } ?>
  
            Message :<br />
            <textarea name="message" rows="8" cols="35"></textarea><br />
            <input type="submit" value="Envoyer" />
        </p>
    </form>
 
    <p class="pages">
 
<?php
mysql_connect("****", "****", "****");
mysql_select_db("riridi");
 
// --------------- Etape 1 -----------------
// Si un message est envoyé, on l'enregistre
// -----------------------------------------
 
if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
    $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
    $message = nl2br(mysql_real_escape_string(htmlspecialchars($_POST['message']))); // De même pour le message ; Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />

     $ip = $_SERVER['REMOTE_ADDR'];
    // On peut enfin enregistrer :o)
    mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "',  '" . $ip . "')");
}
 
// --------------- Etape 2 -----------------
// On écrit les liens vers chacune des pages
// -----------------------------------------
 
// On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 20; // Essayez de changer ce nombre pour voir :o)
// On récupère le nombre total de messages
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor');
$donnees = mysql_fetch_array($retour);$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> ';
}
?>
 
</p>
 
<?php
 
 
// --------------- Etape 3 ---------------
// Maintenant, on va afficher les messages
// ---------------------------------------
 
if (isset($_GET['page']))
{
        $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
        $page = 1; // On se met sur la page 1 (par défaut)
}
 
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
 
$reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
 
while ($donnees = mysql_fetch_array($reponse))
{
        echo '<div="message_or"><p><strong>' . $donnees['pseudo'] . '</strong> a écrit :<br />' . $donnees['message'] . '</p></div>';
}
 
mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o)
?>
<div id="clear:both">
<?php include("includes/pied.php")?>

...Voilà...
Lire la suite 

Livre d'or Problème en php/mySQL »

39 réponses
Réponse
+0
moins plus
salut!
C'est quoi ton problème??
Ajouter un commentaire
Réponse
+0
moins plus
c'est que j'arrive pas a poster un message
Ajouter un commentaire
Réponse
+0
moins plus
Qu'est-ce qui bloque ? Qu'est-ce qui se passe ? Quelle message d'erreur ?
Ajouter un commentaire
Réponse
+0
moins plus
A cet endroit
<input type="hidden" name="pseudo" value="<?php echo $_SESSION['pseudo'] ?>"/>

Il te manque un ; après $_SESSION['pseudo'].
Ajouter un commentaire
Réponse
+0
moins plus
tu es raison mais ca marche quand meme pas
arthezius- 7 janv. 2009 à 14:21
Et si tu répondais a mes questions ?
Ajouter un commentaire
Réponse
+0
moins plus
Aussi rajoute
or die (mysql_error());
après
mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "',  '" . $ip . "')");
comme ca
mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "',  '" . $ip . "')")or die (mysql_error());
au cas ou cela serait une erreur de requête SQL.
Ajouter un commentaire
Réponse
+0
moins plus
excuse moi arthezius
alors pas de message d'erreur c'est juste que j'arrive pas a poster sur le livre d'or je poste et sa marche pas et je vous ai passer la source ...voila
Ajouter un commentaire
Réponse
+0
moins plus
et un message d'érreur eu faite j'ai remis le code avec les modife
ps le code d'érreur :

Column count doesn't match value count at row 1
Ajouter un commentaire
Réponse
+0
moins plus
<?php
include ("includes/header.php");
include ("includes/menu.php");
include_once ("includes/bdd.php");
?>
<div id="corps">
<form method="post" action="livreor.php">
        <p>Mon site vous plaît ? Laissez-moi un message !</p>
        <p>
		<?php if(isset($_SESSION['id']))
		{ ?>
		   Pseudo : <strong><?php echo $_SESSION['pseudo'] ;?></strong><br />
		   	<input type="hidden" name="pseudo" value="<?php echo $_SESSION['pseudo'] ;?>"/>
		<?php }
		else
		{ ?>
            Pseudo : <input name="pseudo" /><br />
			<?php } ?>
  
            Message :<br />
            <textarea name="message" rows="8" cols="35"></textarea><br />
            <input type="submit" value="Envoyer" />
        </p>
    </form>
 
    <p class="pages">
 
<?php
mysql_connect("***", "***i", "***");
mysql_select_db("***");
 
// --------------- Etape 1 -----------------
// Si un message est envoyé, on l'enregistre
// -----------------------------------------
 
if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
    $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
    $message = nl2br(mysql_real_escape_string(htmlspecialchars($_POST['message']))); // De même pour le message ; Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />

     $ip = $_SERVER['REMOTE_ADDR'];
    // On peut enfin enregistrer :o)
    mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "',  '" . $ip . "')")or die (mysql_error());
}
 
// --------------- Etape 2 -----------------
// On écrit les liens vers chacune des pages
// -----------------------------------------
 
// On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 20; // Essayez de changer ce nombre pour voir :o)
// On récupère le nombre total de messages
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor');
$donnees = mysql_fetch_array($retour);$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> ';
}
?>
 
</p>
 
<?php
 
 
// --------------- Etape 3 ---------------
// Maintenant, on va afficher les messages
// ---------------------------------------
 
if (isset($_GET['page']))
{
        $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
        $page = 1; // On se met sur la page 1 (par défaut)
}
 
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
 
$reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
 
while ($donnees = mysql_fetch_array($reponse))
{
        echo '<div="message_or"><p><strong>' . $donnees['pseudo'] . '</strong> a écrit :<br />' . $donnees['message'] . '</p></div>';
}
 
mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o)
?>
<div id="clear:both">
<?php include("includes/pied.php")?>

Ajouter un commentaire
Réponse
+0
moins plus
Vérifie le schéma de ta table. D'après cette page http://www.vulgarisation-informatique.com/... lorsque cette erreur arrive cela veut dire que tu as oublie de précisé une colonne dans ta requête.
Par exemple ta table a 5 champs et tu as fait une requête comme INSERT INTO livreor VALUES ('','','','')
L'erreur est d'oublier un champ.
Dans cet exemple la requête qui la bonne est celle-ci INSERT INTO livreor VALUES ('','','','','')
Ajouter un commentaire
Réponse
+0
moins plus
j'ai pas bien compris
Ajouter un commentaire
Réponse
+0
moins plus
Si tu as une table dans ta base de donnée qui comporte 5 colonnes (tu peux vérifier en cas de doute via phpmyadmin) et que tu veux entrer des données via un INSERT INTO, il faut être sur que les données iront dans les bonnes colonnes.

L'exemple donnée plus haut était:
INSERT INTO livreor VALUES ('', '', '', '')

C'est le cas d'une table à 4 colonnes. Chaque '' correspondant à une colonne.

Si tu as 2 colonnes, le code sera:
INSERT INTO livreor VALUES ('', '')

Si tu as 5 colonnes, le code sera:
INSERT INTO livreor VALUES ('', '', '', '', '')

Si tu as 6 colonnes, le code sera:
INSERT INTO livreor VALUES ('', '', '', '', '', '')

Si tu as 10 colonnes, le code sera:
INSERT INTO livreor VALUES ('', '', '', '', '', '', '', '', '', '')

Etc...

J'espère avoir été clair.
giheller- 10 janv. 2009 à 18:05
Bonsoir,

je ne suis pas tout à fait d'accord avec toi.
on peut trés bien faire un insert avec 3 valeurs dans une table qui contient 4 colonnes : la dernière ne sera pas renseignée;
par contre l'inverse ( 4 valeurs dans un table qui n'a que 3 colonnes) donne le message d'erreur spécifié.

--
web-actu- 10 janv. 2009 à 19:03
quel message d'érreur ?? celui que j'ai dit
web-actu- 10 janv. 2009 à 19:03
dans ma table ya 3 colone un id une pseudo une message
Ajouter un commentaire
Réponse
+0
moins plus
et la colonne ou tu met l'adresse IP elle est où ? rajoute s'en une en fin de table si elle n'existe pas. Comme disait Giheller par contre l'inverse ( 4 valeurs dans un table qui n'a que 3 colonnes) donne le message d'erreur spécifié c'est peut-être l'erreur que tu as fais
Ajouter un commentaire
Réponse
+0
moins plus
ok et je crois que tu as raison
Ajouter un commentaire
Réponse
+0
moins plus
D'après ce que tu citais comme code tu avais mis :
mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "',  '" . $ip . "')");

Tu essais donc d'entrer 4 valeurs dans visiblement trois colonnes.
Ajouter un commentaire
Réponse
+0
moins plus
beh oui j'ai mis sa dans la code et dans ma table ya 3 colone une id et pseudo et message
Ajouter un commentaire
Réponse
+0
moins plus
C'est donc de là que viens le message d'erreur. En fait tu lui demande d'entré une valeur dans une colonne inexistante.

Solutions :
- Soit tu enlèves le $id de ta requète sql,
- Soit tu créés une nouvelle colonne dans ta table pour pouvoir enregistrer cette donnée.
Ajouter un commentaire
Réponse
+0
moins plus
nouveau message d'erreur

Duplicate entry '0' for key 1
Ajouter un commentaire
Réponse
+0
moins plus
maitenant ma table conte colone

une id une pseudo une message une ip
Ajouter un commentaire
Réponse
+0
moins plus
http://riridi.olympe-network.com/livreor.php <<<<<<<<---- le lien
Ajouter un commentaire
Ce document intitulé « Livre d'or Problème en php/mySQL » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
Livre d'or Problème en php/mySQL - page 2