Problema con mysqli_fetch_array()

Fabrizio Fiorita

Utente Attivo
Buonasera.
Nel mio database ho una tabella con 252 righe.
Per visualizzarle in una pagina php utilizzo un ciclo while con la funzione mysqli_fetch_array().
Vengono visualizzate soltanto le righe pari!

Ecco le istruzioni:
$query_str = "SELECT * FROM soci";
$result = mysqli_query($conn, $query_str) or die(mysql_error());
while($row_data = mysqli_fetch_array($result))
{ procedura di stampa riga }

Qualcuno sa dirmi che cosa succede e dove devo intervenire?
Grazie
Fabrizio
 

Fabrizio Fiorita

Utente Attivo
Riprendo per fare un'aggiunta:
se al posto di while uso do ... while vengono visualizzate solo le righe dispari!!!

$query_str = "SELECT * FROM soci";
$result = mysqli_query($conn, $query_str) or die(mysql_error());
do { procedura di stampa riga }
while($row_data = mysqli_fetch_array($result));
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
prova a dargli
PHP:
$row_data = mysqli_fetch_array($result, MYSQLI_NUM);// oppure MYSQLI_ASSOC
anche se il tutto mi sembra un po' strano.
 

Fabrizio Fiorita

Utente Attivo
ciao
prova a dargli
PHP:
$row_data = mysqli_fetch_array($result, MYSQLI_NUM);// oppure MYSQLI_ASSOC
Provati ambedue, non cambia niente. Se non metti niente è sottinteso MYSQLI_BOTH.
Ho anche provato a leggere il numero delle righe (restituito correttamente) e a fare una FOR al posto della WHILE, il risultato visualizza ancora solo le linee pari.
Il problema si presenta identico sia in remoto (server unix) sia in locale (server microsoft).
Escluso quindi che sia colpa dei cicli while/do while/for; escluso che sia colpa della visualizzazione (una volgarissima tabella); escluso che sia colpa delle funzioni PHP, avendo provato sia con mysqli_fetch_array sia con $result->fetch_array con identico risultato, non mi resta che trovare l'errore nella tabella del database.
Che tu sappia, ci sono dei valori o dei settaggi che, se immessi da qualche parte nel database, ne condizionano il rendering?
Aggiungo che, se vado a visualizzare un solo elemento mediante il suo numero progressivo, pari o dispari che sia, la visualizzazione è perfetta e completa.

anche se il tutto mi sembra un po' strano.
A chi lo dici!!! Comunque grazie.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
di preciso non so, prova a postare il dump della tabella.
comunque fai anche una prova, fai la select su il solo campo dell'id (metti come lo chiami tu)
PHP:
$query_str = "SELECT id FROM soci ORDER BY id";
e prova a vedere col while cosa ti da
 

Fabrizio Fiorita

Utente Attivo
Provato, mi stampa soltanti i numeri pari.
Ho fatto il dump dei dati scaricati dalla tabella, ci sono tutti, con tutti i campi: quindi l'inghippo lo fa quando, con la while o altro ricorsivo va a leggere il contenuto riga per riga per stamparlo.
Lo strano è che, facendo il DO ... WHILE mi stampa i dispari e facendo il WHILE mi stampa i pari...
 

Fabrizio Fiorita

Utente Attivo
Non ci credo!
Ho "raddoppiato" la riga <tr> della tabella html e adesso me li mette tutti in ordine.
Praticamente è come se fetch_array leggesse due righe per volta: ma il comportamento non è normale...
Per ora mi accontento, perché il risultato è quello desiderato, ma appena avrò un po' di tempo voglio andare a fondo, perché devo capire come funziona.
Grazie per i suggerimenti.
Fabrizio :quote:
 

Fabrizio Fiorita

Utente Attivo
Non ci credo!
Ho "raddoppiato" la riga <tr> della tabella html e adesso me li mette tutti in ordine.
Praticamente è come se fetch_array leggesse due righe per volta: ma il comportamento non è normale...
Per ora mi accontento, perché il risultato è quello desiderato, ma appena avrò un po' di tempo voglio andare a fondo, perché devo capire come funziona.
Grazie per i suggerimenti.
Fabrizio :quote:
Sono andato a fondo... proprio a fondo! :dipser:
mysqli_fetch_array() funziona benissimo, almeno finché non trova uno distratto come me.
D'altra parte il momento dello stupido capita a (quasi) tutti...
Il problema stava nella tabella di visualizzazione: c'era un <tr> di troppo, aperto, senza <td> e non chiuso, che si "mangiava" le righe...
Borgo italia, ti chiedo scusa per il tempo che ti ho fatto perdere.
Fabrizio