Livre d'or Problème en php/mySQL

Résolu/Fermé
Signaler
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
-
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
-
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à...

33 réponses

Messages postés
2064
Date d'inscription
vendredi 29 juin 2007
Statut
Contributeur
Dernière intervention
7 décembre 2017
713
salut!
C'est quoi ton problème??
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
c'est que j'arrive pas a poster un message
0
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
469
Qu'est-ce qui bloque ? Qu'est-ce qui se passe ? Quelle message d'erreur ?
0

A cet endroit
<input type="hidden" name="pseudo" value="<?php echo $_SESSION['pseudo'] ?>"/>

Il te manque un ; après $_SESSION['pseudo'].
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
tu es raison mais ca marche quand meme pas
0
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
469
Et si tu répondais a mes questions ?
0

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.
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
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
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
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
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
<?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")?>

0

Vérifie le schéma de ta table. D'après cette page https://www.vulgarisation-informatique.com/faq-419--column-count-doesnt-match-value-at-row-1.php 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 ('','','','','')
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
j'ai pas bien compris
0
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
469
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.
0
Utilisateur anonyme
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é.

--
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6 > Utilisateur anonyme
quel message d'érreur ?? celui que j'ai dit
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
dans ma table ya 3 colone un id une pseudo une message
0

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
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
ok et je crois que tu as raison
0
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
469
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.
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
beh oui j'ai mis sa dans la code et dans ma table ya 3 colone une id et pseudo et message
0
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
469
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.
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
nouveau message d'erreur

Duplicate entry '0' for key 1
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
maitenant ma table conte colone

une id une pseudo une message une ip
0
Messages postés
99
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
21 août 2009
6
http://riridi.olympe-network.com/livreor.php <<<<<<<<---- le lien
0