$_POST array di valori array....

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciao a tutti, spiego il mio problema... Io ho un form composto cosi:

HTML:
<table>
<form action="" method="post">
<tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart[]" id="barcodeart" size="10" value="<?php echo $barcodevisto[$a]; ?>"></td>
    <td><input type="submit" class="visto" name="visto[]" onclick= "this.form.action=<?php htmlspecialchars($_SERVER['PHP_SELF'])?> "></td>
    <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="<?php echo $descrizione[$a]; ?>"></td>
    <td><input type="text" style="text-align:center" placeholder="Qnt" name="campo[]" id="quantita" size="3" value="1"></td>
    <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="<?php echo $prezzo[$s]; ?>" ></td>
    <td><input type="text" placeholder="Sc %" name="scontoperc[]" id="scontoperc" size="3"></td>
    <td><input type="text" placeholder="Sc VAL" name="scontoval[]" id="scontoval" size="4"></td>
    <td><input type="text" placeholder="P.Scontato" name="prezzosconto[]" id="prezzosconto" size="6"></td>
  </tr>
  </form>
  </table>

Ora da come potete vedere quando si preme il pulsante visto esegue una query al DB cosi composta :

PHP:
if(isset($_POST['visto'])){
	$barcodevisto=$_POST[barcodeart];
	$queryart=("SELECT * FROM articoli WHERE Barcode='$barcodevisto'") or die (mysql_error()); 
	$result = MYSQL_QUERY($queryart) or die('Query failed: ' . mysql_error() . "<br />\n$sql"); 
    //verifico che esista una una card con tale barcode 
    $esistebc=mysql_num_rows($result);
    //se $esiste == 0 non cè
    if($esistebc > 0){//esiste
        //estraggo usn e pass
        $righi=mysql_fetch_array($result);
		$barcodenew=$righi[Barcode];
		$descrizione=$righi[Descrizione];
		$prezzo=$righi[Vendita];
		$fornitore=$righi[Fornitore];
		$reparto=$righi[Reparto];
		            } else {
						?>
						<script>
        alert('Email non trovata');
    </script>
    <?php
	echo $barcodevisto;
	                       }
 }
}

Sarebbe tutto abbastanza facile tranne che se eseguo :

PHP:
foreach ($_POST as $nome => $valore)
{
   echo "Il valore di $nome è $valore <br>";
}

Mi sputa fuori sepre :

Codice:
Il valore di barcodeart è Array
Il valore di visto è Array
Il valore di descrizione è Array
Il valore di campo è Array
Il valore di prezzo è Array
Il valore di scontoperc è Array
Il valore di scontoval è Array
Il valore di prezzosconto è Array

E chiaramente non mi funziona ne la query del pulsante ne la condizione while che ho dopo....
Come posso risolvere??
 
$_POST è un array contenente tutte le variabili che vengono passate quando si clicca su submit.

devi indicare $_POST["nome"]

Leggi una guida base a PHP prima di addentrarti in queste cose per favore.


Tra l'altro dando nomi agli input come "mioname[]" indichi che il contenuto di quell'input è un array, e non credo sia ciò che vuoi davvero.
 
nono aspetta forse ho scritto male o non mi sono spiegato bene...
Purtroppo i valori del form per me sono array veramente... Mi spiego meglio... Quel tasto con cui prelevo i vari campi serve a compilare automaticamente (se il barcode è esatto) i restanti campi.
Nel momento in cui i campi sono compilati, ho messo una while che controlla che i campi sono compilati e genera un altra riga gemella (ecco perche mi servono gli array).
Cmq se vedi bene nel momento in cui si preme il tasto "visto" c'è una lettura come dici te :

$barcodevisto=$_POST[barcodeart];

e da qui faccio la query.

Infatti il mio problema è che la variabile barcodeart e le altre devono aumentare X volte... Dove X sono le volte che l'utente inserisce e COMPLETA la riga...
Non riesco a capire come effettuare questo.. Per il resto se avessi una singola riga il mio script funzionerebbe perfettamente...
 
aggiungo che chiaramente la while non l'ho messa ma è abbastanza facile.. Controlla i vari campi array se sono diversi da null ricrea la riga altrimenti non fa nulla.
 
ciao
prova cosi
PHP:
<?php
foreach ($_POST as $nome_1 => $valore_1){
	echo "Il valore di $nome_1 è :<br />";
    foreach($valore_1 as $nome_2 => $valore_2){
		echo "&nbsp;&nbsp;&nbsp;&nbsp; $valore_2 <br />";
	}
	echo "<br />";
}  
?>
 
Cosi riesco a valorizzare il primo valore... Ma non riesce a valorizzare gli altri... posto la pagina completa cosi forse è piu chiaro...

PHP:
<?php
 include('connect.php');
foreach ($_POST as $nome_1 => $valore_1){
    echo "Il valore di $nome_1 è :<br />";
    foreach($valore_1 as $nome_2 => $valore_2){
        echo "&nbsp;&nbsp;&nbsp;&nbsp; $valore_2 <br />";
    }
    echo "<br />";
}
 if(isset($_POST['visto'])){
	$barcodevisto=$_POST[barcodeart];
	$queryart=("SELECT * FROM articoli WHERE Barcode='$barcodevisto'") or die (mysql_error()); 
	$result = MYSQL_QUERY($queryart) or die('Query failed: ' . mysql_error() . "<br />\n$queryart"); 
    //verifico che esista una una card con tale barcode 
    $esistebc=mysql_num_rows($result);
    //se $esiste == 0 non cè
    if($esistebc > 0){//esiste
        //estraggo usn e pass
        $righi=mysql_fetch_array($result);
		$barcodenew=$righi[Barcode];
		$descrizione=$righi[Descrizione];
		$prezzo=$righi[Vendita];
		$fornitore=$righi[Fornitore];
		$reparto=$righi[Reparto];
		            } else {
						?>
						<script>
        alert('Email non trovata');
    </script>
    <?php
	                       }
 }
 ?>
<table>
<form action="" method="post">
<tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart[]" id="barcodeart" size="10" value="<?php echo $barcodevisto[$a]; ?>"></td>
    <td><input type="submit" class="visto" name="visto[]" onclick= "this.form.action=<?php htmlspecialchars($_SERVER['PHP_SELF'])?> "></td>
    <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="<?php echo $descrizione[$a]; ?>"></td>
    <td><input type="text" style="text-align:center" placeholder="Qnt" name="campo[]" id="quantita" size="3" value="1"></td>
    <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="<?php echo $prezzo[$s]; ?>" ></td>
    <td><input type="text" placeholder="Sc %" name="scontoperc[]" id="scontoperc" size="3"></td>
    <td><input type="text" placeholder="Sc VAL" name="scontoval[]" id="scontoval" size="4"></td>
    <td><input type="text" placeholder="P.Scontato" name="prezzosconto[]" id="prezzosconto" size="6"></td>
  </tr>
  </form>
  </table>
<?php
$a = 1;
while (($barcodevisto[$a] != null)&&($descrizione[$a] != null)&&($prezzo[$a] != null)){
	?>
    <table>
    <form action="" method="post">
<tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart[]" id="barcodeart" size="10" value="<?php echo $barcodevisto[$a]; ?>"></td>
    <td><input type="submit" class="visto" name="visto[]" onclick= "this.form.action=<?php htmlspecialchars($_SERVER['PHP_SELF'])?> "></td>
    <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="<?php echo $descrizione[$a]; ?>"></td>
    <td><input type="text" style="text-align:center" placeholder="Qnt" name="campo[]" id="quantita" size="3" value="1"></td>
    <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="<?php echo $prezzo[$s]; ?>" ></td>
    <td><input type="text" placeholder="Sc %" name="scontoperc[]" id="scontoperc" size="3"></td>
    <td><input type="text" placeholder="Sc VAL" name="scontoval[]" id="scontoval" size="4"></td>
    <td><input type="text" placeholder="P.Scontato" name="prezzosconto[]" id="prezzosconto" size="6"></td>
  </tr>
  </form>
  </table>
  <?php
$a++;
} 

?>

Riscrivo cosa dovrei ottenere facendo cosi.
A me serve che l'utente inserisca il barcode (per l'esattezza lo legge tramite pistola) una volta fatto ciò clicca su visto (che tra le altre cose non so perchè ma appena legge il codice mi prende in automatico l'invio)A quel punto entra in atto la parte del pulsante, che legge il valore inserito effettua una query per contollare che esiste quel barcode, nel caso in cui esiste compila da solo descrizione e prezzo, altrimenti da un alert di errore. Nel momento in cui i campi vengono compilati, c'è una while che vede se o campi sono diversi da null (=!null) se è vero crea un altra riga con i parametri gemelli a quella di sopra. Ecco perchè mi serve che i valori siano dentro un array... Ovviamente non posso sapere quante volte viene iterata questa cosa.. Ecco perche una while e non una for...
Spero di essermi spiegato bene...
 
Cosi riesco a valorizzare il primo valore... Ma non riesce a valorizzare gli altri... posto la pagina completa cosi forse è piu chiaro...

(che tra le altre cose non so perchè ma appena legge il codice mi prende in automatico l'invio)


Le pistole barcode quando leggono un codice premono in automatico Invio perché si presume che lo premerebbe l'utente subito dopo. Devi modificare il comportamento di default dei driver della pistola per non fargli premere Invio automaticamente credo.
 
si infatti semmai metto un pausa.. Il mio lavoro è quello :) Prima cmq devo risolvere questo problema...
 
niente non riesco con le prove... eppure su carta è una stupidaggine cazzo... 5 array diversi con variabile inserita da input box un tasto che verifica il barcode e autoriempie gli altri e una condizione... se sono tutti compilati aggiungi una riga gemella...
 
Con le prove che sto facendo ho ottenuto una sorta di MINI risultato... nel senso che... Non capisco perchè ora non restituisce errore la query, la query viene effettuata, ma i campi non si compilano... inoltre la descrizione è troncata alla prima parola e il barcode scompare... Questa è la pagina:

PHP:
<?php
include('connect.php');
 if(isset($_POST['visto'])){
	foreach ($_POST as $nome_1 => $valore_1){
    echo "Il valore di $nome_1 è :<br />";
    foreach($valore_1 as $nome_2 => $valore_2){
        echo "&nbsp;&nbsp;&nbsp;&nbsp; $valore_2 <br />";
    }
    echo "<br />";
}
	$queryart=("SELECT * FROM articoli WHERE Barcode='$valore_2'") or die (mysql_error()); 
	$result = MYSQL_QUERY($queryart) or die('Query failed: ' . mysql_error() . "<br />\n$queryart"); 
    //verifico che esista una una card con tale barcode 
    $esistebc=mysql_num_rows($result);
    //se $esiste == 0 non cè
    if($esistebc > 0){//esiste
        //estraggo usn e pass
        $righi=mysql_fetch_array($result);
		$barcodenew[$a]=$righi[Barcode];
		$descrizione[$a]=$righi[Descrizione];
		$prezzo[$a]=$righi[Vendita];
		$fornitore[$a]=$righi[Fornitore];
		$reparto[$a]=$righi[Reparto];
		            } else {
						?>
						<script>
        alert('Articolo non trovato!');
    </script>
    <?php
	                       }
 }
 ?>
<table>
<form action="" method="post">
<tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart[]" id="barcodeart" size="10" value="<?php echo $barcodenew[$a]; ?>"></td>
    <td><input type="submit" class="visto" name="visto[]" onclick= "this.form.action=<?php htmlspecialchars($_SERVER['PHP_SELF'])?> "></td>
    <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="<?php echo $descrizione[$a]; ?>"></td>
    <td><input type="text" style="text-align:center" placeholder="Qnt" name="campo[]" id="quantita" size="3" value="1"></td>
    <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="<?php echo $prezzo[$s]; ?>" ></td>
    <td><input type="text" placeholder="Sc %" name="scontoperc[]" id="scontoperc" size="3"></td>
    <td><input type="text" placeholder="Sc VAL" name="scontoval[]" id="scontoval" size="4"></td>
    <td><input type="text" placeholder="P.Scontato" name="prezzosconto[]" id="prezzosconto" size="6"></td>
  </tr>
  </form>
  </table>
<?php
$a = 0;
while (($barcodeart[$a] != null)&&($descrizione[$a] != null)&&($prezzo[$a] != null)){
	?>
    <table>
    <form action="" method="post">
<tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart[]" id="barcodeart" size="10" value="<?php echo $barcodevisto[$a]; ?>"></td>
    <td><input type="submit" class="visto" name="visto[]" onclick= "this.form.action=<?php htmlspecialchars($_SERVER['PHP_SELF'])?> "></td>
    <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="<?php echo $descrizione[$a]; ?>"></td>
    <td><input type="text" style="text-align:center" placeholder="Qnt" name="campo[]" id="quantita" size="3" value="1"></td>
    <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="<?php echo $prezzo[$a]; ?>" ></td>
    <td><input type="text" placeholder="Sc %" name="scontoperc[]" id="scontoperc" size="3"></td>
    <td><input type="text" placeholder="Sc VAL" name="scontoval[]" id="scontoval" size="4"></td>
    <td><input type="text" placeholder="P.Scontato" name="prezzosconto[]" id="prezzosconto" size="6"></td>
  </tr>
  </form>
  </table>
  <?php
$a++;
} 

?>
 
no fermi tutti... il problema è che non prende il valore del barcode... ho scoperto ora che ho un articolo in magazzino di nome ANELLO a prezzo 0 e niente barcode... Ecco perche sembrava che funzionasse e invece non funziona... se faccio uscire il valore della variabile $valore[$a] non mi restituisce NULLA...
 
praticamente è come se la variabile barcode di confronto nella query non è mai il barcode che inserisco io, ma anzi è VUOTA.
 

Discussioni simili