-
GET sì POST no
Ciao a tutti,
ho un problema con l'invio dei dati di un form. La situazione è questa: in una pagina ho un form fatto così:
Codice HTML:
<form action="script_view.php" method="post" encType="text/plain">
<input name="testo" type="text" size="50" maxlength="255">
<br>
<input name="autore" type="text" size="50" maxlength="255">
<br>
<input name="emailautore" type="text" size="50" maxlength="255">
<br>
<input name="inseritore" type="text" size="50" maxlength="255">
<br>
<input name="emailinseritore" type="text" size="50" maxlength="255">
<br>
<input type="submit" value="Invia"> <input type="reset" value="Reset">
</form>
mentre script_view.php contiene il seguente codice:
Codice PHP:
<?php
// Salva i dati inseriti nel database
if(isset($_POST))
{echo "Dati inviati <br>";}
else
{echo "Dati NON inviati <br>";}
$ip=$REMOTE_ADDR;
$testo=$_POST['testo'];
$autore=$_POST['autore'];
$emailautore=$_POST['emailautore'];
$inseritore=$_POST['inseritore'];
$emailinseritore=$_POST['emailinseritore'];
$now=date("D d-M-Y H:i:s", time());
echo "Ip: $ip <br>";
echo "Testo: $testo <br>";
echo "Autore: $autore <br>";
echo "E-mail autore: $emailautore <br>";
echo "Inseritore: $inseritore <br>";
echo "E-mail inseritore: $emailinseritore <br>";
echo "Data inserimento: $now <br>";
$numero=count($_POST);
print_r($_POST);
echo "<br>Numero elementi: $numero";
?>
Se inserisco dei dati, il codice php mi restituisce "Dati inviati", ma non mi fa vedere nessun dato nelle istruzioni echo e la variabile $numero contiene 0.
Dove sbaglio?
Perchè se faccio la stessa cosa sostituendo GET al posto di POST funziona tutto?
Grazie mille per le risposte.
Marco.
FunCool: Ricordati di usare i tag per il codice.
-
Hai sbagliato if..else..le graffe....
scrivi così
Codice PHP:
<?php
// Salva i dati inseriti nel database
if(isset($_POST))
{echo "Dati inviati <br>";
$ip=$REMOTE_ADDR;
$testo=$_POST['testo'];
$autore=$_POST['autore'];
$emailautore=$_POST['emailautore'];
$inseritore=$_POST['inseritore'];
$emailinseritore=$_POST['emailinseritore'];
$now=date("D d-M-Y H:i:s", time());
echo "Ip: $ip <br>";
echo "Testo: $testo <br>";
echo "Autore: $autore <br>";
echo "E-mail autore: $emailautore <br>";
echo "Inseritore: $inseritore <br>";
echo "E-mail inseritore: $emailinseritore <br>";
echo "Data inserimento: $now <br>";
$numero=count($_POST);
print_r($_POST);
echo "<br>Numero elementi: $numero";
}
else
{echo "Dati NON inviati <br>";}
?>
cmq io fossi in te darei un nome al pulsante submit, cmq l'errore era nella sintassi della espressione condizionale. se chiusi la graffa..poi è come se uscissi
FunCool: Ricordati di usare i tag per il codice.
-
No, il problema non è quello. Come ho scritto, utilizzando il metodo GET invece che POST tutto funziona. E poi le graffe le volevo proprio così. Quello che non funziona è che, utilizzando il metodo POST, la variabile $_POST è inizializzata ma non contiene niente.
-
ti faccio una domanda un po' idiota...nn me ne volere...sul form hai controllato ke l'attributo method sia post? certe volte ci si dimentica...
cmq è meglio se posti un link...
-
cmq con mio escono anche con post quindi qualcosa c'entrerà. Usa un nome per l'invio...come ti ho detto perchè così come fai tu può funzionare ma non è corretto.
lo usi qui o con register_global a off?
EDIT: ho visto ora che nel mio file html non avevo messo encType="text/plain", ho provato a toglierlo anche nel tuo e funziona, ragione però non la so..quindi ricapitolando i tuoi 2 file togliendo quello funzionano...
FunCool: Non fare UP, usa il tasto Edita.
-
Il modo per creare un form è:
CODICE HTML:
Codice:
<form action="script_view.php" method="POST" enctype="application/x-www-form-urlencoded" onsubmit="javascript: return check_form(this)">
ecc ecc
</form>
enctype="application/x-www-form-urlencoded" perchè nel form usi solo testo e non file
onsubmit="check_form(this)" perchè un controllino sui dati che si inseriscono in un form ci sta sempre bene :wink:
check_form avrà una struttura se ad esempio vuoi che il campo testo e autore siano obbligatori e che i campi mail siano effettivamente delle mail
Codice:
function check_form(obj_form) {
if (obj_form.testo.value == "" || obj_form.autore.value == "") return false;
regexp_email = /([a-zA-Z0-9\_\-\.]+)@([a-zA-Z0-9\_\-\.]+)\.([a-zA-Z0-9\_]+)/;
myarray = regexp_email.exec(obj_form.emailautore.value);
if (!myarray || myarray[0] != obj_form.emailautore.value) {
alert("Indirizzo E-mail non valido");
return false;
}
myarray = regexp_email.exec(obj_form.emailinseritore.value);
if (!myarray || myarray[0] != obj_form.emailinseritore.value) {
alert("Indirizzo E-mail non valido");
return false;
}
return true;
}
Il codice PHP che hai scritto dovrebbe fuzionare.
Una sola cosa: mi è capitato di avere dei problemi facendo il controllo con isset($_POST) specie se si hanno più form in una stessa pagina. Per essere sicuro di quale post ho fatto submit dò un nome al pulsante e poi guardo se esiste il post con quel nome
HTML:
Codice:
<input type="submit" name="submit_form" value="Submit">
e in PHP:
Codice:
if (isset($_POST['submit_form']))
FunCool: I tag del forum sono formati con le parentesi quadre e non con < e >. Per adesso ti ho modificato io il post, la prossima volta cerca di stare più attento.