PHP-MySQL: Insertion de donnée dans une table vide
Bonjour
J'ai rédigé un script php (à partit du tutoriel sur un "minichat") pour l'insertion de message dans une base de données. Mon script marche uniquement lorsqu'il y a préalablement un message dans ma table "minichat".
J'ai géré la non insertion des doublons pour un même utilisateur. J'ai déjà procédé à des vérifications de mon code et d'autres recherches. Mais je n'arrive pas à résoudre ce problème.
Je fournis le code entier du fichier minichat.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
<!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=ISO-8859-1" />
<!-- link rel="stylesheet" type="text/css" href="style_div.css"/> -->
<title>Minichat </title>
<style type="text/css">
body
{
background-color: gray;
text-align :center;
}
p
{
background-color:green;
text-align :center;
}
</style>
</head>
<!-- 1) Création du formulaire : -->
<body>
<h3> Espace de communication instantanné </h3>
<form action="minichat.php" method="post">
<fieldset>
<legend>Formulaire pour le livre dor </legend>
<label for="pseudo"> Pseudo </label>:
<input type="text" id="pseudo" name="pseudo" size="10" maxlength="15" />
<br /><br />
<label for="message"> Message </label>:
<textarea rows="7" cols="35" id="message" size="200" name="message" maxlength="255">
</textarea>
<br />
<input type="submit" value="Envoyer" />
</fieldset>
</form>
<p class="page">
<?php
/* Connexion à MySQL */
/* 2) Enregistrement d'un message envoyé : // Si les variables existent */
if(isset($_POST['pseudo']) AND isset($_POST['message']))
{
if (($pseudo != NULL AND $message != NULL)
AND ($doublon['pseudo'] != $pseudo OR $doublon['message'] != $message))
{
// et qu'on a quelque chose à enregistrer alors on se connecte à MySQL
mysql_connect("localhost", "usernonroot", "passwdfordb");
mysql_select_db("dbname");
$pseudo = $_POST['pseudo'];
$message = $_POST['message'];
$message = nl2br($message);
$old_message = mysql_query("SELECT pseudo, message FROM minichat ORDER BY id DESC LIMIT 0, 1");
while ($doublon = mysql_fetch_array($old_message))
// Ecriture du message si, les champs ne sont ni vides ni des doublons
mysql_query("INSERT INTO minichat (pseudo, message) VALUES ('$pseudo', '$message')") or die('Problème de connexion à la base' . mysql_error());
echo '<p><strong> Un message a été ajouté à la table ! </strong></p>'
}
}
// Comptage des messages :
mysql_connect("localhost", "usernonroot", "passwdfordb");
mysql_select_db("dbname");
$message_number = mysql_query("SELECT COUNT(*) As nbr_msg FROM minichat ");
$messages = mysql_fetch_array($message_number);
// Fermeture de la connexion à MySQL
mysql_close();
?>
<p><strong> Il y a <?php echo $messages['nbr_msg']; ?> dans la base de données </strong></p>
<br />
<?php
/* 3) Lecture dans une table pour l'affichage des messages : */
mysql_connect("localhost", "usernonroot", "passwdfordb");
mysql_select_db("dbname");
$req = mysql_query("SELECT pseudo, message FROM minichat ORDER BY id DESC LIMIT 0, 10") or die('Problème d\'accèse aux données' . mysql_error());
mysql_close();
while($messages = mysql_fetch_array($req))
{
?>
<p>
<strong>
<?php echo $messages['pseudo']; ?>
</strong> a dit :
<?php echo $messages['message']; ?>
</p>
<?php
}
?>
</body>
</html> |
Merci pour la contribution de chacun.
PHP-MySQL: Insertion de donnée dans une table vide- Le problème persisite.
Bonjour,
Merci pour votre indication. En fait j'ai l'impression que gérer ce problème de doublon est plus compliqué que je ne m'y attendais. J'ai utilisé les variables de session. J'ai veillé à définir les variables $pseudo et $message avant tout traitement(Je ne sais pas si la manière de faire est bonne c'est à dire garder $_POST['pseudo'] alors que j'ai créée une session ?) .
Toujours est-il que je n'arrive pas obtenir ce que je veux(En rechargeant la page que le dernier message ne soit pas dupliqué et/ ou que le même utilisateur ne stocke deux fois le même message).Voici en effet un résultat de l'éxécution de mon script: Tout est OK sauf la résolution des doublons et insertion de message vide :
messageMinichat
C'est pourtant ce que je traite dans ma condition :
Code:
1 2
|
if (($pseudo != NULL && $message != NULL) && ($doublon['pseudo'] != $pseudo || $doublon['message'] != $message)) |
Voici le code retouché :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
<?php
// Démarrage de la sesion :
session_start();
$_SESSION['pseudo'] = $_POST['pseudo'];
// $_SESSION['message'] = $_POST['message'];
?>
<!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=ISO-8859-1" />
<!-- link rel="stylesheet" type="text/css" href="style_div.css"/> -->
<title>Minichat </title>
<style type="text/css">
body
{
background-color: gray;
text-align :center;
}
p
{
background-color:green;
text-align :center;
}
</style>
</head>
<!-- 1) Création du formulaire : -->
<body>
<h3> Espace de communication instantanné </h3>
<form action="minichat.php" method="post">
<fieldset>
<legend>Formulaire pour le minichat </legend>
<label for="pseudo"> Pseudo </label>:
<!-- <input type="text" name="pseudo" value="?php echo $_POST['pseudo']; ?>" /> -->
<input type="text" id="pseudo" name="pseudo" value="<?php echo $_SESSION['pseudo']; ?>" />
<br /><br />
<label for="message"> Message </label>:
<textarea rows="7" cols="35" id="message" size="200" name="message" maxlength="255">
</textarea>
<br />
<input type="submit" value="Envoyer" />
</fieldset>
</form>
<p class="page">
<?php
mysql_connect("localhost", "usernonroot", "passwdfordb");
/* Connexion à MySQL */
mysql_select_db("dbname");
if(isset($_POST['pseudo']) && isset($_POST['message']))
{ // Utilisation des fonctions PHP pour la sécurité
$pseudo = $_POST['pseudo'];
$message = $_POST['message'];
$message = nl2br($message);
$old_message = mysql_query("SELECT pseudo, message FROM minichat ORDER BY id DESC LIMIT 0, 1");
while ($doublon = mysql_fetch_array($old_message))
{
/* 2) Enregistrement d'un message envoyé : // Si les variables existent */
// Vérification du dernier message pour eviter un doublon
if (($pseudo != NULL AND $message != NULL)
&& ($doublon['pseudo'] != $pseudo || $doublon['message'] != $message))
{
// Ecriture du message si, les champs ne sont ni vides ni des doublons
mysql_query("INSERT INTO minichat (pseudo, message) VALUES ('$pseudo', '$message')") or die('Problème de connexion à la base' . mysql_error());
echo '<p><strong> Un message a été ajouté à la table ! </strong></p>';
}
}
}
// Comptage des messages :
$message_number = mysql_query("SELECT COUNT(*) As nbr_msg FROM minichat ");
$messages = mysql_fetch_array($message_number);
?>
<p><strong> Il y a <?php echo $messages['nbr_msg']; ?> dans la base de données </strong></p>
<br />
<?php
/* 3) Lecture dans une table pour l'affichage des messages : */
$req = mysql_query("SELECT pseudo, message FROM minichat ORDER BY id DESC LIMIT 0, 10") or die('Problème d\'accèse aux données' . mysql_error());
mysql_close();
while($messages = mysql_fetch_array($req))
{
?>
<p>
<strong>
<?php echo $messages['pseudo']; ?>
</strong> a dit :
<?php echo $messages['message']; ?>
</p>
<?php
}
?>
</body>
</html> |
Pensez vous que mon code comme tel est adapté pour ce que je veux faire?
Merci pour la disponibilité que vous accordez à la résolution de mon problème.
PHP-MySQL: Insertion de données dans une table vide
Bonjour à tous.
(Merci à MaitrePylos)
Vos indications m'ont clarifié bien des détails. Cependant il persiste deux petits problèmes :
1) Si la table est vide aucun nouvel enregistrement n'est possible.(J'arrive à contourner ce problème par le fait que j'ai un autre script PHP non optimisé à travers lequel j'accède à la même table. Mais avec la version finale donnée ci-dessous je n'y parviens pas; si je vide la dite table à travers PHPMYADMIN...)
2) Si le champs pseudo est non nul, il arrive qu'un message vide puisse être envoyé :? J'ai effectué un test avec la fonction empty() tout au début de mon script. Mais ça ne change pas le résultat : Exemple de résultat.
Le code complet est indiqué ci-dessous:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
<!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=ISO-8859-1" />
<!-- link rel="stylesheet" type="text/css" href="style_div.css"/> -->
<title>Ma page de minichat </title>
<style type="text/css">
body
{
background-color: white;
text-align :center;
}
p
{
background-color:inherit;
text-align :center;
}
</style>
</head>
<!-- 1) Création du formulaire : -->
<body>
<h3> Chat en mini chat </h3>
<form action="minichat.php" method="post">
<fieldset>
<legend>Formulaire pour le minichat </legend>
<label for="pseudo"> Pseudo </label>:
<!-- <input type="text" name="pseudo" value="?php echo $_POST['pseudo']; ?>" /> -->
<!-- <input type="text" id="pseudo" name="pseudo" value="?php echo $_SESSION['pseudo']; ?>" /> -->
<input type="text" id="pseudo" name="pseudo" size="10" maxlength="15" />
<br /><br />
<label for="message"> Message </label>:
<textarea rows="7" cols="35" id="message" size="200" name="message" maxlength="255">
</textarea>
<br />
<input type="submit" value="Envoyer" />
</fieldset>
</form>
<p class="page">
<?php
mysql_connect("localhost", "usernonroot", "passwdfordb");
/* Connexion à MySQL */
mysql_select_db("dbname");
if(isset($_POST['pseudo']) && isset($_POST['message']))
{
if((!empty($_POST['pseudo'])) || (!empty($_POST['message'])))
{
($_POST['pseudo'])!=""? $pseudo = $_POST['pseudo']:$pseudo = NULL;
($_POST['message'])!=""? $message = nl2br($_POST['message']):$message = NULL;
/*$old_message = mysql_query("SELECT pseudo,
message FROM minichat ORDER BY id DESC LIMIT 0, 1");*/
$old_message = mysql_query("SELECT pseudo, message FROM minichat ");
while ($doublon = mysql_fetch_array($old_message))
{
/* 2) Enregistrement d'un message envoyé : // Si les variables existent */
// Vérification du dernier message pour eviter un doublon
if (($pseudo != NULL && $message != NULL)
&& ($doublon['pseudo'] != $pseudo && $doublon['message'] != $message))
{
// Ecriture du message si, les champs ne sont ni vides ni des doublons
mysql_query("INSERT INTO minichat (pseudo, message) VALUES ('$pseudo',
'$message')") or die('Problème de connexion à la base' . mysql_error());
}
}
echo '<p><strong> Un message a été ajouté à la table ! </strong></p>';
}
else
echo '<p><strong> Aucuns message ajouté à la table !
Vérifiez les champs nuls </strong></p>';
}
// Comptage des messages :
$message_number = mysql_query("SELECT COUNT(*) As nbr_msg FROM minichat ");
$messages = mysql_fetch_array($message_number);
// Fermeture de la connexion à MySQL
// mysql_close();
?>
<p><strong> Il y a <?php echo $messages['nbr_msg']; ?> dans la base de données </strong></p>
<br />
<?php
/* 3) Lecture dans la table pour l'affichage des messages : */
$req = mysql_query("SELECT pseudo, message FROM minichat ORDER BY id DESC LIMIT 0, 10")
or die('Problème d\'accèse aux données' . mysql_error());
mysql_close();
while($messages = mysql_fetch_array($req))
{
?>
<p>
<strong>
<?php echo $messages['pseudo']; ?>
</strong> a dit :
<?php echo $messages['message']; ?>
</p>
<?php
}
?>
</body>
</html> |
Merci pour votre disponibilité de même qu'à toutes les têtes bien pensantes qui s'investissant à communiquer leur savoir sans condition matérielle.
PHP-MySQL: Insertion de donnée dans une table vide - dernières tentatives
Merci Obito
Mais même en corrigeant la condition, le problème persiste. C'est à bizarre! C'est peut être ma dernière tentative de recherche de solution à ce problème 8O. Je crois que vais avancer dans l'apprentissage de PHP. Quand je découvrirai les rouages du langage la solution me viendra probablement par expérience.
extrait du code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| ..
<?php
mysql_connect("localhost", "usernonroot", "paswdfordb");
/* Connexion à MySQL */
mysql_select_db("dbname");
if((isset($_POST['pseudo']) && isset($_POST['message'])) &&
(!empty($_POST['pseudo'])) && (!empty($_POST['message'])))
{
// Utilisation des fonctions PHP pour la sécurité
($_POST['pseudo']!="")? $pseudo = $_POST['pseudo']:$pseudo = NULL;
($_POST['message']!="")? $message = nl2br($_POST['message']):$message = NULL;
$message = nl2br($message);
$old_message = mysql_query("SELECT pseudo, message FROM minichat ");
while ($doublon = mysql_fetch_array($old_message))
{
/* 2) Enregistrement d'un message envoyé : // Si les variables existent */
// Vérification du dernier message pour eviter un doublon
if (($pseudo != NULL && $message != NULL) && ($doublon['pseudo'] != $pseudo && $doublon['message'] != $message))
{
// Ecriture du message si, les champs ne sont ni vides ni des doublons
mysql_query("INSERT INTO minichat (pseudo, message) VALUES ('$pseudo', '$message')") or die('Problème de connexion à la base' . mysql_error());
echo '<p><strong> Un message a été ajouté à la table ! </strong></p>';
}
}
}
// Comptage des messages :
$message_number = mysql_query("SELECT COUNT(*) As nbr_msg FROM minichat ");
$messages = mysql_fetch_array($message_number);
?>
... |
Affichage obtenu : PseudoNonVideMaisMessageVide
Contenu minchat Sous PHPMYADMIN
Merci à tous ceux qui bien voulu m'aider et ceux qui seraient prêts à un dernier effort pour que mon code produise le résultat attendu.