Array composto da elementi array

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

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciao a tutti,
ho un problema stupidissimo ma mi sta facendo diventare matto.

Io ho un array in ingresso HTML :

PHP:
<?php
 echo '
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$righi['Barcode'].'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="'.$righi['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$righi['Vendita'].'" ></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> 
        ';
?>

A questo punto io devo prelevare i dati del form in ingresso e buttarli dentro un array... Ho fatto cosi ma non va..:

PHP:
<?php
$barcode = $_POST['barcodeart_vecchi'];
$descrizione = $_POST['descrizione'];
$prezzo = $_POST['prezzo'];
$conta = count($descrizione);
    for($i=0;$i<$conta;$i++){
	$data[] = array('$barcode[$i]',' $descrizione[$i]', '$prezzo[$i]');
	}
        echo $barcode[$i];
	echo $descrizione[$i];
	echo $prezzo[$i];
?>

Come potete vedere provo a stampare i valori ma la pagina rimane bianca senza valori a video...

Cosa sbaglio?!?!?!?
 
Semplicemente perché chiudo il ciclo for prima degli echo, chiudi la graffa dopo e dovrebbe stamparli
 
no ho provato anche singolarmente... ma non li valorizza... sempre schermata bianca... posto il codice di provenienza.... La form viene generata dopo che ha trovato dei risultati... :

PHP:
<?php
if(isset($result)) {
    while($righi=mysql_fetch_array($result))
    {
        //per ogni riga trovata, creo la sua "riga". Se il nuovo barcode immesso non esiste non mi interessa, perché non sarà tra i risultati
        echo '
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$righi['Barcode'].'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="'.$righi['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$righi['Vendita'].'" ></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> 
        ';
    }
	 }
?>
 
no ho provato anche singolarmente... ma non li valorizza... sempre schermata bianca... posto il codice di provenienza.... La form viene generata dopo che ha trovato dei risultati... :

PHP:
<?php
if(isset($result)) {
    while($righi=mysql_fetch_array($result))
    {
        //per ogni riga trovata, creo la sua "riga". Se il nuovo barcode immesso non esiste non mi interessa, perché non sarà tra i risultati
        echo '
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$righi['Barcode'].'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="'.$righi['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$righi['Vendita'].'" ></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> 
        ';
    }
	 }
?>
Il form dove lo apri? Hai controllato tramite var_dump se non vengono inviate le variabili post?
 
il form viene aperto sopra :

HTML:
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart" size="10" value=""></td> 
<td><input type="submit" class="visto" name="visto"></td>
</tr>
</table>

No non ho controllato con il var dump.. Ma scusa ne dovrei mettere 4 di var dump ossia uno per ogni input no? nella forma var_dump($barcode); etc no?
 
il form viene aperto sopra :

HTML:
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart" size="10" value=""></td> 
<td><input type="submit" class="visto" name="visto"></td>
</tr>
</table>

No non ho controllato con il var dump.. Ma scusa ne dovrei mettere 4 di var dump ossia uno per ogni input no? nella forma var_dump($barcode); etc no?
Ti basta mettere un var_dump su $_POST e controllare il risultato oppure postarlo qui
 
risultato dopo l'invio di var_dump($_post);

array(1) { ["ddt"]=> string(3) "ddt" }
 
allora.. la pagina in cui l'ho messo è quella a cui spedisco i dati per leggere i valori che si chaiam read_ddt.php.

La pagina è la seguente:

PHP:
<?php
session_start();
$barcode=$_POST[barcodeart];
$descrizione=$_POST[descrizione];
$quantita=$_POST[quantita];
$prezzo=$_POST[prezzo];
$scontoperc=$_POST[scontoperc];
$scontoval=$_POST[scontoval];
$prezzosconto=$_POST[prezzosconto];
var_dump($_POST);
echo '
<table align=center" border="1"> 
<tr>

<td width="130" align="center"><b><font color="blue"> Barcode </font></b></td>

<td width="130" align="center"><b><font color="blue"> Descrizione </font></b></td>

<td width="130" align="center"><b><font color="blue"> Quantità </font></b></td>

<td width="130" align="center"><b><font color="blue"> Prezzo </font></b></td>

<td width="130" align="center"><b><font color="blue"> Sconto % </font></b></td>

<td width="130" align="center"><b><font color="blue"> Sconto Val </font></b></td>

<td width="130" align="center"><b><font color="blue"> Prezzo Scontato </font></b></td>

</tr>
</table>
';
$conta=count($barcode);
for($a=0;$a<$conta;$a++){
echo ' 
<table align=center" border="1"> 
<tr align="center"> 
<td width="130" align="center">' . $barcode[$a] . '</td>
<td width="130" align="center">' .  $descrizione[$a] . '</td>
<td width="130" align="center">' .  $quantita[$a] . '</td>
<td width="130" align="center">' . $prezzo[$a] . '</td>
<td width="130" align="center">' . $scontoperc[$a] . '</td>
<td width="130" align="center">' . $scontoval[$a] . '</td>
<td width="130" align="center">' . $prezzosconto[$a] . '</td>
</tr>
</table>
';
}
?>
Il form si autocompila... Io inserisco solo un barcode, lui verifica e compila il resto dei campi.
 
Se sono nella stessa pagina mi sembra un po strano che non vengano spediti, magari manca qualcosa dopo faccio delle prove e ti so dire
 
no una è la pagina del form con le select, una è la pagina dove recupero i dati e li stampo...
 
no una è la pagina del form con le select, una è la pagina dove recupero i dati e li stampo...
Allora perché invii i dati nella stessa pagina? (Intendo $_SERVER['PHP_SELF'] nell'action del form) Mettici la pagina che li deve ricevere nel form
 
nono la pagina del form si autocostruisce i vari blocchi.. Famo cosi sennò non riesco a spiegarmi...

vai a questo indirizzo :

http://laviadellanima.com/pdf/altervista.php

inserisci questo barcode: 1920100216004

Premi il tasto ddt...

il tasto ddt sarebbe la pagina che ricevo i dati dal form...
 
nono la pagina del form si autocostruisce i vari blocchi.. Famo cosi sennò non riesco a spiegarmi...

vai a questo indirizzo :

http://laviadellanima.com/pdf/altervista.php

inserisci questo barcode: 1920100216004

Premi il tasto ddt...

il tasto ddt sarebbe la pagina che ricevo i dati dal form...
L'errore è semplice, nel tasto ddt tu non invii il form con i dati del barcode ma quello in cui hai messo i submit, togli questo secondo form
Codice:
<form action="" method="post">
<input type="submit" name="creapdf" onclick="this.form.action='mypdf.php'" value="creapdf">
<input type="submit" name="ddt" onclick="this.form.action='read_ddt.php'" value="ddt">
</form>
E aggiungi quei submit alla fine del form autocompilato
 
fatto ed ora nella var dump esce questo :

array(9) { ["barcodeart_new"]=> string(0) "" ["ddt"]=> string(3) "ddt" ["barcodeart_vecchi"]=> array(2) { [0]=> string(13) "7640141078778" [1]=> string(13) "1920100216004" } ["descrizione"]=> array(2) { [0]=> string(25) "BRACCIALE IN AGATA 2 FILE" [1]=> string(38) "BRACC.ELAST SWAROVSKI 3 FILI AMETISTA" } ["quantita"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "1" } ["prezzo"]=> array(2) { [0]=> string(3) "156" [1]=> string(3) "139" } ["scontoperc"]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } ["scontoval"]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } ["prezzosconto"]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } }

Solo che i valori sotto non vengono stampati...

Ti scrivo la pagina... :

PHP:
<?php
session_start();
$barcode=$_POST[barcodeart];
$descrizione=$_POST[descrizione];
$quantita=$_POST[quantita];
$prezzo=$_POST[prezzo];
$scontoperc=$_POST[scontoperc];
$scontoval=$_POST[scontoval];
$prezzosconto=$_POST[prezzosconto];
var_dump($_POST);
echo '
<table align=center" border="1"> 
<tr>

<td width="130" align="center"><b><font color="blue"> Barcode </font></b></td>

<td width="130" align="center"><b><font color="blue"> Descrizione </font></b></td>

<td width="130" align="center"><b><font color="blue"> Quantità </font></b></td>

<td width="130" align="center"><b><font color="blue"> Prezzo </font></b></td>

<td width="130" align="center"><b><font color="blue"> Sconto % </font></b></td>

<td width="130" align="center"><b><font color="blue"> Sconto Val </font></b></td>

<td width="130" align="center"><b><font color="blue"> Prezzo Scontato </font></b></td>

</tr>
</table>
';
$conta=count($barcode);
for($a=0;$a<$conta;$a++){
echo ' 
<table align=center" border="1"> 
<tr align="center"> 
<td width="130" align="center">' . $barcode[$a] . '</td>
<td width="130" align="center">' .  $descrizione[$a] . '</td>
<td width="130" align="center">' .  $quantita[$a] . '</td>
<td width="130" align="center">' . $prezzo[$a] . '</td>
<td width="130" align="center">' . $scontoperc[$a] . '</td>
<td width="130" align="center">' . $scontoval[$a] . '</td>
<td width="130" align="center">' . $prezzosconto[$a] . '</td>
</tr>
</table>
';
}
?>
 
ci sono riuscito... praticamente la if confrontava un valore che non esisteva.. ora sembra andare... Faccio un altra prova...
 
si sembra che ora vada... mi rimane un problema... sulla pagina di inserimento.... Se il barcode che isnerisco è gia nelle linee create non lo riepte e non crea un altra riga...
 
riporto la pagina compleca con i vari concatenamenti delle select:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<body> 
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart" size="10" value=""></td> 
<td><input type="submit" class="visto" name="visto"></td>
</tr>
</table> 
<?php  
include('connect.php');  
if(isset($_POST['barcodeart_new']) && !empty($_POST['barcodeart_new']))
    $query = 'SELECT * FROM articoli WHERE Barcode=\''.mysql_real_escape_string($_POST['barcodeart_new']).'\'';    //se i barcode sono interi, si possono evitare gli apici \'
else if(isset($_POST['barcodeart_vecchi']))
    $query = 'SELECT * FROM articoli WHERE 0 ';    //il WHERE 0 è una bruttura... se non funziona, si può cercar di far di meglio

if(isset($_POST['barcodeart_vecchi']))
    foreach($_POST['barcodeart_vecchi'] as $barcode)
        $query .= ' OR Barcode=\''.mysql_real_escape_string($barcode).'\' ';    //se i barcode sono interi, si possono evitare gli apici \'
if(isset($_POST['barcodeart_new']) || isset($_POST['barcodeart_vecchi']))    
    $result = mysql_query($query) or die('Query failed: ' . mysql_error() . "<br />");
?> 
<table> 
<?php
if(isset($result)) {
    while($righi=mysql_fetch_array($result))
    {
        //per ogni riga trovata, creo la sua "riga". Se il nuovo barcode immesso non esiste non mi interessa, perché non sarà tra i risultati
        echo '
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$righi['Barcode'].'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="'.$righi['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$righi['Vendita'].'" ></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> 
        ';
    }
	 }
?>
<input type="submit" name="creapdf" onclick= "this.form.action='mypdf.php'" value="creapdf">
<input type="submit" name="ddt" onclick= "this.form.action=' read_ddt.php'" value="ddt">
</table> 
</form>
</body> 
</html>
 
riporto la pagina compleca con i vari concatenamenti delle select:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<body> 
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart" size="10" value=""></td> 
<td><input type="submit" class="visto" name="visto"></td>
</tr>
</table> 
<?php  
include('connect.php');  
if(isset($_POST['barcodeart_new']) && !empty($_POST['barcodeart_new']))
    $query = 'SELECT * FROM articoli WHERE Barcode=\''.mysql_real_escape_string($_POST['barcodeart_new']).'\'';    //se i barcode sono interi, si possono evitare gli apici \'
else if(isset($_POST['barcodeart_vecchi']))
    $query = 'SELECT * FROM articoli WHERE 0 ';    //il WHERE 0 è una bruttura... se non funziona, si può cercar di far di meglio

if(isset($_POST['barcodeart_vecchi']))
    foreach($_POST['barcodeart_vecchi'] as $barcode)
        $query .= ' OR Barcode=\''.mysql_real_escape_string($barcode).'\' ';    //se i barcode sono interi, si possono evitare gli apici \'
if(isset($_POST['barcodeart_new']) || isset($_POST['barcodeart_vecchi']))    
    $result = mysql_query($query) or die('Query failed: ' . mysql_error() . "<br />");
?> 
<table> 
<?php
if(isset($result)) {
    while($righi=mysql_fetch_array($result))
    {
        //per ogni riga trovata, creo la sua "riga". Se il nuovo barcode immesso non esiste non mi interessa, perché non sarà tra i risultati
        echo '
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$righi['Barcode'].'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="'.$righi['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$righi['Vendita'].'" ></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> 
        ';
    }
	 }
?>
<input type="submit" name="creapdf" onclick= "this.form.action='mypdf.php'" value="creapdf">
<input type="submit" name="ddt" onclick= "this.form.action=' read_ddt.php'" value="ddt">
</table> 
</form>
</body> 
</html>
Il codice è molto migliorabile comunque controlla se il barcode vecchio è uguale a quello nuovo e se lo è invece di aggiungere un or fai un union select col barcode, dovrebbe funzionare
PHP:
if(isset($_POST['barcodeart_vecchi'])){
    foreach($_POST['barcodeart_vecchi'] as $barcode)
        $query .= ' OR Barcode=\''.mysql_real_escape_string($barcode).'\' '; 
   if(in_array($_POST['barcodeart_new'],$_POST['barcodeart_vecchi']))
        $query .= "UNION SELECT * FROM articoli WHERE Barcode='".mysql_real_escape_string($_POST['barcodeart_vecchi'][array_search($_POST['barcodeart_new'],$_POST['barcodeart_vecchi'])])."'";
}
//dal vangelo secondo php: mysql è deprecato
 
Ultima modifica:
potresti spiegarmi come si fa l'union select? è la prima volta che ne sento parlare...per piacere chiaramente....
 

Discussioni simili