Caricare nuova pagina dopo invio dati form

Prom

Nuovo Utente
27 Gen 2015
6
0
0
Ciao a tutti,

Sono una novellina di siti web e sto cercando di scrivere un questionario per i miei studenti.
Ho creato un form con le varie domande, al click su Invia viene eseguita una funzione javascript che controlla che tutte le domande obbligatorie abbiano ricevuto risposta e, in tal caso, viene eseguita una pagina php che scrive su un file i dati inseriti. Fin qui tutto ok.

1) Vorrei che la pagina php non venisse caricata in una nuova finestra, ma nella stessa tab del questionario, è possibile?

2) Se non è possibile, posso farla chiudere automaticamente? E contemporaneamente caricare una nuova pagina al posto del questionario?

Sostanzialmente, quello che vorrei, è che, dopo aver risposto e inviato i dati, venisse visualizzata una pagina di ringraziamento e non rimanessero tutte le domande con le risposte.

Grazie a chiunque vorrà aiutarmi!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
scusa ma non ho capito bene, dici di avere una pagina php che elabora i dati del form inserendoli in un file txt, ma se non li fai stampare (echo o print) non li vedi
mettiamo che tu abbia le due pagine (metto i nomi a caso) form.php e elabora.php
form.php
HTML:
<form action="elabora.php" method="post">
<!-- tutti i vari campi di input -->
<input type="submit" name="Submit" value="Invia">
</form>
elabora.php
PHP:
<?php
//ricevi i vari dati
$dato_1=$_POST[['dato_1'];
$dato_2=$_POST[['dato_2'];
//ecc....
//e li metti nel file
echo "grazie di aver risposto al questionario<br />";
//e rimandi dove vuoi es. con un link
echo "<a href=\"index.php\">torna alla index</a>";
?>
o se vuoi un ritorno automatico al posto dell'a href... un comando meta
PHP:
<?php
//....
echo "<meta http-equiv='Refresh' content='4; URL=index.php'>";
//..
?>
attende 4 secondi (content =4) e poi torna in automatico alla index
 

Prom

Nuovo Utente
27 Gen 2015
6
0
0
scusa ma non ho capito bene, dici di avere una pagina php che elabora i dati del form inserendoli in un file txt, ma se non li fai stampare (echo o print) non li vedi
Ciao,
Grazie della risposta, cerco di darti più dettagli, non è esattamente come pensi. Ho un file form.html

HTML:
<form method="post" name="modulo" action="pagina.php">
<!-- tutte le varie domande -->
<script type="text/javascript" src="validation.js"></script>
<input type="button" value="Submit survey" onClick="Modulo()"/>
</form>
La funzione Modulo() è descritta nel file validation.js
HTML:
 <!--
function Modulo() {
         // definizione delle variabili 
if {
        // controllo sulle domande obbligatorie
}
else {
        document.modulo.submit();
       }
}
-->
Mentre il file pagina.php è così composto:

PHP:
<?php
// nome del file in cui inserire i dati
$file = "./elabora_dati.txt";

// apre il file in modalità "append", se non esiste lo crea
 $fp = fopen($file, "a");

// inserisce i valori ricevuti dal form in coda al file
 fputs($fp, htmlspecialchars($_POST["dato_1"]) . " " .
                htmlspecialchars($_POST["dato_2"]) "\r\n");

// chiude il file
 fclose($fp);
 
// richiama la pagina di ringraziamento
 echo "<meta http-equiv='Refresh' content='2; URL=thanks.html'>";
?>

Come vedi ho aggiunto l'echo che mi hai consigliato e funziona, ma rimane il solito problema: dopo che clicco su "Submit survey", passata la validazione dei campi, mi apre pagina.php in un'altra tab su cui poi carica la pagina di ringraziamento, lasciando la finestra originaria con il questionario e le domande. Come faccio a far sì che pagina.php si apra nella stessa tab di form.html?

Grazie ancora per l'aiuto!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
intanto perche non fai una pagina unica (form+elaborazione+grazie)?
poi cosa intendi con altra tab? altra finestra?
e dai un name al button
PHP:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>form</title>
<script type="text/javascript" src="validation.js"></script>
</head>
<body>
<?php
if(isset($_POST['invia'])){
	$file = "./elabora_dati.txt";
	// apre il file in modalità "append", se non esiste lo crea
	$fp = fopen($file, "a");
	// inserisce i valori ricevuti dal form in coda al file
	fputs($fp, htmlspecialchars($_POST["dato_1"]) . " " .htmlspecialchars($_POST["dato_2"]) "\r\n");
	// chiude il file
	fclose($fp);
	echo "<h1>grazie di aver risposto</h1>";
	echo "<meta http-equiv='Refresh' content='2; URL=index.php'>"; //rimandi alla index
}else{
?>
	<form method="post" name="modulo" action="pagina.php">
		<!-- tutte le varie domande -->
		<input type="button" name="invia" value="Submit survey" onClick="Modulo()"/><!-- dai il name al button-->
	</form>
<?php
}
?>
</body>
</html>
in questo modo non hai bisogno di fare 3 pagine, form+elaborazione+ringraziamento
poi secondo me ti conviene fare tutte le pagine con estenzione .php
ultima cosa: i controlli js sono graficamente "bellini", ma facilemente bypassabili, conviene sempre fare dei controlli dei dati lato server e, se appena puoi, abbamdona il file txt e passa ad un database (es. mysql)
 

Prom

Nuovo Utente
27 Gen 2015
6
0
0
Ciao,
Per quanto riguarda i controlli js, li ho scelti più che altro perché per me erano più semplici da capire e da scrivere.
La questione database l'avevo già incontrata per un altro aspetto e mi devo mettere a studiarla meglio, ma intanto inizio con il file txt.
Potresti spiegarmi che modifiche hai fatto al codice? Hai inserito il rimando allo script nell'head, poi hai inserito il php come prima cosa nel body mettendolo in un ciclo if, e hai inserito il form dentro else. Giusto? Però non capisco perché ci sono i rimandi a pagina.php né come funzioni esattamente. Scritto così com'è, mi apre comunque una nuova scheda(=tab)...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
scusa, ho fatto una svista col copy/paste
correggi l'action
PHP:
<form method="post" name="modulo" action="<?php echo $_SERVER['PHP_SELF']; ?>">
 

Prom

Nuovo Utente
27 Gen 2015
6
0
0
Ciao,
Immaginavo ci fosse stata una svista...
Ho provato come mi hai consigliato, ma c'è qualcosa che non va nel php: non mi scrive il file con i risultati e mi apre un'altra scheda ricaricando il questionario, che è la cosa che mi da più fastidio.
Com'è possibile? Perché si deve aprire sempre un'altra scheda?
Grazie mille per le tue risposte, mi stai aiutando veramente tanto!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
ho fatto delle prove, ho tolto il js e il button messo il pulsante di submit e senza percorso al file txt per fare prima, ho fatto queste due paginette
la prima chiamata pinco.php, la seconda form.php
pinco.php
PHP:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>index o come vuoi</title>
</head>
<body>
vai al <a href="form.php">form</a>
</body>
</html>
form.php
PHP:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>form</title>
</head>
<body>
<?php
if(isset($_POST['invia'])){
    //$file = "./elabora_dati.txt";
	$file = "elabora_dati.txt";
    // apre il file in modalità "append", se non esiste lo crea
    $fp = fopen($file, "a");
    // ATTENTA mancava il punto tra la fine di dato_2 e "\r\n"
    fputs($fp, htmlspecialchars($_POST["dato_1"]) . " " .htmlspecialchars($_POST["dato_2"]). "\r\n");
    // chiude il file
    fclose($fp);
    echo "<h1>grazie di aver risposto</h1>";
    echo "<meta http-equiv='Refresh' content='2; URL=pinco.php'>"; //rimandi alla index
}else{
?>
    <form method="post" name="modulo" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <!-- tutte le varie domande -->
		dato 1	<input name="dato_1" type="text" id="dato_1"> <br />
		dato 2	<input name="dato_2" type="text" id="dato_2"> <br />
        <!--<input type="button" name="invia" value="Submit survey" />-->
        <input name="invia" type="submit" id="invia" value="Invia">
    </form>
<?php
}
?>
</body>
</html>
risultato:
chiami pinco.php e cliccando su form ti si apre la pagina form.php, scrivi i dati e dai il submit
ti appare la scritta di ringraziamento e automaticamente torni a pinco.php (non al form)
nel file elabora_dati.txt trovi quello che hai inputato.

es ho provato

dato_1 dato_2
aaa bbb
ccc ddd


e li ho trovati nel txt
detto questo mi sa che il problema potrebbe essere nel js. punta a qualche pagina?
se è un problema di js avviso l'esperto
 

Prom

Nuovo Utente
27 Gen 2015
6
0
0
Sgrunt!!!!

Ho apportato le tue stesse modifiche: tolto il js e bottone submit, ma niente...

Allora ho copia-incollato le tue due pagine di prova e quelle funzionavano!

Così ho capito che c'era qualcosa che non andava nel resto dello script e mi sono resa conto che nell'head avevo:

HTML:
<base target="_blank">
che non so da dove saltasse fuori, probabilmente l'avevo copiato da qualche sito quando avevo iniziato e non l'avevo mai cancellato. Tolto quello, si è risolto tutto.

Grazie dell'aiuto e scusa se ti ho fatto perdere tempo, ma senza qualcuno con cui confrontarmi non ci sarei mai riuscita!!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
cioa
nessuna perdita di tempo, anche perchè così hai imparato un grande princiopio "molto spesso l'errore non è dove si pensa che sia"