passaggio stringa

LeoPampa

Nuovo Utente
14 Ago 2012
2
0
0
Buongiorno,
scusate il disturbo ma mi trovo arreso su un problema che non so proprio come risolvere:

in una pagina A ho un form con un input type di tipo checkbox che mostra una variabile contenuta in un tabella e l'utente può selezionare o meno

PHP:
<?php 
$query=mysql_query("SELECT * FROM brands") or die(mysql_error());	
while ($rows=mysql_fetch_array($query))
{
extract($rows);

?>	
<tr>
<td class="admin_select_text" >
<?php echo $brand;?>
</td>
<td class="admin_select_input" >
<input type="checkbox" name="<?php echo $brand;?>" 
value="<?php echo $brand;?>">
</td>
</tr>

<?php
}
?>

Ora tutto funziona e le checkbox vengono visualizzate correttamente a seconda del numero di brand.

Il problema viene nella pagina di check del form, infatti se dalla query il checkbox ha estratto una stringa senza spazi nel mezzo tutto funziona alla grande, se invece la stringa estratta ha spazi nel mezzo ecco che la checkbox non viene considerata nella pagina di check:


PHP:
echo "Inizio controllo per selezione brand<br>";
//Controllo se è stato selezionato un brand
$query = mysql_query("SELECT * FROM brands") or die( mysql_error());	
if( mysql_num_rows($query) != 0)
{

//Se entro qui significa che ci sono brand già inseriti
//l'utente deve selezionato almeno un brand per continuare //l'inserimento
while ( $rows = mysql_fetch_array($query) )
{

extract($rows);

//-----------------------------------------------qui inizia il problema prima ho verificato tutte le variabili e sono tutte a posto ma qui..........................................

  if ( isset($_POST[$brand]) )
 {

   echo "Ho trovato un brand ".$_POST[$brand]."<br>";

   $check_brand=1;	
   $id_brand_array[]= $id_brand;
   $brand_array[] = $_POST[$brand];

  }	

}

}



Per essere più chiaro se brand ha il nome "pippo" nella pagina di check tutto funziona correttamente, se invece la parola estratta dalla query è una stringa tipo "pippo 2" allora il controllo salta.


Ho guardato cosa viene passato dal post e ho visto che nel caso di stringa senza spazi nella pagina di check ho appunto
$_POST['pippo']

ma con stringa con spazi ho

$_POST['pippo_2']

Ora non capisco come devo intendere il l'underscore, ho provato a fare il replace di _ con spazio, ma sbaglio qualcosa.

Grazie per ogni aiuto.
Saluti
Leo
 
Ultima modifica di un moderatore:
Ciao,
ho fatto questa prova sostituendo all'inizio gli spazi
PHP:
<?php
// risultato della query
$brand = "pippo 2";
//ripulisci subito gli spazi
$brand = str_replace(" ", "", $brand);

var_dump($_POST);

if (isset($_POST[$brand])) {

    echo "Ho trovato un brand " . $_POST[$brand] . "<br>";
}
?>
<table>   
    <form method="post">
        <tr>
            <td class="admin_select_text" >
<?php echo $brand; ?>
            </td>
            <td class="admin_select_input" >
                <input type="checkbox" name="<?php echo $brand; ?>" 
                       value="<?php echo $brand; ?>">
            </td>
        </tr>
        <tr><td colspan="2"><input type="submit" value="invia"/></td></tr>
    </form>
</table>
Ma non ho capito se gli spazi li puoi togliere o no
 
Ciao purtroppo gli spazi non li posso togliere,
sono dati memorizzati in un db su cui viene fatto il controllo di brand se presente o meno.
Quindi sono per me importanti,
con il comando printr($_POST) ho visto che nel caso di input type checkbox se la stringa contiene spazi questi sono sostituiti con underscape ( "_ ") ho provato a rimuoverlo con stringreplace ma forse sbaglio qualcosa ma non funziona.

in parole semplice il problema è che se nella checkbox è associata la stringa "pippo 2" con il metodo post questa invia "pippo_2", che però io verifico con una stringa estratta da un db che invece contiene "pippo 2".

Comunque credo di aver risolto invece di inviare il nome invio l'id del brand della tabella che sicuramente è una stringa unica essendo una chiave primaria incrementale e quindi un numero

comunque grazie per l'interessamento.
Leonardo
 
ciao
un'osservazione: i nomi delle variabili non possono contenere spazi per cui es
$_POST['pinco 2'] è errato e giustamente viene sostituito dall'undescore
$_POST['pinco_2']
detto questo il sistema che ti ha detto criric infatti tu trasmetti una variabile di nome pinco_2 con valore "pinco 2" che è quello che ti serve se non erro.
l'unica correzzione che farei allo script di criric
PHP:
<?php
// risultato della query
$brand = "pippo 2";
var_dump($_POST);
if (isset($_POST[$brand_nome])) {
    echo "Ho trovato un brand " . $_POST[$brand_nome] . "<br>";
}
?>
<table>   
    <form method="post">
        <tr>
            <td class="admin_select_text" >
<?php echo $brand; $brand_nome=str_replace(" ", "_", $brand);?>
            </td>
            <td class="admin_select_input" >
                <input type="checkbox" name="<?php echo $brand_nome; ?>" 
                       value="<?php echo $brand; ?>">
			<!-- in questo modo il nome è corrette e il suo valore rimane invariato -->
            </td>
        </tr>
        <tr><td colspan="2"><input type="submit" value="invia"/></td></tr>
    </form>
</table>
 

Discussioni simili