Problema recupero Dati da MYSQL

Emix

Utente Attivo
15 Feb 2010
596
0
16
Buonasera a tutti,
ho un problema.. ho un Db contenente delle fatture. Devo ricreare la fattura(ho gia tutto). Ho solo un problema... La struttura del DB è fatta cosi :
Soliti campi delle fatture quindi: Cliente,numero fattura,listino,descrizione.
Fin qui tutto ok, recupero i dati e li leggo tranquillamente.
Il problema sorge quando la fattura ha piu linee di descrizione. A quel punto la linea nel db è completamente recplicata ad eccezzione del campo descrizione.

ES Cliente:io,Numerofattura:10,Listino:mio,Descrizione:prima riga;
Cliente:io,Numerofattura:10,Listino:mio,Descrizione:seconda riga;

Io devo far in modo che si legga una volta sola i campi standard, mentre le descrizioni vengano una sotto l'altra.
Come devo fare? Sto impazzendo...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, fai due query, la prima con i dati della fattura e con la seconda cicli le descrizioni.
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciao, fai due query, la prima con i dati della fattura e con la seconda cicli le descrizioni.

Ok, ora provo, secondo te è fattibile anche mettere dei campi nuovi prima di stamparla? Come potrei fare?
Grazie ancora

PS il codice per ciclare è questo? :

PHP:
$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>
';
}

è chiaramente un esempio, poi aggiusto le variabili
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
La table va fuori dal ciclo.
campi nuovi ?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
dipende da come le cerchi
la prima sarà
Codice:
SELECT * FROM fatture WHERE idFattura = 10 LIMIT 1
la seconda
Codice:
SELECT descrizione FROM fatture WHERE idFattura = 10
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Pensandoci potresti farlo anche con una sola query
ecco uno schema
PHP:
<?php
$sql = new mysqli("localhost", "root", "password", "database");

$query = "SELECT * FROM fatture WHERE id = 1";
$result = $sql->query($query);
if ($result) {
    $prodotti = array();
    while ($row = $result->fetch_assoc()) {
        $cliente = $row['cliente'];
        $prodotti[] = $row['desc'];
    }
}
?>
Cliente : <?php echo $cliente; ?>
<table>
    <thead>
        <tr>
            <th>Descrizione</th>
        </tr>
    </thead>
    <tbody>
        <?php
        foreach ($prodotti as $value) {
            echo "<tr>";
            echo "<td>$value</td>";
            echo "</tr>";
        }
        ?>
    </tbody>
</table>
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciao Ciric,
grazie per la risposta e l'esempio esaustivo...
Ora ho tre problemi da risolvere...
Problema 1:
Ad ogni linea di descrizione corrisponde un prezzo diverso.
Ho provato così:

PHP:
<?php
$sql = new mysqli("*******", "*****", "********", "fatture");

$query = "SELECT * FROM fatt WHERE  numfatt = 18318";
$result = $sql->query($query);
if ($result) {
    $prodotti = array();
	$totali = array();
    while ($row = $result->fetch_assoc()) {
        $cliente = $row['cliente'];
        $prodotti[] = $row['descfattdett'];
		$totali[] = $row['totale'];
    }
}
?>
Cliente : <?php echo $cliente; ?>
<table>
    <thead>
        <tr>
            <th>Descrizione</th>
        </tr>
    </thead>
    <tbody>
        <?php
		foreach ($totali as $totalii){}
        foreach ($prodotti as $value) {
            echo "<tr>";
            echo "<td>$value</td><td>$totalii</td>";
            echo "</tr>";
        }
		
        ?>
    </tbody>
</table>

Ma prende solo l'ultimo, se invece non metto le graffe raddoppia le linee, idem se metto il doppio ciclo...

Problema 2:

Prima di salvare la fattura, devo poter aggiungere delle linee sotto (sono al max 5 righe in piu) quelle di descrizione gia lette, ovviamente il resto rimane uguale, solo descrizione e totale riga.

Problema 3:

Una volta modificata la fattura, aggiunto e/o corretto quello che mi occorre devo poter fare l'update delle righe...

Grazie ancora per l'aiuto che mi stai fornendo...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
1) puoi creare un array bidimensionale
PHP:
<?php
$sql = new mysqli("localhost", "root", "password", "database");

$query = "SELECT * FROM fatt WHERE  numfatt = 18318";
$result = $sql->query($query);
if ($result) {
    $prodotti = array();
    $i = 0;
    while ($row = $result->fetch_assoc()) {
        $cliente = $row['cliente'];
        $prodotti[$i]['descfattdett'] = $row['descfattdett'];
        $prodotti[$i]['totale'] = $row['totale'];
        $i++;
    }
}
?>
Cliente : <?php echo $cliente; ?>
<table>
    <thead>
        <tr>
            <th>Descrizione</th>
            <th>Totale</th>
        </tr>
    </thead>
    <tbody>
        <?php
        foreach ($prodotti as $value) {
            echo "<tr>";
            echo "<td>" . $value['descfattdett'] . "</td>";
            echo "<td>" . $value['totale'] . "</td>";
            echo "</tr>";
        }
        ?>
    </tbody>
</table>
2) finito il foreach inserisci le tr che ti servono con i campi input
3) racchiudi tutto dentro un form e invii i dati ad una pagina che ti farà l'update
 
Ultima modifica:

Emix

Utente Attivo
15 Feb 2010
596
0
16
Grazie mille per l'aiuto... Ora trasformo tutti i campi in input così posso fare l'UPDATE... Tanto prima di questa pagina ci sara un campo di ricerca che passa in sessione l'id della fattura...
Faccio delle prove, se ho necessità ti scrivo di nuovo.
Grazie ancora!!
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciao Ciric,
Ho effettuato le modifiche come da tuo consiglio il risultato è questo :

PHP:
<?php
$sql = new mysqli("******", "******", "******", "fatture");

$query = "SELECT * FROM fatt WHERE  numfatt = 18318";
$result = $sql->query($query);
if ($result) {
    $prodotti = array();
	$i = 0;
    while ($row = $result->fetch_assoc()) {
        $numfatt = $row['numfatt'];
		$datafatt = $row['datafatt'];
		$numerora = $row['numerora'];
		$numcontratto = $row['numcontratto'];	
		$datainizionolo = $row['datainizionolo'];	
		$datafinenolo = $row['datafinenolo'];
		$cliente = $row['cliente'];
		$conducente= $row['conducente'];
		$stazioneout = $row['stazioneout'];
		$listino = $row['listino'];
		$gruppocons = $row['gruppocons'];
		$numgiorniadd = $row['numgiorniadd'];
		$utente = $row['utente'];
        $prodotti[$i]['descfattdett'] = $row['descfattdett'];
		$prodotti[$i]['totale'] = $row['totale'];
		$i ++;
    }
}
?>
<form action="recordfattura.php" method="post">
Numero Fattura :<b><input type="text" id="numfatt1" name="numfatt1" value="<?php echo $numfatt; ?>"  /></b><br />
Data Fattura :<b><input type="text" id="datafatt1" name="datafatt1" value="<?php echo $datafatt; ?>" /> </b><br />
Numero RA :<b><input type="text" id="numerora1" name="numerora1" value="<?php echo $numerora; ?>" /> </b><br />
Numero Contratto : <b><input type="text" id="numcontratto1" name="numcontratto1" value="<?php echo $numcontratto; ?>" /></b><br />
Data Inizio Nolo : <b><input type="text" id="datainizionolo1" name="datainizionolo1" value="<?php echo $datainizionolo; ?>" /></b><br />
Data Fine Nolo :<b><input type="text" id="datafinenolo1" name="datafinenolo1" value="<?php echo $datafinenolo; ?>" /> </b><br />
Cliente :<b><input type="text" id="cliente1" name="cliente1" value="<?php echo $cliente; ?>" size="60" /> </b><br />
Conducente :<b><input type="text" id="conducente1" name="conducente1" value=" <?php echo $conducente; ?>" size="60" /></b><br />
Stazione OUT : <b><input type="text" id="stazioneout1" name="stazioneout1" value="<?php echo $stazioneout; ?>" /></b><br />
Listino : <b><input type="text" id="listino1" name="listino1" value="<?php echo $listino; ?>" size="60" /></b><br />
Gruppo Consegnato : <b><input type="text" id="gruppocons1" name="gruppocons1" value="<?php echo $gruppocons; ?>" size="60" /></b><br />
Numero Giorni ADD :<b><input type="text" id="numgiorniadd1" name="numgiorniadd1" value="<?php echo $numgiorniadd; ?>" /> </b><br />
Utente :<b> <?php echo $utente; ?></b><br /><br />
<table>
    <thead>
        <tr>
            <th>Descrizione</th>
        </tr>
    </thead>
    <tbody>
        <?php
        foreach ($prodotti as $value) {
            echo "<tr>";
            echo '<td><input type="text" id="descfatt1[]" name="descfatt1[]" size="60" value= "'. $value['descfattdett'] . '" /></td>"';
            echo '<td><input type="text" id="totale1[]" name="totale1[]" size="60" value= "'. $value['totale'] . '" /></td>"';
            echo "</tr>";
        }
					echo "<tr>";
            echo '<td><input type="text" id="descfatt1[]" name="descfatt1[]" size="60" value= "" /></td>"';
            echo '<td><input type="text" id="totale1[]" name="totale1[]" size="60" value= "" /></td>"';
            echo "</tr>";
			echo "<tr>";
            echo '<td><input type="text" id="descfatt1[]" name="descfatt1[]" size="60" value= "" /></td>"';
            echo '<td><input type="text" id="totale1[]" name="totale1[]" size="60" value= "" /></td>"';
            echo "</tr>";
		
        ?>
    </tbody>
</table>
</form>
<input type="submit" value="INVIA I DATI" />


Ho due errori, uno è minimo, mi si mettono degli apici di troppo ("""") in visualizzazione, l'altro è che anche se clicco su invia i dati non funziona nulla...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Il submit va messo all'interno del form
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Il submit va messo all'interno del form

Madonna santa... Sarà la stanchezza.. grazie :)

Visto che ci sono una domanda... nella pagina di arrivo con i dati del post, per ciclare la descrizione con i relativi importi uso il metodo del count e poi recupero l'array?

Grazie ancora
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciric ho un altro quesito ora... Ho un Database con le transazioni delle fatture... ovviamente potrei avere piu righe con la stesso numero di fattura.. Mi spiego meglio:

io ho dei campi cosi :

NUMFATT --------- DESCFATT ---------- TOTALE

1 ARTICOLO 10
1 ARTICOLO2 2
2 ARTICOLO3 5
2 ARTICOLO4 10


Devo fare in modo che ciclando tutto il DB siano raggruppati per num fattura totale e descrizione.. Come faccio ?
Perche questo che avevamo fatto noi aveva come clausola il num di fattura da cercare nella query, qui invece ho un range di date oppure tutta una tabella...
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciric ho un altro quesito ora... Ho un Database con le transazioni delle fatture... ovviamente potrei avere piu righe con la stesso numero di fattura.. Mi spiego meglio:

io ho dei campi cosi :

NUMFATT --------- DESCFATT ---------- TOTALE

1 ARTICOLO 10
1 ARTICOLO2 2
2 ARTICOLO3 5
2 ARTICOLO4 10


Devo fare in modo che ciclando tutto il DB siano raggruppati per num fattura totale e descrizione.. Come faccio ?
Perche questo che avevamo fatto noi aveva come clausola il num di fattura da cercare nella query, qui invece ho un range di date oppure tutta una tabella...

Riesci ad aiutarmi? ;(
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao Emix, non ho ricevuto la notifica, ti converrebbe aprire una nuova discussione la prossima volta.
Devi usare GROUP BY nella query
Codice:
SELECT * FROM fatture GROUP BY idFattura, descrizione
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Uhm ho provato come dici te ma non ho ottenuto il risultato che speravo... ti incollo il codice:
PHP:
<?php
$sql = new mysqli("SERVER", "USER", "PASSWORD", "export");

$query = "SELECT * FROM fatture GROUP BY NUMFATT LIMIT 10";
$result = $sql->query($query);
if ($result) {
    $prodotti = array();
    $i = 0;
    while ($row = $result->fetch_assoc()) {
        $prodotti[$i]['NUMFATT']=$row['NUMFATT'];
        $prodotti[$i]['DESCFATT'] = $row['DESCFATT'];
        $prodotti[$i]['TOTALE'] = $row['TOTALE'];
        $i++;
    }
}
?>
<table>
    <thead>
        <tr>
            <th>Numero Fattura</th>
            <th>Descrizione</th>
            <th>Totale</th>
        </tr>
    </thead>
    <tbody>
        <?php
        foreach ($prodotti as $value) {
            echo "<tr>";
			echo "<td>" . $value['NUMFATT'] . "</td>";
            echo "<td>" . $value['DESCFATT'] . "</td>";
            echo "<td>" . $value['TOTALE'] . "</td>";
            echo "</tr>";
        }
        ?>
    </tbody>
</table>

Quello che visualizzo è un numero fattura (giusto) ma solo una riga di descrizione e importo.. non tutte le righe di quella fattura. Ti incollo risultato:

Codice:
Numero Fattura	Descrizione	Totale
12317	SCP SUPER COVER PROTECTION 	40
12318	SCP SUPER COVER PROTECTION 	20
12319	SCP SUPER COVER PROTECTION 	330
12320	GIORNI TARIFFA	68.85
12321	SCP SUPER COVER PROTECTION 50
12322	GIORNI TARIFFA	97.84
12323	SCP SUPER COVER PROTECTION 	50
12324	SCP SUPER COVER PROTECTION 	40
12325	GIORNI TARIFFA	79.92
12326	SCP SUPER COVER PROTECTION 	50
In realtà, per esempio la numero 12317 è composta da :
SCP SUPER COVER PROTECTION 40
SPESE AMMINISTRATIVE 3

Come devo fare? o cosa sbaglio....
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Devi raggruppare per entrambi i campi senza LIMIT. Li separi con una virgola come ti ho postato
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
ho provato anche cosi ma il risultato e il medesimo... probabilmente sbaglio sotto.. Mi sai fare un esempio per favore?
 
Discussioni simili
Autore Titolo Forum Risposte Data
S problema con recupero dati tabella mysql PHP 2
L Problema con recupero dati in PHP cURL e JAVA con server PHP 1
T Problema con form e recupero dati da mysql PHP 17
T Problema recupero dati da file [era: help script php] PHP 9
W Problema recupero dati database Javascript 2
A Problema recupero valori da select con chiamata ajax Ajax 1
O problema recupero valore con getElementById Ajax 0
Z Problema con il mio tp-l i nk Reti LAN e Wireless 0
I PROBLEMA: Sostituzione sito XAMPP E-Commerce 0
T problema data 30/11/-1 PHP 0
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Y Problema incolonnamento tabella PHP 7
S problema salvataggio immagini Photoshop 0
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
D problema php mysql PHP 1
D problema php mysql PHP 1
M Problema Wi-Fi Linux Linux e Software 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
Daniele_Carrara Problema Aperture Mailup Email Marketing 4
F PROBLEMA ACCESSO INSTAGRAM Discussioni Varie 2
R Problema connessione db PHP 7
M problema if PHP 2
G Problema con Get page PHP 4
N Problema passaggio variabili tra pagine PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 0
H problema carrello woocommerce PHP 2
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
M Problema su query JOIN in tre tabelle PHP 0
S Problema esportazione tabelle Mysql in Excel PHP 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
M Problema su update di 3 tabelle PHP 1
T problema con select dinamica con jquery Javascript 0
A Problema checkout carrello php PHP 2
R Problema al server Domini 0
A Problema nel passare la variabile PHP 0
G Problema update di un database PHP 0
S Problema con spazi bianchi HTML e CSS 4
E Problema motore di ricerca FULL_TEXT PHP 0
Tommy03 Problema durata cookie PHP 5
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0
I PROBLEMA CODICE INSERTION SORT C C/C++ 2
I PROBLEMA CODICE C - INSERTION SORT Presentati al Forum 1

Discussioni simili