2013-07-30 11 views
5

E 'un errore molto strano che io sono facing.I hanno qualche html vale a dire al di sotto

<input type="checkbox" name="om[1]" value="10"> 
<input type="checkbox" name="om[2]" value="20"> 
<input type="checkbox" name="om[3]" value="30"> 

Quando ho posto questo modulo e fare

print_r($_POST['om']) 
it gives just prints 'Array' as string 
and if i do print_r($_POST['om'][0]) it gives A 
and if i do print_r($_POST['om'][1]) it gives r 

ma se lo faccio

print_r($_REQUEST['om']) 
it display a proper array 

Array 
    (
    [1] => 10 
    [2] => 20 
    [3] => 30 
) 

problema è quando sto usando $ _POST per ottenere i valori dell'array che non sta visualizzando, funziona bene se il valore inserito non è nell'array. Ma posso ottenere tutti i risultati richiesti con $ _REQUEST ['om'] anche se sono array.

E sta accadendo solo sul server , funzionante bene per localhost. Qualcuno può dire quale può essere il problema sul server ??

+7

Provare 'name =" om [] "' su ciascuno (senza chiavi) – naththedeveloper

+0

Provare $ om = $ _POST ['om'] quindi accedere agli indici. Penso che print_r ti stia confondendo. – jeff

+3

@FDL non c'è niente di sbagliato nel fornire le chiavi – DevZer0

risposta

3

La risposta è mettere il magic_quotes_gpc = off nel file php.ini

0

Sono abbastanza sicuro che

<input type="checkbox" name="om[1]" value="10"> 

non è lo stesso di

$_POST['om'][1] 

Quello in forma è un array con un indice di tipo stringa "1", mentre nel $ _POST var stai accedendo al primo elemento di $ _POST ['om'].

Quindi è necessario utilizzare qualcos'altro rispetto agli interi nel modulo HTML o accedere ai valori utilizzando $_POST['om']['1'].

+1

riprova, è lo stesso – sandeepKumar

2

Questa è solo una spiegazione, ho provato questo:

<pre> 
<form method="post"> 
<input type="checkbox" name="om[1]" value="10"> 
<input type="checkbox" name="om[2]" value="20"> 
<input type="checkbox" name="om[3]" value="30"> 
<input type="submit"> 
<?php 
print_r($_POST['om'][1]); 
print_r($_POST['om'][2]); 
print_r($_POST['om'][3]); 

print_r($_REQUEST['om']); 
?> 

uscita:

10 
20 
30 
Array 
(
    [1] => 10 
    [2] => 20 
    [3] => 30 
) 
+0

è già abbastanza buono per me sul mio server in precedenza, è solo il problema del server che quei valori che sono nella matrice non sono in grado di accedervi con $ _POST ma possono accedere con $ _REQUEST – sandeepKumar

+0

@sandeepKumar si dovrebbe copia/incolla il codice di test sopra in un file PHP sul tuo server, per vedere se si verifica lo stesso comportamento. In questo modo sarai in grado di dire se si tratta di un problema di livello server/vhost o qualcosa nel tuo stack PHP. – g4vroche

0

http://php.net/manual/en/function.print-r.php stampe stringa "array" solo se il parametro è la stringa, quindi credo che la superglobale $ _POST è stato sovrascritto prima della riga print_r (che è anche comprovata dal fatto che $ _RESQUEST suberglobal contiene il valore originale e previsto) prova a var_export it

2

Can anybody tell what can be the problem on server?

Molto probabilmente il tuo può perché hai accesso ad esso e puoi risolvere il problema.

Da ciò che si descrive, sul server $_POST['om'] è la stringa "Array". Periodo.

Come è diventato che non è visibile dal codice che hai postato nella tua domanda, solo che lo è.

BTW, la stringa "Array" è anche un segno che sul server si (probabilmente per errore) sono stati inseriti codice e configurazione che esegue una matrice su una stringa (http://php.net/language.types.type-juggling).

Una versione moderna di PHP ti noterà di questo tipo. Quindi, la prima cosa da fare è abilitare la registrazione degli errori sul server e impostare la verbosità al livello più alto in modo da poter visualizzare avvisi, avvisi e avvisi rigorosi nel log degli errori di PHP.Quindi seguire il log degli errori e cercare le notifiche di conversione dell'array.

Se questo non ti porta a nulla, è necessario ottenere uno step-debugger in mano e fare un po 'il debug remoto in modo da verificare che le aspettative siano soddisfatte e dove ottengono rotto. Questo normalmente è il modo più veloce per scoprire cosa succede mentre è possibile ispezionare il programma mentre è in esecuzione.

+0

ho affrontato questo errore fatale sul mio server PHP Errore fatale: dimensione di memoria consentita di 94371840 byte, quindi ho fatto questo ini_set ('memory_limit', '-1'), lasciando questo nulla è cambiato sul server – sandeepKumar

+0

Bene il consumo di memoria è un segno che hai colpito un limite. Vorrei provare ulteriormente a capire perché hai raggiunto il limite di memoria. disabilitando il limite di memoria si nasconde solo l'errore ma non si ferma la causa. quindi rimuove solo il sintomo. – hakre

+0

hai assolutamente ragione, ma quando vedo l'errore fatale nel registro degli errori, ho trovato questa soluzione solo per quel momento per mantenere il server in esecuzione, puoi suggerire cosa non va con $ _POST, è dare dei valori se il valore del post non è un array, ma quando si tratta di un arryay è sufficiente restituire una stringa "Array" – sandeepKumar

0

name = "om []" - rimuovere le chiavi e provare che funziona per me.

<pre> 
    <form method="post"> 
    <input type="checkbox" name="om[]" value="10"> 
    <input type="checkbox" name="om[]" value="20"> 
    <input type="checkbox" name="om[]" value="30"> 
    <input type="submit"> 
    </form> 
    <?php 
    print_r($_POST['om']); 
    print_r($_REQUEST['om']); 
    ?> 

uscita:

Array 
    (
     [0] => 10 
     [1] => 20 
     [2] => 30 
    ) 

    Array 
    (
     [0] => 10 
     [1] => 20 
     [2] => 30 
    ) 
+0

già provato, rileggere la mia domanda – sandeepKumar

0

Sembra $_POST['om'] è stato convertito in una stringa accidentalmente. Mi piace print_r($_POST['om'] . "") Mancano le dichiarazioni di debug?

Penso che il problema sia da qualche parte in un pezzo di codice che non mostri qui. Tuttavia, è necessario utilizzare più spesso var_dump per analizzare le variabili.

+0

var_dump è anche provato, stesso risultato – sandeepKumar

0

Ciao ho controllato sopra il tuo codice. Funzionante. Credo che vi manca la forma di metodo

Utilizzare metodo di invio = "post"

È possibile utilizzare array di indicizzazione come om [1], om [2], om [3] non è così importa.

Ecco il codice:

<form method="post"> 
<input type="checkbox" name="om[1]" value="10"> 
<input type="checkbox" name="om[2]" value="20"> 
<input type="checkbox" name="om[3]" value="30"> 
<input type="submit" name="submit" value="Submit"> 
</form> 

<?php 
if(isset($_POST['submit'])){ 
    //print_r($_REQUEST['om']); 
    print_r($_POST['om']); 
} 
?> 

Si prega di verificare questo codice.

+0

Se non ha un metodo = "post" - sarebbe un array vuoto $ _POST –

+0

Sì, non hai un ** metodo = "post" ** quindi modulo preso ** method = "get" ** di default. per favore menziona method = "post" attributo nel form tag. Se non si aggiunge il metodo attribute = "post", $ _POST non funziona. Sarà $ _GET o $ _REQUEST – Chinmay235

1

Se si tenta di print_r un Array, si tornerà Array. La maggior parte dei tipi di dati in PHP sono così.

0

caselle di controllo, controllarli e avrete la vostra valori

<input type="checkbox" name="om[1]" value="10" checked="true"> 
<input type="checkbox" name="om[2]" value="20" checked="true"> 
<input type="checkbox" name="om[3]" value="30" checked="true"> 

Quando un modulo viene inviato, solo "on" controlli casella di controllo possono avere successo. From the spec (4.01)

Problemi correlati