Poste un message style livre d'or [Résolu/Fermé]

Signaler
Messages postés
30
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
24 avril 2016
-
 Utilisateur anonyme -
Bonjour,



bonjour

j'espère être au bon endroit...

étant débutante, je voulais faire un truc très simple pour déposer un message en prenant pour base le livre d'or.

mon but est que sur cette page, je puisse faire une annonce météo.

j'ai créé ma table "longecote" avec id et message

Ensuite voici la page pour écrire l'annonce

<?php
include_once ('fonctions/injection.php');
//include ('fonctions/injection.php');


if ((isset($_POST['Message']))) {
// si la variable n'est pas vide, on fera notre insertion dans la base
if ((!empty($_POST['Message']))) {
// on se connecte à notre base
$base = mysql_connect ('localhost', 'base', 'mdp');
mysql_select_db ('longecote', $base);

// on prepare notre requête d'insertion des données
extract($_POST);
$sql = "INSERT INTO longecote (message) VALUES ('$message')";

// on lance la requête
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

// on ferme la connexion à la base de données
mysql_close();

// on redirige le visiteur vers la page
header('Location: acc_longecote.php');

// on termine le script courant
exit();
}}
// on entre dans le cas où le formulaire s'affichera).

?>

<html>

<head>

<title>Annonce Météo</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />


</head>

<body>

<font face="Comic Sans MS" size="4" >

<div align="center">

<!-- On commence le formulaire -->

<form action="acc_longecote.php" method="post">
<div>
<font face="Comic Sans MS" size="4" color="#006699"><b>
<b>Bonjour.
<br />Selon la météo, taper l'annonce pour le longe-côte / marche dans l'eau du mardi.</b>
<br /><br />
<br /><br />
<div>


<fieldset><legend>Saisir l'annonce</legend>
<br />

<textarea rows="7" name="message" cols="66"><?php if (isset($_POST['Message'])) echo htmlentities(trim($_POST['Message'])); ?></textarea>
<br /><br />

</fieldset>

<br /><br /><input type="submit" name="go" value="L'ajouter au site" /><br />


<br /><br />
</font>
</div>
</form>
</body>

</html>


donc, là, normalement si tout était correct, dans la table "longecote" sur phpmyadmin devrait s'inscrire l'annonce.

Ben non !
rien ne s'inscrit.


Ensuite, sur la page longecote où devrait se retrouver l'annonce voici :

<?php
// on se connecte à notre base

include ('protected/login.inc.php');


//--- Récupérer le dernier id dans une table ---//

$req1="select max(id) from longecote";
$res1=mysql_query($req1);
$idmax1=mysql_result($res1,0,"max(id)");
echo $idmax1;

$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

mysql_close();
?>


comme ce n'est pas un livre d'or, je ne veux que le dernier message posté.
mais de toutes les façons, rien ne se passe car ma table reste vide...

selon les modifications que je fais sur les pages, j'ai soit
La connexion a échoué, vérifiez que le serveur MySQL fonctionne.
soit
la table est vide.

Vu que j'ai pris les différents codes dans divers tuto et j'ai du faire pas mal d'erreurs qu'étant débutante je ne vois pas, évidemment.

pourriez-vous m'aider, svp ?
merci de votre patience

8 réponses

Salut

le mieux est de suivre un tuto complet sur le sujet parce qu'en collant des bouts de code pris à droite à gauche vous n'arriverez à rien.
Par exemple il ne faut plus utiliser les fonctions mysql_... et finir par mysql_close

De nos jours en php on utilise la notation objet PDO qui est plus sûre.

http://php.net/manual/fr/book.pdo.php

Une explication précise ici
http://php.developpez.com/faq/?page=pdo
Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 248
on utilise la notation objet PDO qui est plus sûre
Euphémisme.
Cf l'article de FAQ à propos de l'obsolescence (et dangerosité) de l'extension MySQL.
Messages postés
30
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
24 avril 2016
1
ôh pôvre !
j'ai mis un temps fou pour commencer à me faire peu à peu au php et vous parler de pdo ?

Je ne vais pas m'en sortir.... !

j'ai suivi votre conseil Hermit de suivre un tuto complet sur le sujet et j'ai toujours le même problème...

la table reste vide...
Messages postés
30
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
24 avril 2016
1
j'ai trouvé un tuto pdo... je vais tenter de le faire...
PDO si vous étiez allé voir la notice vous auriez vu que c'est une fonction de PHP utilisant la notation objet.

L'objet est une structure informatique non séquentielle.

Bonsoir

Quand tu auras réussi à faire fonctionner mysql avec PDO, tu vérifieras soigneusement les noms de tes champs. Dans ton formulaire, tu mets
name="message"
sans majuscule, alors qu'en PHP, tu testes
$_POST['Message']
avec un M majuscule. Ça ne peut pas marcher tel quel, il faut respecter la casse.
Messages postés
30
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
24 avril 2016
1
ok, je vais m'y atteler...
Messages postés
30
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
24 avril 2016
1
Bonsoir, c'est encore moi...

la méthode PDO j'ai essayé mais je n'y suis pas arrivée...

déjà, j'ai réussi à solutionner un problème en travaillant avec phpmyadmin, en insérant directement des messages et par bonheur, le dernier s'affiche sur la page, tel que je le voulais.

mais l'autre et le plus important reste insoluble pour moi
et ce n'est pas faute de chercher à comprendre.

je vous remets le code pour insérer une annonce en me fiant un tuto pour débutant...

mais il est certain qu'il y a une erreur, mais j'en peux plus de ne rien voir...

<?php
 include_once ('fonctions/injection.php');
  //include ('fonctions/injection.php');

if (isset($_POST['go']) && $_POST['go']=='L\'ajouter au site') {
						
	if ((isset($_POST['Message']))) {
		// si la  variable n'est pas vide, on fera notre insertion dans la base
		if ((!empty($_POST['Message']))) {
				// on se connecte à notre base
				mysql_connect ("localhost", "login-site", "mdp");
				mysql_select_db ("longecote");
				
			
				// on prepare notre requête d'insertion des données
				$Message = mysql_real_escape_string(htmlspecialchars($_POST['Message']));
				
				$sql = mysql_query("INSERT INTO longecote VALUES ('','" . $Message . "')");
               
  				// on lance la requête et on impose un message d'erreur
				mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

			// on ferme la connexion à la base de données
				mysql_close();

				// on redirige le visiteur vers la page
				header('Location: longecote.php');

				// on termine le script courant
		
				exit();
				
}}}
// on entre dans le cas où le formulaire s'affichera).

?>

<html>

<head>

<title>Annonce Météo</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />


</head>

<body >

    <font face="Comic Sans MS" size="4" >

  <div align="center">

  <!-- On commence le formulaire -->

<form action="longecote.php" method="post">
<div>
<font face="Comic Sans MS" size="4" color="#006699"><b>
<b>Bonjour.
<br />Selon la météo, taper l'annonce pour le longe-côte / marche dans l'eau du mardi.</b>
<br /><br />
<br /><br />
<div>


<fieldset><legend>Saisir l'annonce</legend>
<br />

    <textarea rows="7" name="Message" cols="66"><?php if (isset($_POST['Message'])) echo htmlspecialchars($_POST['Message']); ?></textarea>
 <br /><br />
 
</fieldset>

<br /><br /><input type="submit" name="go" value="L'ajouter au site" /><br />


<br /><br />
</font>
</div>
</form>
</body>

</html>


Dites-moi, svp, où ça coince...

merci pour votre aide et patience

Bonsoir

Il y a plusieurs erreurs et maladresses, mais a priori ça devrait quand même enregistrer ton message.
Les principaux points :
1 - As-tu un message d'erreur ? Quand il y en a un, il faut toujours le copier-coller intégralement, c'est une aide précieuse pour comprendre ce qui se passe.
2 - Tu mets action="longecote.php" dans ton formulaire : la page qui traite le formulaire s'appelle bien longecote.php ? Tout le code que tu montres est bien dans ce même fichier longecote.php ?
3 - Si tout ceci est bien dans le fichier longecote.php, il ne faut pas faire header('Location: longecote.php'); puisque on est déjà dans cette page !
4 - Essaye de piéger une éventuelle erreur de connexion à la bas en ajoutant un
or die (mysql_error());
aprés le mysql_connect et le mysql_select_db.
5 - Tu fais deux fois appel à mysql_query : c'est une fois de trop. Tu devrais supprimer le premier appel pour avoir
$sql="ta requête";
mysql_query($sql);
au lieu de
$sql=mysql_query("ta requête");
mysql_query($sql);


Quand tout ça marchera, il faudra songer à passer à mysqli_ ou PDO car mysql_ est vraiment, vraiment déconseillé maintenant.
Messages postés
30
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
24 avril 2016
1
bonsoir,

mer revoilà, une fois de plus vers vous...

donc, le père, pour répondre à toi... si tu veux encore m'aider, bien sûr...

"1 - As-tu un message d'erreur ? " => non, je n'ai pas de message d'erreur

"2 - Tu mets action="longecote.php" dans ton formulaire" => non, c'est une erreur ma page s'appelle "acc_longecote.php"

"il ne faut pas faire header('Location: longecote.php');" => j'ai supprimé
et pour 4 et 5 j'ai fait les modif...

Ca, c'était pour répondre...

J'ai refait des modifications dont voici la nouvelle page.

Déjà, un bon point pour moi, qui ne le sera pas pour toi car tu va y trouver des erreurs, mais ENFIN, ma table longecote enregistre les messages...

Par contre, mon nouveau souci, et j'ai cherché, c'est que maintenant, je n'ai plus accès à ma page directement.

j'aimerai quand on a "posté" le message, aller directement sur ma page "acc_longecote.php" ; hors, je reste sur la page "annonce" mais toute blanche...

peux-tu m'aiguiller ?

promis, dès que j'aurai ces pages en fonction, pour la semaine prochaine, je me mettrai au pdo

je te redonne mon code

<!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>Annonce Météo</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />


</head>

<body>

    <font face="Comic Sans MS" size="4" >

  <div align="center">

  <!-- On commence le formulaire -->
  
<?php
 include_once ('fonctions/injection.php');
  //include ('fonctions/injection.php');

if (isset($_POST['go']) && $_POST['go']=='L\'ajouter au site') {
						
			// si la  variable n'est pas vide, on fera notre insertion dans la base
		if ((!empty($_POST['Message']))) {
				// on se connecte à notre base
				mysql_connect ("localhost", "login-site", "mdp");
				mysql_select_db ("longecote");
				
			
				// on prepare notre requête d'insertion des données
				$Message = mysql_real_escape_string(htmlspecialchars($_POST['Message']));
				
				$sql = "INSERT INTO longecote VALUES ('','" . $Message . "')";

  				// on lance la requête et on impose un message d'erreur
				mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

			// on ferme la connexion à la base de données
				mysql_close();

						
				// on termine le script courant
		
				exit();
				
}}
// on entre dans le cas où le formulaire s'affichera).

?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES); ?>" method="post">

<div>
<font face="Comic Sans MS" size="4" color="#006699"><b>
<b>Bonjour.
<br />Selon la météo, taper l'annonce pour le longe-côte / marche dans l'eau du mardi.</b>
<br /><br />
<br /><br />
<div>


<fieldset><legend>Saisir l'annonce</legend>
<br />

    <textarea rows="7" name="Message" id="Message" cols="66"><?php if (!empty($_POST['Message'])) : echo htmlspecialchars($_POST['Message']); endif; ?></textarea>
    
 <br /><br />
 
</fieldset>

<br /><br /><input type="submit" name="go" value="L'ajouter au site" /><br />


<br /><br />
</font>
</div>
</form>
</body>

</html>


comment basculer directement sur la page où l'annonce s'affichera ?

Ça y est presque, du moins il me semble.
Tu restes sur une page blanche parce que tu as retiré le
header("Location..."
. Je t'avais dit de le retirer parce que c'était une redirection vers la page elle-même, ce qui n'avait pas de sens. Si c'est vers une autre page, il faut le remettre.
MAIS il y a un mais. Un petit, je te rassure.
La fonction header DOIT être appelée avant l'envoi des données (code HTML et echo du PHP) au client.
Donc avant ta balise<!DOCTYPE>
Il faut même faire attention à ne pas laisser une simple ligne vide avant la première balise <?php
Il faut donc remettre le traitement PHP au début, comme tu l'avais fait dans ton message initial.
Messages postés
30
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
24 avril 2016
1
je te remercie grandement pour ton aide et ta patience.

par contre, j'ai remplacé la ligne header() par une redirection javascript.

et ça fonctionne...

Quand j'aurai mis ma tête au repos... je verrai pour tout remettre en pdo bien que j'ai déjà essayé en suivant un tuto apparemment bien fait mais j'ai des messages d'erreur qu'il faut que j'arrive à comprendre et à corriger.

En attendant, encore un énorme MERCI pour ton écoute
Utilisateur anonyme
De rien :)