2012-01-25 20 views
7

Ho la forma più semplice possibile e tutto quello che voglio fare è echo qualunque cosa sia scritta nella casella di testo.

HTML:

<form action="" method="post"> 
    <input type="text" name="firstname"> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

PHP:

if(isset($_POST['submit'])){ 
    $test = $_POST['firstname']; 
    echo $test; 
} 

Il problema è che non funziona sul mio server (che funziona su un altro server). Qualcuno ha un'idea di cosa potrebbe essere sbagliato? Ci sono altri moduli sul server e stanno funzionando bene.

+4

avevo sempre raccomandare che il 'action' attributo ha un valore ... – ChrisW

+4

Cosa fare ottieni se tu 'var_dump ($ _ POST)'? E vieni a questo, 'var_dump ($ _ REQUEST)' – DaveRandom

+0

Quale versione di PHP è in esecuzione il tuo server? –

risposta

14

Alcuni cosa che potreste fare:

  1. Assicurarsi che l'attributo di "azione" sul modulo porta alla destinazione corretta.
  2. Provare a utilizzare $ _REQUEST [] invece di $ _POST, vedere se c'è qualche cambiamento.
  3. [Facoltativo] Provare ad includere sia un attributo 'name' che un 'id', ad es.

    <input type="text" name="firstname" id="firstname"> 
    

  4. Se ci si trova in un ambiente Linux, verificare di avere entrambe le lettura/scrittura autorizzazioni per il file.

Inoltre, questo link potrebbe anche essere d'aiuto.

EDIT:

Si potrebbe anche sostituire if(isset($_POST['submit'])){ con questo: if($_SERVER['REQUEST_METHOD'] == "POST"){. Questo è sempre il modo migliore per verificare se un messaggio è stato inviato

+6

Tu don ho bisogno dell'id. – PiTheNumber

+0

Grazie, ho già provato praticamente tutto da quel collegamento. Nessun successo. – ptinca

+0

Provato # 4. Ancora lo stesso. – ptinca

-3

Prova ottiene, invece, per motivi di prova

<form action="#?name=test" method="GET"> 
    <input type="text" name="firstname" /> 
    <input type="submit" name="submit" value="Submit" /> 
</form> 

e

if(isset($_GET)){ 
    echo $_GET['name'] . '<br>'; 
    echo $_GET['firstname']; 
} 
+1

Niente. È come se il valore venisse mangiato da un ninja. – ptinca

+0

Perché questo farebbe la differenza? – kapa

+0

Enorme rischio per la sicurezza. Prendi solo ciò di cui hai bisogno. – Frankline

0

Non c'è niente di sbagliato con il codice. Il problema non è visibile qui.

  1. Verificare se dopo l'invio, lo script si chiama affatto.

  2. Date un'occhiata a ciò che è presentata: var_dump($_REQUEST)

0

provare a fare var_dump($_GLOBALS).

Una possibile causa potrebbe essere l'esecuzione di uno script prima del proprio che disattiva le variabili globali. Come ad esempio:

unset($_REQUEST); 

o dispari.

unset($GLOBALS); 

questo potrebbe essere fatto tramite l'opzione auto_prepend_file nella configurazione php.ini.

3

Invece di usare $ _POST, utilizzare $ _REQUEST:

HTML:

<form action="" method="post"> 
    <input type="text" name="firstname"> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

PHP:

if(isset($_REQUEST['submit'])){ 
    $test = $_REQUEST['firstname']; 
    echo $test; 
} 
3

Ho anche avuto questo problema. L'errore era nell'htaccess. Se hai una regola di riscrittura che influenza l'url azione, non sarai in grado di leggere la variabile POST.

Per fissare questa aggiunta, si deve aggiungere questa regola .htaccess, all'inizio, per evitare di riscrivere l'url:

RewriteRule^my_action.php - [PT]

9

ho avuto qualcosa di simile questa sera che mi stava facendo impazzire. L'invio di un modulo mi dava i valori in $ _REQUEST ma non in $ _POST.

Alla fine ho notato che c'erano in realtà due richieste che passano attraverso la scheda di rete in Firebug; prima un POST con una risposta 301, poi un GET con una risposta 200.

caccia sulle interwebs suonava come la maggior parte delle persone pensato che questo era a che fare con mod_rewrite causando la richiesta POST per reindirizzare e quindi passare a una GET.

Nel mio caso non era colpa di mod_rewrite, era qualcosa di molto più semplice ... il mio URL per il POST conteneva anche una stringa di query GET che stava iniziando senza una barra finale sull'URL. È stato questo a causare un reindirizzamento dell'apache.

Spot la differenza ...

Bad: http://blah.de.blah/my/path?key=value&otherkey=othervalue
Buono: http://blah.de.blah/my/path/?key=value&otherkey=othervalue

Quello inferiore non provoca un reindirizzamento e mi dà $ _POST!

+0

Ho avuto un modulo con 'action =" booking.php "', che non funzionava. Risulta che è stato perché il mio .htaccess riscrive gli indirizzi .php per rimuovere l'estensione. cambiando 'action =" booking "' ha funzionato il trucco – binaryfunt

+0

La tua risposta mi ha fatto risparmiare un sacco di tempo.Nel mio caso, il mio modulo ha avuto 'action =" mysite.com/somefolder' e questo ha causato il '$ _POST' per essere vuoto, ma quando ho cambiato l'azione in' mysite.com/somefolder/'ha funzionato come previsto. Un sacco – Ahmad

1

Avete controllare il vostro php.ini?
Ho rotto il mio metodo post, una volta che ho impostato post_max_size lo stesso con upload_max_filesize.

penso che post_max_size deve meno di upload_max_filesize.
testato con PHP 5.3.3 in RHEL 6.0

FYI:
$_POST in php 5.3.5 does not work
PHP POST not working

-1
  1. file html e php file sia dovrebbe risiedere nella cartella htdocs in c: \ apache2 (se si utilizza Apache server web).
  2. Aprire il file html digitando http: // "localhost/html_file_name.html"
  3. Ora inserisci i tuoi dati nei campi .. Il tuo codice verrà eseguito ..
3

Dump la variabile globale per scoprire quello che hai nel perimetro pagina:

var_dump($GLOBALS); 

Questo vi dirà la "cosa" e "dove" per quanto riguarda i dati sulla tua pagina.

2

provare questo
codice html

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
      <input type="text" name="firstname"> 
      <input type="submit" name="submit" value="Submit"> 
     </form> 

codice PHP:

if(isset($_POST['Submit'])){ 
$firstname=isset($_POST['firstname'])?$_post['firstname']:""; 
echo $firstname; 

}