PDA

View Full Version : [PHP 5.3.5] Problema recupero variabile POST


Roran
22-02-2011, 18:21
Utilizzo apache attraverso Xampp 1.7.4 (ultima versione) e php 5.3.5 ma ho un problema nell'invio dei dati di un form attraverso il metodo POST,mi da questo errore:

Undefined index: nomepag in D:\xampp\htdocs\harad\ARGuestbook_Files\showcomments.php on line 3

Con GET invece funziona benissimo.Ho notato però che nel pannello di controllo di Xampp,sulla voce phpinfo() nel campo request c'è solo GET,forse POST deve essere abilitato cambiando qualcosa su qualche file di configurazione?Se si,quale?

Comunque posto anche il codice almeno potete aiutarmi meglio:

Pagina del Form:

<?php

$dir_commenti = opendir("D:/xampp/htdocs/harad/ARGuestbook_Files/Commenti/");
$actionpath = "http://localhost/harad/ARGuestbook_Files/showcomments.php";
//if(is_dir("D:/xampp/htdocs/harad/ARGuestbook_Files/Commenti/")) echo "si";
$DIR = array();
while($file=readdir($dir_commenti)){
if($file!="." && $file!="..") {
array_push($DIR,$file);
}
}
closedir($dir_commenti);
echo count($DIR);
echo "<form action=http://localhost/harad/ARGuestbook_Files/showcomments.php method=POST >";
foreach($DIR as $value){
echo '<input type=radio name="nomepag" value='.$value.'>'.$value.'<BR>';
}
echo "<input type='submit' value='ok'><br>";
echo "</form>";




?>


Pagina di elaborazione:

<?php

$pagsel=$_POST["nomepag"];
echo $pagsel;

?>

malocchio
22-02-2011, 21:39
<?php
echo "<form action=http://localhost/harad/ARGuestbook_Files/showcomments.php method=POST >";
foreach($DIR as $value){
echo '<input type=radio name="nomepag" value='.$value.'>'.$value.'<BR>';
}
echo "<input type='submit' value='ok'><br>";
echo "</form>";
?>


Queste righe mi piacciono poco... Se XAMPP l'hai installato pulito allora non ci dovrebbero essere problemi nel file di configurazione.
Probabilmente il browser non interpreta bene il codice html.
Consiglio di correggere il codice così:


<?php
echo '<form action="http://localhost/harad/ARGuestbook_Files/showcomments.php" method="POST">';
foreach($DIR as $value){
echo "<input type=\"radio\" name=\"nomepag\" value=\"$value\" /><br />";
}
echo '<input type="submit" value="ok" /><br />';
echo '</form>';
?>


cerca sempre di stampare del codice html corretto. Lo standard prevede di specificare il valore dei campi tra virgolette doppie ("valore"). Quindi non <form action=http://localhost/harad/ARGuestbook_Files/showcomments.php method=POST >ma<form action="http://localhost/harad/ARGuestbook_Files/showcomments.php" method="POST">
se non ricordo male i tag input sono solitamente vuoti, il loro contenuto va messo in value e vanno chiusi subito, con la sintassi breve (preferibilmente)
in Php io mi trovo bene così: per stampare codice html uso di solito gli apici singoli ('html') così posso digitare le virgolette doppie senza farne l'escape
se invece devi concatenare nel testo i valori di alcune variabili hai due modi: o usi gli apici singoli e concateni con il punto (.) (come hai fatto tu), oppure usi le virgolette doppie, fai l'escape delle virgolette nella stringa e inserisci il nome delle variabili direttamente, così il php si occuperà di sostituire automaticamente i valori (metodo consigliato e molto più veloce)


Altra cosa, lo standard prevede che per andare a capo si usi il tag
<br />aperto e chiuso, con lo spazio prima dello slash, se vogliamo essere pignoli.

E per finire, l'uso dei path assoluti è pesantemente sconsigliato. Quindi invece di http://localhost/harad/ARGuestbook_Files/showcomments.phpdovresti scrivereshowcomments.phpsempre che i due file siano nella stessa cartella. Altrimenti puoi aggiungere il nome della sotto cartella o i due punti per risalire al livello superiore:
sottocartella/showcomments.php
../showcomments.php

Intravedo un errore logico nel codice: nel ciclo foreach stampi una casella di testo per ogni $value in $DIR, ma tutte le caselle hanno lo stesso name e questo non ha senso.

Roran
23-02-2011, 14:48
@Malocchio: grazie dell'aiuto,non andava per il fatto dell'escape delle virgolette.

malocchio
23-02-2011, 14:52
@Malocchio: grazie dell'aiuto,non andava per il fatto dell'escape delle virgolette.

Ti consiglio di correggere anche gli altri errori che ti ho fatto notare, perché sono abbastanza gravi e possono portarti ad altri problemi.

Roran
23-02-2011, 21:03
Ti consiglio di correggere anche gli altri errori che ti ho fatto notare, perché sono abbastanza gravi e possono portarti ad altri problemi.tranquillo,il fatto del foreach non è un errore,mi serve proprio lo stesso nome,è il valore che cambia,inoltre ci tengo a precisare che stampa dei radio button e non delle caselle di testo,il mio problema era solo il metodo POST che non andava,tutto qui.