+ Rispondi alla Discussione
Risultati da 1 a 4 di 4

Slect da due tabelle

Ultimo Messaggio di html5today il:
  1. #1
    User Newbie
    Data Registrazione
    Feb 2014
    Località
    Italia
    Messaggi
    1

    Slect da due tabelle

    Ho questo scrypt che prende dati da due tabelle solo se il valore del campo 'amount è maggiore di zero. Mi permette di stampare a video in una tabella i valori con colori alternati per una maggiore visualizzazione dei contenuti. Il codice non mi da errori ma mi stampa solo un punto.

    Codice PHP:
    <?php  // includiamo il file di configurazione    @include "db_config_reload.php";    // seleziono i campi nelle varie tabelle$query = mysql_query("SELECT seller.id, seller.username, seller.change, seller.amount, seller.paymetod, users.nazionalita FROM users, seller WHERE users.username = seller.username AND seller.amount > 0") or die(mysql_error());  
    // assegno variabili per pulire codice$table = "<table border = \"1\">";  $username = $row['username'];$nazionalita = $row['nazionalita'];$change = $row['change'];$amount = $row['amount'];$paymetod = $row['paymetod'];// scorro con un array la query e quindi i vari campi delle varie tabellewhile($row = mysql_fetch_array($query)){    if(intval($row['id'])%2 == 0)    {        $color = "#DDDDDD";    }    else    {        $color = "#FFFFFF";    }    $table .= "<tr style=\"background-color: {$color};\">";    $table .= "<td> {$username} </td>";    $table .= "<td> {$nazionalita} </td>";    $table .= "<td> {$change} </td>";    $table .= "<td> {$amount} </td>";    $table .= "<td> {$paymetod} </td>";    $table .= "</tr>";}$table .= "</table>";   echo $table;  
    ?>

  2. #2
    User Newbie
    Data Registrazione
    Jun 2012
    Località
    trapani
    Messaggi
    5
    Citazione Originariamente Scritto da snakom23 Visualizza Messaggio
    Ho questo scrypt che prende dati da due tabelle solo se il valore del campo 'amount è maggiore di zero. Mi permette di stampare a video in una tabella i valori con colori alternati per una maggiore visualizzazione dei contenuti. Il codice non mi da errori ma mi stampa solo un punto.

    Codice PHP:
    <?php  // includiamo il file di configurazione    @include "db_config_reload.php";    // seleziono i campi nelle varie tabelle$query = mysql_query("SELECT seller.id, seller.username, seller.change, seller.amount, seller.paymetod, users.nazionalita FROM users, seller WHERE users.username = seller.username AND seller.amount > 0") or die(mysql_error());  
    // assegno variabili per pulire codice$table = "<table border = \"1\">";  $username = $row['username'];$nazionalita = $row['nazionalita'];$change = $row['change'];$amount = $row['amount'];$paymetod = $row['paymetod'];// scorro con un array la query e quindi i vari campi delle varie tabellewhile($row = mysql_fetch_array($query)){    if(intval($row['id'])%2 == 0)    {        $color = "#DDDDDD";    }    else    {        $color = "#FFFFFF";    }    $table .= "<tr style=\"background-color: {$color};\">";    $table .= "<td> {$username} </td>";    $table .= "<td> {$nazionalita} </td>";    $table .= "<td> {$change} </td>";    $table .= "<td> {$amount} </td>";    $table .= "<td> {$paymetod} </td>";    $table .= "</tr>";}$table .= "</table>";   echo $table;  
    ?>
    Ciao! Ci sono un po' di cose che vorrei chiederti:
    vedo che usi la variabile $row['id'] per verificare se la riga è pari o dispari, ma il metodo fetch usato é quello dell'array numerico (mysql_fetch_array), in questa maniera per poter prendere il valore del campo ID dovresti usare $row[numerodelcampo] ricordandoti di partire da 0 per determinare qual'è il numero del campo.
    es:
    in una tabella con i seguenti campi:
    ID, Nome, Cognome, Anni
    $row[0] sarà ID, $row[1] sarà Nome e via discorrendo.
    Non ti consiglio di usare cmq quella variabile per controllare se la riga è pari o dispari in quanto potrebbe accadere che un record venga cancellato e allora l'ID del record potrebbe non identificare più se la riga in esame nel loop è pari o dispari. Io valorizzerei una variabile prima dell'inizio del ciclo (prima del while) e poi alla fine del ciclo prima della chiusura lo incrementei di 1 (esempio $z=0; e alla fine del ciclo prima di } farei $z++; il check sul resto maggiore di zero lo farei quindi su $z) o al limite userei un ciclo for avendo avuto cura di ricavarmi il numero totale di record della query col metodo mysql_num_rows (for $i=0; $i<$numerorighe; $i++. E poi if $i%2 >0 ...). Sarebbe preferibile poi passare ad un approccio a oggetti per la connessione al db (usa mysqli o PDO e studiati le prepared statements per evitare problemi di mysql injections).
    Non conosco la notazione con le parentesi graffe per inserire le variabili all'interno della tabella (secondo me le puoi liberamente togliere).
    Spero di esserti stato utile e di averti dato i consigli giusti, se c'è qualche esperto che si è accorto di qualche mio consiglio errato che ben venga, non sono ancora un esperto di php.

  3. #3
    User Newbie
    Data Registrazione
    Jun 2012
    Località
    trapani
    Messaggi
    5
    Ciao per sicuezza mi sono andato a controllare mysql_fetch_array perché è da tanto che non lo uso ed effettivamente di default ritorna i valori numerici e associativi quindi va bene come l'hai valorizzata la variabile $row['ID'], quindi a meno che il risultato non ritorni davvero una riga non so aiutarti... Prova a eseguire la query su phpmyadmin e vedi quante righe ti ritorna...

  4. #4
    Utente Premium L'avatar di html5today
    Data Registrazione
    Dec 2010
    Località
    Roma
    Messaggi
    153
    Ho riscritto il tuo codice per renderlo più leggibile:
    Codice PHP:
    <?php
      
    // includiamo il file di configurazione
      
    @include "db_config_reload.php";
      
    // seleziono i campi nelle varie tabelle
      
    $query mysql_query("SELECT seller.id, seller.username, seller.change, seller.amount, seller.paymetod, users.nazionalita
          FROM users, seller
        WHERE users.username = seller.username
        AND seller.amount > 0"
    )
      or die(
    mysql_error());
      
    // assegno variabili per pulire codice
      
    $table "<table border = \"1\">";
      
    $username $row['username'];
      
    $nazionalita $row['nazionalita']; 
      
    $change =  $row['change'];
      
    $amount $row['amount'];    
      
    $paymetod $row['paymetod'];
      
    // scorro con un array la query e quindi i vari campi delle varie tabelle    
      
    while ($row mysql_fetch_array($query)) {        
        if (
    intval($row['id'])%== 0)    {
          
    $color "#DDDDDD";        
        }    else    {                    
          
    $color "#FFFFFF";            
        }            
        
    $table .= "<tr style=\"background-color: {$color};\">";            
        
    $table .= "<td> {$username} </td>";            
        
    $table .= "<td> {$nazionalita} </td>";            
        
    $table .= "<td> {$change} </td>";            
        
    $table .= "<td> {$amount} </td>";            
        
    $table .= "<td> {$paymetod} </td>";            
        
    $table .= "</tr>";    
      }    
      
    $table .= "</table>";   
      echo 
    $table;
    ?>
    La cosa che vedo al volo è che tu assegni i valori della $row, tipo:
    Codice PHP:
    $username $row['username']; 
    fuori (prima) del ciclo "while" dove fai il "fetch_array", quindi non verranno mai valorizzati.

    Hai poi provato a fare la query nel database (ad esempio da phpMyAdmin) per vedere se e quali valori ci sono?
    Ultima modifica di html5today; 20-02-14 alle 15:11

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.