Problema recupero Dati da MYSQL

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

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...
 
Ciao, fai due query, la prima con i dati della fattura e con la seconda cicli le descrizioni.
 
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
 
La table va fuori dal ciclo.
campi nuovi ?
 
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
 
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>
 
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...
 
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:
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!!
 
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...
 
Il submit va messo all'interno del form
 
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
 
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...
 
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? ;(
 
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
 
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:
Devi raggruppare per entrambi i campi senza LIMIT. Li separi con una virgola come ti ho postato
 
ho provato anche cosi ma il risultato e il medesimo... probabilmente sbaglio sotto.. Mi sai fare un esempio per favore?
 

Discussioni simili