phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

Problema con indici array da Select

Area di discussione relativa al linguaggio di programmazione web più conosciuto. Il forum è dedicato anche a MySQL, la piattaforma di database più utilizzata con il PHP.
Rispondi
maxgi
Utente
Utente
Messaggi: 6
Iscritto il: 23/03/2010, 19:18
Versione: 3.0.4
Server: UNIX/Linux

Problema con indici array da Select

Messaggio da maxgi » 22/03/2011, 8:34

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

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Problema con indici array da Select

Messaggio da Micogian » 22/03/2011, 9:44

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.

Avatar utente
Carlo
Amministratore
Amministratore
Messaggi: 9957
Iscritto il: 19/04/2009, 10:24
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 7.1.0
Database: MySQL(i) 10.0.27-MariaDB-cll-lve
Località: Puglia
Contatta:

Re: Problema con indici array da Select

Messaggio da Carlo » 22/03/2011, 14:59

@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']?
MODs | Stili | Traduzioni MOD
Ogni MP contenente una richiesta di supporto verrà ignorato.

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Problema con indici array da Select

Messaggio da Micogian » 22/03/2011, 16:25

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.

Avatar utente
Carlo
Amministratore
Amministratore
Messaggi: 9957
Iscritto il: 19/04/2009, 10:24
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 7.1.0
Database: MySQL(i) 10.0.27-MariaDB-cll-lve
Località: Puglia
Contatta:

Re: Problema con indici array da Select

Messaggio da Carlo » 22/03/2011, 16:30

Esatto, bastava utilizzare mysql_fetch_assoc, senza l'utilizzo di quel ciclo while e for.
MODs | Stili | Traduzioni MOD
Ogni MP contenente una richiesta di supporto verrà ignorato.

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Nessuno e 37 ospiti