- Home
- Categorie
- Coding e Sistemistica
- PHP
- Dati prelevati dal database che si ripetono
-
Dati prelevati dal database che si ripetono
Salve a tutti,
ho un problema, ho creato un piccolo programma che gestisce le cimmissioni di utenti ecc. Tutto apposto se non che quando prelevo i dati dal database con php nella tabella compaiono alcuni campi ripetuti ed altri che non ci sono, cioè quando vedo le commissioni di un utente alcune commissioni sono ripetute e altri che ci dovrebbero essere non compaiono, non capisco dove sbaglio, mi potete aiutare, posto il codice:[php]
<?php
session_start();
include "util.php";
include "connetti.php";if($_SESSION['admin'] == true){
$gginiz=$_REQUEST['gginiz'];
$mminiz=$_REQUEST['mminiz'];
$aainiz=$_REQUEST['aainiz'];
$ggfine=$_REQUEST['ggfine'];
$mmfine=$_REQUEST['mmfine'];
$aafine=$_REQUEST['aafine'];$controllo="0000-00-00";
$datainizio=$aainiz."-".$mminiz."-".$gginiz;
$datafine=$aafine."-".$mmfine."-".$ggfine;if(htmlspecialchars($_REQUEST['username']) != null){
?>
<form action="visualizzacomm.php">
<input type="hidden" name="username" value="<?php echo htmlspecialchars($_REQUEST['username']); ?>"> data inizio(gg/mm/aaaa): <input type="textbox" name="gginiz" value="00" size="2"> / <input type="textbox" name="mminiz" value="00" size="2"> / <input type="textbox" name="aainiz" value="0000" size="4"><br> data fine(gg/mm/aaaa): <input type="textbox" name="ggfine" value="00" size="2"> / <input type="textbox" name="mmfine" value="00" size="2"> / <input type="textbox" name="aafine" value="0000" size="4"><br> <input type="submit" value="Ok"> </form>
<?php
if($datainizio != $controllo && $datafine != $controllo){ $query = "select * from impiegato, commessa, impiegato_has_commessa where (impiegato.username = '".htmlspecialchars($_REQUEST['username'])."') AND (impiegato.username = impiegato_has_commessa.impiegato_username) AND (impiegato_has_commessa.commessa_idcommessa = commessa.idcommessa) AND (DATEDIFF(commessa.data, DATE('".$datainizio."')) > 0) AND (DATEDIFF(commessa.data, DATE('".$datafine."')) < 0)"; /* $query = "select * from commessa where (commessa.username = '".htmlspecialchars($_REQUEST['username']) AND (DATEDIFF(commessa.data, DATE('".$datainizio."')) > 0) AND (DATEDIFF(commessa.data, DATE('".$datafine."')) < 0)"'; */ } else{ $query = "select * from impiegato, commessa, impiegato_has_commessa where (impiegato.username = '".htmlspecialchars($_REQUEST['username'])."') AND (impiegato.username = impiegato_has_commessa.impiegato_username) AND (impiegato_has_commessa.commessa_idcommessa = commessa.idcommessa)"; /* $query = "select * from commessa, impiegato_has_commessa where (commessa.username = '".htmlspecialchars($_REQUEST['username'])."') AND (commessa.username = impiegato_has_commessa.impiegato_username) AND (impiegato_has_commessa.commessa_idcommessa = commessa.idcommessa)"; */ /* $query = "select * from commessa where (commessa.username = '".htmlspecialchars($_REQUEST['username'])"'; */ }
$rows = mysql_query($query);
$count=0;
echo "username: ".htmlspecialchars($_REQUEST['username']);
echo "<center><table border=1><tr><td>Commessa</td><td>Data Commessa</td><td>Ore Commessa</td><td>Minuti</td></tr>";
while($count < mysql_num_rows($rows)){ $row = mysql_fetch_assoc($rows); echo "<tr><td>".$row['nomecommessa']; echo "</td>"; echo "<td> ".get_correct_date($row['data']); echo "</td>"; echo "<td>".$row['commessa1']; echo "</td>"; echo "<td>".$row['minuti']; echo "</td>"; echo "</tr>";
$count= $count + 1;
}
echo "</table></center>";
}
else{
$Data=$anno.'-'.$mese.'-'.$giorno;
$query = "select * from impiegato";
$rows = mysql_query($query);
if(mysql_num_rows($rows) == 0)
echo "la tabella è vuota";
else{
echo "<table>"; while($row = mysql_fetch_assoc($rows)){ echo "<tr>"; echo "<td>"; echo "<span class='username'><a href='visualizzacomm.php?username=".$row["username"]."'>".$row["username"]."</a></span>"; echo "</td>"; echo "<td>"; echo "<span class='nome'>".$row["nome"]."</span>"; echo "</td>"; echo "<td>"; echo "<span class='cognome'>".$row["cognome"]."</span>"; echo "</td>"; echo "</tr>"; } echo "</table>";
}
}
mysql_close($Connessione);
}
else {echo "non hai accesso alla pagina";
}
?>
[/php]
-
Da quanto ho potuto capire leggendo il tuo codice, l'errore sta nella esecuzione della query.
Ovviamente trovi campi ripetuti perchè tu gli chiedi di prelevare tutti i campi delle 3 tabelle rispettando l'AND logico con la condizione WHERE.
Quello che ti consiglio io e di fare una JOIN tra le tre tabelle, basandoti sui parametri da rispettare.
Mi spiego meglio con un esempio pratico.
Ho tre tabelle, allievi, corsi e comuni, e mi serve estrarre dei dati da queste tre tabelle in base a dei criteri. Questa è query che eseguo:SELECT allievi.id, allievi.nome AS Nome, allievi.cognome AS Cognome, date_format( allievi.datanascita, '%d/%m/%Y' ) AS DataNascita, allievi.codicefiscale AS CodiceFiscale, allievi.indirizzo AS Indirizzo, c_nascita.nome AS ComuneDiNascita, c_residenza.nome AS ComuneDiResidenza, corsi.nomecorso AS NomeCorso FROM allievi LEFT JOIN corsi ON allievi.idcorsi = corsi.id INNER JOIN comuni c_residenza ON allievi.idcomuneresidenza = c_residenza.id INNER JOIN comuni c_nascita ON allievi.idcomunenascita = c_nascita.id ORDER BY allievi.id ASC; ```In questo caso la query preleverà i dati dalle tabelle che rispettano i seguenti criteri: l'id della tabella corsi corrisponde con l'idcorsi della tabella allievi, l'id idcomuneresidenza della tabella allievi corrisponda con l'id c_residenza.id della tabella comuni, e l'id idcomunenascita della tabella allievi con l'id c_nascita.id della tabella comuni. In questo caso la query mi mostrerà tutti i dati richiesti, e non produrrà duplicati. Per maggiori informazioni sull'utilizzo delle JOIN puoi ceracre su google "table join"
-
Grazie per la risposta, ho già risolto.
L'errore stava proprio nelle query nel modo in cui interrogavo le tabelle.
I dati si trovavano tutti in una tabella quelli che mi interessavano ed io interrogavo tutti e tre le tabelle ecco perchè combinavo un casino
Grazie, ciao.