Pagina 1 di 1

Problema con indici array da Select

Inviato: 22/03/2011, 8:34
da maxgi
Buongiorno a tutti.
Ho un forum pubblicato su Altervista. In una pagina del mio sito, dopo aver autenticanto l'utente, faccio scrivere alcuni dati dello stesso (il nome e l'ora in cui si è collegato). Per fare ciò utilizzo il codice(tipo) che riporto:
$newview='SELECT DISTINCT USR.username, SSS.session_start, SSS.session_user_id, SSS.session_id, USR.user_id
FROM avphpbb_sessions AS SSS, avphpbb_users AS USR WHERE USR.user_id=SSS.session_user_id
ORDER BY SSS.session_start DESC LIMIT 0, 1';
$risultato = mysql_query($newview) or die("Query fallita");
/* Stampa dei risultati in HTML */
while ($linea = mysql_fetch_array($risultato, MYSQL_NUM)) {
foreach ($linea as $valore_colonna) {
$element = each($linea);
//Condizione sulla chiave specifica
if ($element['key'] == 0){
-----------------------------------------
}
if ($element['key'] == 1){
-----------------------------------------
}
if ($element['key'] == 2){
------------------------------------------
}
if ($element['key'] == 3){
-----------------------------------------------
}
if ($element['key'] > 5){
continue ;
}
// fine condizione
print "$valore_colonna \n";
Il codice, provato in locale, funzionava perfettamente. Quando ho trasferito il tutto nello spazio Altavista, è accaduta una cosa strana: tutti gli indici($element['key']) sono traslati, per cui 0->1, 1->2 e cosi via e l'ultimo valore dell'array mi risulta avere invece che indice 4(o 5) indice=0.
Lo stesso tipo di codice l'ho utilizzato in un altra pagina php per estrarre gli ultimi interventi presenti sul forum, da pubblicare sull'home page del sito, e funziona perfettamente, mantenendo sia in locale che in remoto gli stessi indici.
Spero di essere stato abbastanza chiaro e chiedo se qualcuno mi sa dare una possibile spiegazione del fatto.

Massimo

Re: Problema con indici array da Select

Inviato: 22/03/2011, 9:44
da Micogian
Dal momento che tu inserisci nella query il valore DESC LIMIT 0, 1 vengono estratti gli ultimi due records (0 e 1) in senso decrescente (DESC).
Se vuoi un unico risultato devi mettere LIMIT 1 che estrae un solo record e a questo punto il ciclo while è inutile se hai un risultato solo.
In locale probabilmente la variabile Session è diversa.

Re: Problema con indici array da Select

Inviato: 22/03/2011, 14:59
da Carlo
@bingo: LIMIT 0,1 non vuol dire che estra 2 records, ma bensì che estrae 1 record a partire dall'inzio.
In caso fosse scritto LIMIT 2,1 restituirebbe 1 record a partire dal secondo.

@maxgi: Cosa contiene $element['key']?

Re: Problema con indici array da Select

Inviato: 22/03/2011, 16:25
da Micogian
Carlo ha scritto:@bingo: LIMIT 0,1 non vuol dire che estra 2 records, ma bensì che estrae 1 record a partire dall'inzio.
Si, è vero, estrae 1 record a partire da 0.
Resta il fatto che il ciclo while non serve per un record.

Re: Problema con indici array da Select

Inviato: 22/03/2011, 16:30
da Carlo
Esatto, bastava utilizzare mysql_fetch_assoc, senza l'utilizzo di quel ciclo while e for.