Errore nella check

minatore

Utente Attivo
25 Set 2007
410
0
0
Salve a tutti, ho un problema strano, ho delle check in una pagina ed invio queste notizie ad un'altra pagina, ma oltre a darmi il nome delle check checcate, mi da altre informazioni che non dovrebbe
vi posto il codice
pagina.php
PHP:
$a_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale',
				'Assegno Circolare', 'Finanziamento in Sede');
$lungh_array_pagamenti= count($a_pagamenti);
$riga_p=1;

print"
<form method='post' action='add_pagina.php'>
<table cellpadding='0' cellspacing='0' border='0'>
	<tr>
    	<td valign='top' height='25' class='font_1'>
        	Scegli Metodi di Pagamento
        </td>
    </tr>
	<tr>
    	<td>
			<table cellpadding='0' cellspacing='0' border='0' bordercolor='#23D527'>";
				for($l=0; $l<$lungh_array_pagamenti; $l++)
					{
						if($riga_p == 1)
							{
								print"<tr>";	
							}
								print"
									<td width='200' class='font_3'>
										<input type='checkbox' name='$l'>$a_pagamenti[$l]
									</td>";
									$riga_p++;
						if($riga_p > 4)
							{
								print"</tr>";
								$riga_p=1;	
							}
					}
			print"
			</table>
		</td>
	<tr><td height='10'></td></tr>
</table>
<table cellpadding='0' cellspacing='0' border='0'>
	<tr>
		<td valign='bottom' height='50'>
        	<input name='add' id='as' type='image' value='add_veicoli' img src=../images/conferma_inserimento.jpg border='0' />
        </td>
    </tr>
</table>
</form>";
?>
add_pagina.php
PHP:
<?php
require '../connessione/Config.php';
require '../connessione/Connect.php';


		$a_nome_optional = array('Abs', 'Esp', 'Airbag guidatore', 'Airbag passeggero', 'Airbag laterale', 'Fendinebbia',
				'Chiusure centralizzate', 'Servosterzo', 'Alzacristalli elettrici', 'Autoradio',
				'Lettore cd', 'Comandi al volante', 'Computer di bordo', 'City', 'Antifurto acustico',
				'Antifurto satellitare', 'Blockshaft', 'Clima digitale', 'Clima analogico', 'Cerchi in lega',
				'Immobilizzatore elettronico', 'Navigatore', 'Tetto panoramico', 'Tetto apribile',
				'Specchi laterali elettrici', 'Cruise control', 'Regolazione elettronica sedili',
				'Interni in pelle', 'Interni in alcantara',	'Sedili riscaldabili', 'Barre tetto',
				'Trazione integrale', 'Controllo trazione', 'Sensori luci',
				'Sensori pioggia', 'Sensori parcheggio anteriori', 'Sensori parcheggio posteriori',
				'Fari xenon', 'Caricatore cd', 'Bluetooth', 'Attacco usb', 'Gancio traino', 'Adatto handicap');
			
		$num_optional = count($a_nome_optional);
		for($cont = 0; $cont < $num_optional; $cont++)
			{					
				if(isset($_POST[$cont]))
					{
						$a_accessori[]=$a_nome_optional[$cont];
					}					
			}
		if(!isset($a_accessori))
			{
				$accessori = '';
			}
		else
			{
				$accessori = implode(',', $a_accessori);
			}
		
		
		$a_nome_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale',
				'Assegno Circolare', 'Finanziamento in Sede');
			
		$num_pagamenti = count($a_nome_pagamenti);
		for($cont_p = 0; $cont_p < $num_pagamenti; $cont_p++)
			{					
				if(isset($_POST[$cont_p]))
					{
						$a_pagamenti[]=$a_nome_pagamenti[$cont_p];
					}					
			}
		if(!isset($a_pagamenti))
			{
				$pagamenti = '';
			}
		else
			{
				$pagamenti = implode(',', $a_pagamenti);
			}
						
		$tipo_pagamento = $pagamenti;
		
				

		print $accessori;
	
?>
L'errore sta che quando richiamo print $accessori, non dovrebbe darmi nessun nome, invece mi scrive
Codice:
abs, airbag,ecc
come mai, se in pagina.php le check per gli accessori non esistono?
Grazie
 
Ciao ragazzi, qualcuno ha letto il mio caso?
è davvero incredibile, quasi fosse un miracolo
Ciao aspetto una vostra risposta

Grazie a tutti
 
ciao
prima un piccolo dubbio su pagamenti.
l'utente puo pagare (es.) in contanti e assegno circolare e finenziamenti, oppure in un unico modo?
se è così farei semplicemente usando il radio e non la chek
PHP:
<?php
//ecc...
$a_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale', 'Assegno Circolare', 'Finanziamento in Sede'); 

foreach($a_pagamenti as $valore){
	echo "<input name=\"pagamento\" type=\"radio\" value=\"$valore\">";
}
//e ricevi con $_POST['pagamento']
//ecc...
?>
se invece può pagare in più modi allora devi usare per forza le chek
PHP:
<?php
//ecc...
$a_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale', 'Assegno Circolare', 'Finanziamento in Sede'); 
$conta=0;
foreach($a_pagamenti as $valore){
	echo "<input name=\"pagamento[$conta]\" type=\"radio\" value=\"$valore\">";
	$conta++;
}
//in questo modo nella pag. add_pagina.php puoi ricevere l'array $_POST['pagamenti']
//ecc...
?>
poi fai attenzione che ciclando da 0 in poi $_POST[$cont] ottieni (es.) $_POST[0] $_POST[1] ecc...
ma analogamente ciclando $_POST[$cont_p] ottieni di nuovo $_POST[0] $_POST[1] ecc...
mettendo nella chek name=\"pagamento[$conta]\ ciclando ottieni $_POST['pagamento'][0] $_POST['pagamento'][1] ecc... che è diverso da $_POST[0] $_POST[1] ecc...
fai queste verifiche e sappimi dire

p.s.
a me piace usare echo al posto di print eventualmente correggi
 
ciao
prima un piccolo dubbio su pagamenti.
l'utente puo pagare (es.) in contanti e assegno circolare e finenziamenti, oppure in un unico modo?
se è così farei semplicemente usando il radio e non la chek
PHP:
<?php
//ecc...
$a_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale', 'Assegno Circolare', 'Finanziamento in Sede'); 

foreach($a_pagamenti as $valore){
	echo "<input name=\"pagamento\" type=\"radio\" value=\"$valore\">";
}
//e ricevi con $_POST['pagamento']
//ecc...
?>
se invece può pagare in più modi allora devi usare per forza le chek
PHP:
<?php
//ecc...
$a_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale', 'Assegno Circolare', 'Finanziamento in Sede'); 
$conta=0;
foreach($a_pagamenti as $valore){
	echo "<input name=\"pagamento[$conta]\" type=\"radio\" value=\"$valore\">";
	$conta++;
}
//in questo modo nella pag. add_pagina.php puoi ricevere l'array $_POST['pagamenti']
//ecc...
?>
poi fai attenzione che ciclando da 0 in poi $_POST[$cont] ottieni (es.) $_POST[0] $_POST[1] ecc...
ma analogamente ciclando $_POST[$cont_p] ottieni di nuovo $_POST[0] $_POST[1] ecc...
mettendo nella chek name=\"pagamento[$conta]\ ciclando ottieni $_POST['pagamento'][0] $_POST['pagamento'][1] ecc... che è diverso da $_POST[0] $_POST[1] ecc...
fai queste verifiche e sappimi dire

p.s.
a me piace usare echo al posto di print eventualmente correggi

Ciao e grazie per avermi risposto, adesso ci lavoro e ti faccio sapere, hai capito perfettamente l'errore
a presto
 
Ciao, non volevo dare più fastidio, ma alla fine rieccomi quà, non sono riuscito a risolvere questo problema, "Borgo", potresti darmi un ulteriore aiutino
Grazie da minatore
 
ciao
il problema è ancora che il print ti da dei valori che non dovrebbero esserci?
comunque do un occhio al tuo script poi (spero) di poterti rispondere
 
Grazie, ho sempre lo stesso problema, sono sicuro che ha sbagliare sono io, nel db mi inserisce sempre il valore degli acccessori anche non chekkandoli
Grazie ancora
 
ciao
il problema risiede qui
<input type='checkbox' name='$l'>$a_pagamenti[$l] >
quando dai il submit trasmetti un post di nome (es. 3)
quindi, quando ricevi, ricevi un $_POST[3] indipendentemente dal fatto che in un punto lo ricevi come
$_POST[$cont]
e nell'altro
$_POST[$cont_p]
sempre $_POST[3] rimane in quanto nel ciclo for scorri 0 , 1 , 2 , ..... quindi i nomi dei post $_POST[0], $_POST[1]..... sia nel primo ciclo che nel secondo
se provi a mettere un var_dump

PHP:
//.....
$num_optional = count($a_nome_optional); 

for($cont = 0; $cont < $num_optional; $cont++){                     
	var_dump($_POST[$cont]); echo " $cont <br>";
	if(isset($_POST[$cont])){
		//var_dump($_POST[$cont]); echo "$cont <br>";
		$a_accessori[]=$a_nome_optional[$cont]; 
	}                    
}
//....
e dail il submit per il terzo tipo di pagamento il var dump ti restituira
NULL 1
NULL 2
string(2) "on" 3
NULL 4 ecc... sino a NULL 43
devi differenziare i nomi nel campo di input del form
 
ciao
il problema risiede qui
<input type='checkbox' name='$l'>$a_pagamenti[$l] >
quando dai il submit trasmetti un post di nome (es. 3)
quindi, quando ricevi, ricevi un $_POST[3] indipendentemente dal fatto che in un punto lo ricevi come
$_POST[$cont]
e nell'altro
$_POST[$cont_p]
sempre $_POST[3] rimane in quanto nel ciclo for scorri 0 , 1 , 2 , ..... quindi i nomi dei post $_POST[0], $_POST[1]..... sia nel primo ciclo che nel secondo
se provi a mettere un var_dump

PHP:
//.....
$num_optional = count($a_nome_optional); 

for($cont = 0; $cont < $num_optional; $cont++){                     
	var_dump($_POST[$cont]); echo " $cont <br>";
	if(isset($_POST[$cont])){
		//var_dump($_POST[$cont]); echo "$cont <br>";
		$a_accessori[]=$a_nome_optional[$cont]; 
	}                    
}
//....
e dail il submit per il terzo tipo di pagamento il var dump ti restituira
NULL 1
NULL 2
string(2) "on" 3
NULL 4 ecc... sino a NULL 43
devi differenziare i nomi nel campo di input del form

Grazie, faccio come nell'esempio.
Ho provato a fare una ricerca per var_dump, ma sinceramente non ho capito molto.
Poi volevo chiederti: ma tu se ti fossi trovato in questo problema lo avresti così?
Grazie della gentilezza
 
premettendo che ho controllato il codice ed effettuato alcune prove,
potresti risolvere in modo molto semplice ma alquanto rudimentale.
Sei sicuro che l'utente può acquistare massimo con 7 metodi di pagamento, a quel punto ti basta sommare alla variabile degli accessori +10 sia in scrittura che in lettura...ti posto il codice della parte che hai pubblicato precedentemente ma che ovviamente deve essere leggermente modificato anche nella pagina dove l'utente può scegliere gli accessori facendo partire la variabile degli accessori non da 0 ma da 9. Ho provato la soluzione sul mio pc e funziona, anche se non è molto bella da vedere :)
se posti il codice in cui l'utente può selezionare i prodotti modifico quel poco da modificare e ti posto tutto.
 
ho trovato un'altra soluzione...non c'è bisogno che mi posti altro codice ma ho aggiunto una pagina che contiene una funzione semplicissima che trasforma i numeri da 0 a 7 in lettere dalla 'a' alla 'g' (ovviamente se ci saranno in futuro altri metodi di pagamento puoi continuare aggiungendo l'ottavo e la lettera 'h' e così via). Come dicevo ho fatto una pagina a parte per la funzione perché deve essere implementata in entrambe le pagine, ma puoi anche incollarla nella parte iniziale di entrambe e rimuovi la pagina, a quel punto superflua "function.php".
L'unico problema era che tu usavi le stesse variabili per due scopi diversi...in questo modo le variabili sono diverse.
Ti posto i codici delle 3 pagine:

function.php
PHP:
<?php
function change($var) 
{ 
    $search = 'a b c d e f g'; 
    $replace = '0 1 2 3 4 5 6'; 

    $search = explode(' ', $search); 
    $replace = explode(' ', $replace); 

    $var = str_replace($replace, $search, $var); 
    return $var; 
} 
?>

pagina.php
PHP:
<?php
require 'function.php'; 

$a_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale', 
                'Assegno Circolare', 'Finanziamento in Sede'); 
$lungh_array_pagamenti= count($a_pagamenti); 
$riga_p=1; 

print" 
<form method='post' action='add_pagina.php'> 
<table cellpadding='0' cellspacing='0' border='0'> 
    <tr> 
        <td valign='top' height='25' class='font_1'> 
            Scegli Metodi di Pagamento 
        </td> 
    </tr> 
    <tr> 
        <td> 
            <table cellpadding='0' cellspacing='0' border='0' bordercolor='#23D527'>"; 
                for($l=0; $l<$lungh_array_pagamenti; $l++) 
                    { 
                        if($riga_p == 1) 
                            { 
                                print"<tr>";     
                            } 
                            $lettera=change($l);
                                print" 
                                    <td width='200' class='font_3'> 
                                        <input type='checkbox' name='$lettera'>$a_pagamenti[$l] 
                                    </td>"; 
                                    $riga_p++; 
                        if($riga_p > 4) 
                            { 
                                print"</tr>"; 
                                $riga_p=1;     
                            } 
                    } 
            print" 
            </table> 
        </td> 
    <tr><td height='10'></td></tr> 
</table> 
<table cellpadding='0' cellspacing='0' border='0'> 
    <tr> 
        <td valign='bottom' height='50'> 
            <input name='add' id='as' type='image' value='add_veicoli' img src=../images/conferma_inserimento.jpg border='0' /> 
        </td> 
    </tr> 
</table> 
</form>"; 
?>


add_pagina.php
PHP:
<?php 
require '../connessione/Config.php'; 
require '../connessione/Connect.php'; 
require 'function.php'; 

        $a_nome_optional = array('Abs', 'Esp', 'Airbag guidatore', 'Airbag passeggero', 'Airbag laterale', 'Fendinebbia', 
                'Chiusure centralizzate', 'Servosterzo', 'Alzacristalli elettrici', 'Autoradio', 
                'Lettore cd', 'Comandi al volante', 'Computer di bordo', 'City', 'Antifurto acustico', 
                'Antifurto satellitare', 'Blockshaft', 'Clima digitale', 'Clima analogico', 'Cerchi in lega', 
                'Immobilizzatore elettronico', 'Navigatore', 'Tetto panoramico', 'Tetto apribile', 
                'Specchi laterali elettrici', 'Cruise control', 'Regolazione elettronica sedili', 
                'Interni in pelle', 'Interni in alcantara',    'Sedili riscaldabili', 'Barre tetto', 
                'Trazione integrale', 'Controllo trazione', 'Sensori luci', 
                'Sensori pioggia', 'Sensori parcheggio anteriori', 'Sensori parcheggio posteriori', 
                'Fari xenon', 'Caricatore cd', 'Bluetooth', 'Attacco usb', 'Gancio traino', 'Adatto handicap'); 
             
        $num_optional = count($a_nome_optional); 
        for($cont = 0; $cont < $num_optional; $cont++) 
            {                     
                if(isset($_POST[$cont])) 
                    { 
                        $a_accessori[]=$a_nome_optional[$cont]; 
                    }                     
            } 
        if(!isset($a_accessori)) 
            { 
                $accessori = ''; 
            } 
        else 
            { 
                $accessori = implode(',', $a_accessori); 
            } 
         
         
        $a_nome_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale', 
                'Assegno Circolare', 'Finanziamento in Sede'); 
             
        $num_pagamenti = count($a_nome_pagamenti); 
        for($cont_p = 0; $cont_p < $num_pagamenti; $cont_p++) 
            {   
            	$lettera=change($cont_p);
                if(isset($_POST[$lettera])) 
                    { 
                        $a_pagamenti[]=$a_nome_pagamenti[$cont_p]; 
                    }                     
            } 
        if(!isset($a_pagamenti)) 
            { 
                $pagamenti = ''; 
            } 
        else 
            { 
                $pagamenti = implode(',', $a_pagamenti); 
            } 
                         
        $tipo_pagamento = $pagamenti; 
         
                 
		print "pag: ".$pagamenti;
        print "<br>acc: ".$accessori; 
     
?>

provala e se c'è qualcosa che non va fammi un fischio ;)
 
ciao
mi avevi chiesto come avrei fatto io.
ti posto un semplice esempio, senza passare a caratteri letterali.

PHP:
<?php
if(isset($_POST['invia'])){
	foreach($_POST['pagamenti'] as $valore){
		if($valore !=""){
			echo $valore."<br>";
		}
	}
}
?>
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  <p>
<?php
for($j=0; $j<9; $j++){
	echo "<input type=\"checkbox\" name=\"pagamenti[$j]\" value=\"selezionato il $j\">";
}
?>
</p>
<p>
    <input name="invia" type="submit" id="invia" value="Invia">
</p>
</form>

ma forse esistono anche metodi migliori
 
ho trovato un'altra soluzione...non c'è bisogno che mi posti altro codice ma ho aggiunto una pagina che contiene una funzione semplicissima che trasforma i numeri da 0 a 7 in lettere dalla 'a' alla 'g' (ovviamente se ci saranno in futuro altri metodi di pagamento puoi continuare aggiungendo l'ottavo e la lettera 'h' e così via). Come dicevo ho fatto una pagina a parte per la funzione perché deve essere implementata in entrambe le pagine, ma puoi anche incollarla nella parte iniziale di entrambe e rimuovi la pagina, a quel punto superflua "function.php".
L'unico problema era che tu usavi le stesse variabili per due scopi diversi...in questo modo le variabili sono diverse.
Ti posto i codici delle 3 pagine:

function.php
PHP:
<?php
function change($var) 
{ 
    $search = 'a b c d e f g'; 
    $replace = '0 1 2 3 4 5 6'; 

    $search = explode(' ', $search); 
    $replace = explode(' ', $replace); 

    $var = str_replace($replace, $search, $var); 
    return $var; 
} 
?>

pagina.php
PHP:
<?php
require 'function.php'; 

$a_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale', 
                'Assegno Circolare', 'Finanziamento in Sede'); 
$lungh_array_pagamenti= count($a_pagamenti); 
$riga_p=1; 

print" 
<form method='post' action='add_pagina.php'> 
<table cellpadding='0' cellspacing='0' border='0'> 
    <tr> 
        <td valign='top' height='25' class='font_1'> 
            Scegli Metodi di Pagamento 
        </td> 
    </tr> 
    <tr> 
        <td> 
            <table cellpadding='0' cellspacing='0' border='0' bordercolor='#23D527'>"; 
                for($l=0; $l<$lungh_array_pagamenti; $l++) 
                    { 
                        if($riga_p == 1) 
                            { 
                                print"<tr>";     
                            } 
                            $lettera=change($l);
                                print" 
                                    <td width='200' class='font_3'> 
                                        <input type='checkbox' name='$lettera'>$a_pagamenti[$l] 
                                    </td>"; 
                                    $riga_p++; 
                        if($riga_p > 4) 
                            { 
                                print"</tr>"; 
                                $riga_p=1;     
                            } 
                    } 
            print" 
            </table> 
        </td> 
    <tr><td height='10'></td></tr> 
</table> 
<table cellpadding='0' cellspacing='0' border='0'> 
    <tr> 
        <td valign='bottom' height='50'> 
            <input name='add' id='as' type='image' value='add_veicoli' img src=../images/conferma_inserimento.jpg border='0' /> 
        </td> 
    </tr> 
</table> 
</form>"; 
?>


add_pagina.php
PHP:
<?php 
require '../connessione/Config.php'; 
require '../connessione/Connect.php'; 
require 'function.php'; 

        $a_nome_optional = array('Abs', 'Esp', 'Airbag guidatore', 'Airbag passeggero', 'Airbag laterale', 'Fendinebbia', 
                'Chiusure centralizzate', 'Servosterzo', 'Alzacristalli elettrici', 'Autoradio', 
                'Lettore cd', 'Comandi al volante', 'Computer di bordo', 'City', 'Antifurto acustico', 
                'Antifurto satellitare', 'Blockshaft', 'Clima digitale', 'Clima analogico', 'Cerchi in lega', 
                'Immobilizzatore elettronico', 'Navigatore', 'Tetto panoramico', 'Tetto apribile', 
                'Specchi laterali elettrici', 'Cruise control', 'Regolazione elettronica sedili', 
                'Interni in pelle', 'Interni in alcantara',    'Sedili riscaldabili', 'Barre tetto', 
                'Trazione integrale', 'Controllo trazione', 'Sensori luci', 
                'Sensori pioggia', 'Sensori parcheggio anteriori', 'Sensori parcheggio posteriori', 
                'Fari xenon', 'Caricatore cd', 'Bluetooth', 'Attacco usb', 'Gancio traino', 'Adatto handicap'); 
             
        $num_optional = count($a_nome_optional); 
        for($cont = 0; $cont < $num_optional; $cont++) 
            {                     
                if(isset($_POST[$cont])) 
                    { 
                        $a_accessori[]=$a_nome_optional[$cont]; 
                    }                     
            } 
        if(!isset($a_accessori)) 
            { 
                $accessori = ''; 
            } 
        else 
            { 
                $accessori = implode(',', $a_accessori); 
            } 
         
         
        $a_nome_pagamenti=array('Contanti', 'Bonifico Bancario', 'Bonifico Postale', 'Assegno Bancario', 'Assegno Postale', 
                'Assegno Circolare', 'Finanziamento in Sede'); 
             
        $num_pagamenti = count($a_nome_pagamenti); 
        for($cont_p = 0; $cont_p < $num_pagamenti; $cont_p++) 
            {   
            	$lettera=change($cont_p);
                if(isset($_POST[$lettera])) 
                    { 
                        $a_pagamenti[]=$a_nome_pagamenti[$cont_p]; 
                    }                     
            } 
        if(!isset($a_pagamenti)) 
            { 
                $pagamenti = ''; 
            } 
        else 
            { 
                $pagamenti = implode(',', $a_pagamenti); 
            } 
                         
        $tipo_pagamento = $pagamenti; 
         
                 
		print "pag: ".$pagamenti;
        print "<br>acc: ".$accessori; 
     
?>

provala e se c'è qualcosa che non va fammi un fischio ;)

Grazie, provo il codice e ti faccio sapere, grazie di nuovo
 

Discussioni simili