• User Newbie

    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]:gtsad:


  • User Newbie

    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"

  • User Newbie

    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.