Actualiser en php santout renvoyer.

.Steff

Membre expert
Club iGen
6 Septembre 2005
1 294
104
Bonjour,
mon problème est le suivant :
J'ai créée un formulaire pour envoyer un message sur un livre d'or et quand on envoie le formulaire, on retombe sur la page ou les messages sont affichés, avec notre nouveau en plus, et si on actualise à ce moment, alors ca renvoie une deuxieme fois le tout et ainsi de suite.
Y'aurait il une solution pour éviter cela ?

D'avance merci !:up:
 
Je veux bien t'aider mais déjà tu ne donne pas de code. La réponse dépendrait de ce que tu as fait.
 
Bloc de code:
if  (isset($_POST['pseudo']) AND isset($_POST['message']) )
{
    $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); 
    $url = $_POST['url'];    
    $message = htmlentities($_POST['message'], ENT_QUOTES); 
    $message = htmlentities($_POST['message'], ENT_QUOTES); 
    $message = nl2br($message);
    $ip = $_SERVER['REMOTE_ADDR'];
$date = date("d-m-Y");
	$heure = date("H:i");
    mysql_query("insert into livreor VALUES('', '" . $pseudo . "', '" . $message . "','" . $url ."','" . $ip ."','" . $date ."','" . $heure ."')") or die ("mysqlerror()");
}

Voilà et ensuite j'affiche.
Bloc de code:
$reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
echo '<hr />';

while ($donnees = mysql_fetch_array($reponse))

{

	if ( ($donnees['url']!="") && ($donnees['url']!="http://") )

	{

	echo '<center><strong>
		<table border=0 width="100%">
			<tr><td align=center bgcolor="pink">
					<font color="blue">' . $donnees['pseudo'] . '</font>   <a href=' . $donnees['url'] .' class="menub" target="_blank">"Son site"</a></strong> a &eacute;crit :<br />
				</font>	</td>
			</tr>
			<tr><td align=left><p class="texte">' . $donnees['message'] . '</p>
			</tr></td></center><br /></table><hr />';

	}

	else

	{		

	echo '<center><strong><br>
		<table border=0 width="100%">
			<tr><td align=center bgcolor="pink">
					<font color="blue">' . $donnees['pseudo'] . '</font></strong> a &eacute;crit :<br />
			</td></tr><tr><td align=left><p class="texte">' . $donnees['message'] . '</p>
			</tr></td></table></center><hr />';



	}	



}

Donclà quand on actualise, ben ca renvoie le message.
C'est pas possible de vider les variables? ou je sais pas quoi, sans pour autant envoyer des info vide dans la base de données?
 
C&#224; peut fonctionner en vidant les variables mais il faut aussi changer ceci:

Bloc de code:
if  (isset($_POST['pseudo']) AND isset($_POST['message']) )
en ceci:

Bloc de code:
if  ($_POST['pseudo'] != "" AND $_POST['message'] != "")
puisqu'avec $_POST['pseudo'] != "", la variable existe toujours.
Faut les vider juste apr&#232;s la ligne d'execution de la requ&#234;te.
Je ne me souviens plus si il y a une m&#233;thode pour virer la variable de la m&#233;moire.



On peut v&#233;rifier aussi que le bouton du formulaire a &#233;t&#233; cliqu&#233;:

Bloc de code:
<input type="submit" name="sended" value="submitted"  />
pour le HTML

et
Bloc de code:
if($_POST['sended'] == "submitted"){
  //actions
}
pour le PHP


Je pense que la partie sur le bouton du formulaire ne servira pas
 
Bloc de code:
if  (isset($_POST['pseudo']) AND isset($_POST['message']) )
{
    $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); 
    $url = $_POST['url'];    
    $message = htmlentities($_POST['message'], ENT_QUOTES); 
    $message = htmlentities($_POST['message'], ENT_QUOTES); 
    $message = nl2br($message);
    $ip = $_SERVER['REMOTE_ADDR'];
    $date = date("d-m-Y");
    $heure = date("H:i");
    mysql_query("insert into `livreor` VALUES('', '" . $pseudo . "', '" . $message . "','" . $url ."','" . $ip ."','" . $date ."','" . $heure ."')") or die ("mysqlerror()");
}

Voil&#224; et ensuite j'affiche.
Bloc de code:
$reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
echo '<hr />';

while ($donnees = mysql_fetch_array($reponse))

{

	if ( ($donnees['url']!="") && ($donnees['url']!="http://") )

	{

	echo '<center><strong>
		<table border=0 width="100&#37;">
			<tr><td align=center bgcolor="pink">
					<font color="blue">' . $donnees['pseudo'] . '</font>   <a href=' . $donnees['url'] .' class="menub" target="_blank">"Son site"</a></strong> a &eacute;crit :<br />
				</font>	</td>
			</tr>
			<tr><td align=left><p class="texte">' . $donnees['message'] . '</p>
			</tr></td></center><br /></table><hr />';

	}

	else

	{		

	echo '<center><strong><br>
		<table border=0 width="100%">
			<tr><td align=center bgcolor="pink">
					<font color="blue">' . $donnees['pseudo'] . '</font></strong> a &eacute;crit :<br />
			</td></tr><tr><td align=left><p class="texte">' . $donnees['message'] . '</p>
			</tr></td></table></center><hr />';



	}	



}

Doncl&#224; quand on actualise, ben ca renvoie le message.
C'est pas possible de vider les variables? ou je sais pas quoi, sans pour autant envoyer des info vide dans la base de donn&#233;es?
le formulaire, tu le fait pointer sur un autre script php qui ins&#232;re la valeur dans le livre d'or (sans rien envoyer au navigateur) puis qui renvoit vers l'autre page avec un header.
si le livre d'or est dans livreor.php, tu fais pointer le formulaire sur addtolivreor.php qui contient
Bloc de code:
<?php
if  (isset($_POST['pseudo']) AND isset($_POST['message'])) {
    $pseudo = addslashes(htmlentities($_POST['pseudo'], ENT_QUOTES)); 
    $url = $_POST['url'];    
    $message = addslashes(nl2br(htmlentities($_POST['message'], ENT_QUOTES)));
    $ip = $_SERVER['REMOTE_ADDR'];
    $date = date("d-m-Y");
    $heure = date("H:i");
    $connex = mysql_connect(xxx,xxx,xxx);
    mysql_select_db(xxx);
    mysql_query("INSERT INTO `livreor` VALUES('', '$pseudo', '$message', '$url', '$ip', '$date', '$heure')") or die ("mysqlerror()");
    mysql_close($connex);
    header('Location: livreor.php');
}
else {
    header('Location: livreor.php?erreur');
}
?>

Ou alors utilise ajax.
 
  • J’aime
Réactions: .Steff
Ajax est la combinaison entre plusieurs technologies: tout au moins Javascript, css et XHTML. Celà reste donc de la programmation client, mais de la programmation. Google utilise celà pour le webmail ou google Map, et aussi l'agenda. Ainsi, on peut faire des applications clients riches sur le web. Comme PHP, on peut récupérer des valeurs de formulaires, etc...

exemple simple ici avec un ficheir xml:

http://haxe.org/tutos/ajax?s=ajax
 
je ne connais pas Ajax. En quoi est ce que ca pourrait m'&#234;tre utile ?!
En fait en utilisant ajax tu pourrait ajouter un message a ton livre d'or sans que la page ne se recharge enti&#232;rement (il y aurait juste un billet qui s'ajouterai).

Donc apr&#232;s si on r&#233;actualise les donn&#233;es du formulaires ne seront pas r&#233;envoy&#233;es.



Mais ce que je t'ai donn&#233; marche tr&#232;s bien et tu n'a pas besoin d'ajax pour faire cela :)
 
Mais ce que je t'ai donn&#233; marche tr&#232;s bien et tu n'a pas besoin d'ajax pour faire cela :)
Ha ca c'est sur ton code que tu m'a donn&#233; avec le Header fonctionne a merveille. Je ne connaissais pas du tout cette m&#233;thode mais alors ca change la vie (en tout cas la partie de la vie ou je code du php :) ).
Merciii beaucoup !!!!! :up: :up:
 
La solution la plus rapide, mais surement la moins propre au niveau du developpement, est d'afficher le livre d'or dans une ilayer. Dans la page qui va integrer cette ilayer, tu peux mettre ton formulaire avec dans le tag form target=le name de ta ilayer
 
La solution la plus rapide, mais surement la moins propre au niveau du developpement, est d'afficher le livre d'or dans une ilayer. Dans la page qui va integrer cette ilayer, tu peux mettre ton formulaire avec dans le tag form target=le name de ta ilayer
C'est m&#234;me pas valide XHTML 1.1 les iLayer :eek:, et le mot n'existe pas sur w3school.com :p

personnelement je ne trouve pas que ce soit une solution ;)


EDIT : c'est hors sujet, mais met une marge en le borde de gauche et ton texte, la c'est trop coll&#233; c'est &#233;nervant &#224; la lecture
Bloc de code:
#content {
    padding-left: 4px;
}
 
:D ha d'accord. Je m'occupe pas trop de mon blog en ce moment. Mais j'y penserais d&#232;s que j'aurais le temps.
Merci du tuyau !
 
:D ha d'accord. Je m'occupe pas trop de mon blog en ce moment. Mais j'y penserais d&#232;s que j'aurais le temps.
Merci du tuyau !
mais y a pas de tuyeau pour toi, je te dit dans le post pr&#233;c&#233;dent que je parle du blog dans la signature de nde :rateau:
entre z&#233;ro et un, le blog dans sa signature qui est bien mais &#233;nervant &#224; lire &#224; cause de l'&#233;criture toute coll&#233; au bord.

:p