- Home
- Categorie
- Coding e Sistemistica
- PHP
- Slect da due tabelle
-
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.
[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; ?>[/PHP]
-
@snakom23 said:
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.
[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; ?>[/PHP]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.
-
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...
-
Ho riscritto il tuo codice per renderlo più leggibile:
[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'])%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;
?>[/PHP]
La cosa che vedo al volo è che tu assegni i valori della $row, tipo:
[PHP]$username = $row['username'];[/PHP]
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?