Newsgroup: it.comp.www.php
Titolo: fare un redirect senza eseguire due volte la query

Ho una pagina con questo form:
<form action="savenews.php" method="post" 
enctype="multipart/form-data">
<fieldset>
<legend><b>Inserisci una nuova News</b></legend>
<p>
Scrivi Titolo:<br>
<input type="text" name="titolonews" size="20" ><br><br>
Scrivi News:<br>
<textarea cols=55 rows=6 name="testonews"></textarea><br><br>
<input name="submit_upload" type="submit" value="Invia">
</fieldset>
</p>
</form>
e savenews.php è così:
<?php
include_once("../../include/config.inc.php");
$titolo=$_POST["titolonews"];
$testo=$_POST["testonews"];
$titolo = nl2br(htmlentities($titolo, ENT_QUOTES));
$testo = nl2br(htmlentities($testo, ENT_QUOTES));
$query = "INSERT INTO news (titolo, testo) VALUES ('".$titolo."', 
'".$testo."')";
mysql_query($query);
if (!(@mysql_query($query))) {
echo "Errore nell'inserimento: ". mysql_error();
}else{
header("Refresh: 3;URL=../../index.php");
echo '<div align="center">News inserita con successo</div>';
}
?>
Il problema è quel header che fa ricaricare due volte quella pagina (mi 
pare di capire) e che quindi mi scrive due volte il record nel db, ma 
allora come posso far visualizzare la scritta "News inserita con 
successo" per 3 secondi e poi fare il redirect ad una determinata 
pagina? :-/
-- 
-ciao       Raziel       #ICQ 314405452
[HT] Real Quilian (851574) - Italia - VII.481
http://razielweb.altervista.org

 e poi fare il redirect ad una determinata pagina? :-/
Il redirect lo puoi fare utilizzando il tag <meta> nell'head:
<meta http-equiv="Refresh" content="3;url=
http://www.indirizzo.it
">
e anche via javascript:
<script type="text/javascript">
<!--
function doRedirect() {
   location.href = "
http://www.indirizzo.it/
";
}
window.setTimeout("doRedirect()", 3000);
//-->
</script>
rob4you

 <meta http-equiv="Refresh" content="3;url=
http://www.indirizzo.it
">
sarò cretino io, ma non mi funziona
<?php
include_once("../../include/config.inc.php");
$titolo=$_POST["titolonews"];
$testo=$_POST["testonews"];
$titolo = nl2br(htmlentities($titolo, ENT_QUOTES));
$testo = nl2br(htmlentities($testo, ENT_QUOTES));
$query = "INSERT INTO news (titolo, testo) VALUES ('".$titolo."', 
'".$testo."')";
mysql_query($query);
if (!(@mysql_query($query))) {
$msg="Errore nell'inserimento: ". mysql_error();
}else{
$msg='<div align="center">News inserita con successo</div>';
}
?>
<html>
<head>
<meta http-equiv="Refresh" content="3;url=../../index.php">
<title></title>
</head>
<body>
<?=$msg?>
</body>
</html>


 <?=$msg?>
Se usi questa forma, ciò vuol dire che hai gli short tags attivi. Li 
hai attivi, vero? :-)
Vabé, sicuro che non sarà problema di short tags, vediamo:
1) prova a inserire un url assoluto e non relativo (non si sa mai);
2) usa anche, nella stessa pagina il redirect via javascript (inserito 
nel tag <head>) che ti ho segnalato nel post precedente;
3) svuota la cache del browser;
4) prova con diversi browser per vedere l'effetto che fa.
rob4you

 4) prova con diversi browser per vedere l'effetto che fa.
PS: OVVIAMENTE il file che includi all'inzio non dà nessun output, 
vero? Altrimenti è ovvio che non funzionerà.
rob4you

 vero? Altrimenti è ovvio che non funzionerà.
è solo il file che si occupa della connessione al db


 ?>
è questa parte il problema... infatti commentandola mi esegue una volta 
sola la query... ma che c'è di sbagliato?


> provato con IE7 e Firefox2... niente da fare :(
Guarda, non so che dirti, perché io ho provato proprio ora con FF2, 
Opera9, IE6 e funziona.
Non è stato nemmeno necessario inserire il codice javascript: ho usato 
solo il tag meta, per giunta con un path relativo (del tipo 
../cartella/nome_file.php) ed è andato tutto ok.
rob4you

 la query... ma che c'è di sbagliato?
Aaaa si, che stupido....come ho fatto a non notarlo prima: è ovvio che 
te la esegua due volte, perché tu la fai eseguire due volte: una 
nell'if, e una al rigo sopra. Fai invece una cosa del genere:
$query = "INSERT INTO news (titolo, testo) VALUES ('".$titolo."', 
'".$testo."')";
$risultato=@mysql_query($query);
if (!$risultato) {
$msg="Errore nell'inserimento: ". mysql_error();
}else{
$msg='<div align="center">News inserita con successo</div>';
}
e vedrai che va tutto come vuoi tu.
rob4you

 e vedrai che va tutto come vuoi tu.
ora sì! :)
grazie mille per la pazienza
