Visualizzazione dei risultati da 1 a 10 su 10

Discussione: PHP e MYSQL

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    17

    PHP e MYSQL

    Salve a tutti,
    sto realizzando un sito per la gestione del fantacalcio con gli amici.
    Ho realizzato la pagina per vedere le rose di ogni squadra ma quando vado a realizzare la tabella per la visualizzazione dei risultati, mi mosta solo 24 dei 25 records trovati (non mi mostra mai il primo risultato).
    Mi potete aiutare??? grazie.....

    Davide

    ...DI SEGUITO IL CODICE...

    <?php
    include 'db.inc.php';

    $db = mysql_connect (MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or
    die ('Unable to connect. Check your connection parameters.');
    mysql_select_db (MYSQL_DB, $db) or die (mysql_error ($db));

    $query = 'SELECT giocatori.name, giocatori.club, giocatori.ruolo, squadre.nome FROM giocatori, rose, squadre
    WHERE giocatori.gioc_id = rose.gioc_id
    AND rose.squadra_id = squadre.squadra_id
    AND squadre.squadra_id = 1
    ORDER BY giocatori.ruolo DESC';
    $result = mysql_query($query, $db) or die(mysql_error($db));
    $num = mysql_num_rows($result);
    $r= mysql_fetch_array($result);
    ?>
    <div style="text-align: center;">
    <h2><?php echo $r['nome']; echo ' - '; echo $num;?></h2>
    <table border="1" cellpadding="2" cellspacing="2"
    style="width: 70%; margin-left: auto; margin-right: auto; text-align: center;">
    <tr>
    <th>N.</th>
    <th>Nome</th>
    <th>Club</th>
    <th>Ruolo</th>
    </tr>
    <?php
    $n = 1;
    while ($row = mysql_fetch_assoc($result)) {
    extract($row);
    echo '<tr>';
    echo '<td>' . $n . '</td>';
    echo '<td>' . $name . '</td>';
    echo '<td>' . $club . '</td>';
    echo '<td>' . $ruolo . '</td>';
    echo '</tr>';
    $n = $n + 1;
    }
    ?>

    </table>
    </div>

  2. #2
    metti $n=0;
    poi nella tabella
    echo '<td>' . $n+1 . '</td>';

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    157
    sembra uguale ma non lo è: provalo.
    <?php
    include 'db.inc.php';

    $db = mysql_connect (MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or
    die ('Unable to connect. Check your connection parameters.');
    mysql_select_db (MYSQL_DB, $db) or die (mysql_error ($db));

    $query = 'SELECT giocatori.name, giocatori.club, giocatori.ruolo, squadre.nome FROM giocatori, rose, squadre
    WHERE giocatori.gioc_id = rose.gioc_id
    AND rose.squadra_id = squadre.squadra_id
    AND squadre.squadra_id = 1
    ORDER BY giocatori.ruolo DESC';
    $result = mysql_query($query, $db) or die(mysql_error($db));
    $num = mysql_num_rows($result);
    $r= mysql_fetch_array($result);
    ?>
    <div style="text-align: center;">
    <h2><?php echo $r['nome']; echo ' - '; echo $num;?></h2>
    <table border="1" cellpadding="2" cellspacing="2"
    style="width: 70%; margin-left: auto; margin-right: auto; text-align: center;">
    <tr>
    <th>N.</th>
    <th>Nome</th>
    <th>Club</th>
    <th>Ruolo</th>
    </tr>
    <?php
    $n = 1;
    $result = mysql_query($query, $db) or die(mysql_error($db));
    while ($row = mysql_fetch_assoc($result)) {
    extract($row);
    echo '<tr>';
    echo '<td>' . $n . '</td>';
    echo '<td>' . $name . '</td>';
    echo '<td>' . $club . '</td>';
    echo '<td>' . $ruolo . '</td>';
    echo '</tr>';
    $n = $n + 1;
    }
    ?>

    </table>
    </div>
    viva il web.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    17
    Grazie...ora va ma non ho capito come hai fatto...

    Ho visto che hai inserito il comando

    $result = mysql_query($query, $db) or die(mysql_error($db));

    subito prima del ciclo while ma non ho capiro perchè ora funziona.

    Io quel comando lo avevo messo qualche riga più su....questo dici che fa la differenza???


    Davide...


    P.S.: resto sorpreso della velocità nelle risposte....grazie mille....

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Il tuo codice iniziale si mangiava il primo record perché tu lo leggevi all'inizio per pubblicare l'intestazione in <h2>, dopodiché tornavi a leggerlo nel ciclo, ma a quel punto partivi dal secondo.

    Il codice che ti è stato suggerito risolve il problema nel modo più orribile possibile: ti fa eseguire la query due volte, uno spreco colossale.
    In realtà bastava prendere il tuo codice iniziale e sostituire il while finale
    Codice PHP:
    while ($row mysql_fetch_assoc($result)) {..... } 
    con questo
    Codice PHP:
    do  {..... }while ($row mysql_fetch_assoc($result)) 

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    17
    Ringrazio ancora per le risposte...

    Luca200 ho provato ad eliminare l'intestazione <h2> in modo da non toccare il primo record e risolvere così il problema ma niente....in questo modo continuo a non avere il primo risultato.

    Volendo usare il tuo consiglio mi puoi indirare per piacere dove mettere il comando extract($row)???

    Davide

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    157
    luca ha ragione, è una soluzione più nobile questa rispetto alla mia:
    <?php
    include 'db.inc.php';

    $db = mysql_connect (MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or
    die ('Unable to connect. Check your connection parameters.');
    mysql_select_db (MYSQL_DB, $db) or die (mysql_error ($db));

    $query = 'SELECT giocatori.name, giocatori.club, giocatori.ruolo, squadre.nome FROM giocatori, rose, squadre
    WHERE giocatori.gioc_id = rose.gioc_id
    AND rose.squadra_id = squadre.squadra_id
    AND squadre.squadra_id = 1
    ORDER BY giocatori.ruolo DESC';
    $result = mysql_query($query, $db) or die(mysql_error($db));
    $num = mysql_num_rows($result);
    $row= mysql_fetch_array($result);
    ?>
    <div style="text-align: center;">
    <h2><?php echo $row['nome']; echo ' - '; echo $num;?></h2>
    <table border="1" cellpadding="2" cellspacing="2"
    style="width: 70%; margin-left: auto; margin-right: auto; text-align: center;">
    <tr>
    <th>N.</th>
    <th>Nome</th>
    <th>Club</th>
    <th>Ruolo</th>
    </tr>
    <?php
    $n = 1;
    do {
    extract($row);
    echo '<tr>';
    echo '<td>' . $n . '</td>';
    echo '<td>' . $name . '</td>';
    echo '<td>' . $club . '</td>';
    echo '<td>' . $ruolo . '</td>';
    echo '</tr>';
    $n = $n + 1;
    }while($row = mysql_fetch_assoc($result));
    ?>

    </table>
    </div>
    viva il web.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    17
    scusate per le tante domande non vorrei diventare fastidioso....ora ho un record in più vuoti nella tabella...i giocatori ci sono tutti e 25 ma la riga numero 1 della tabella è vuota....
    Inizio a sclerare....

    ..............UPDATE...............

    ho risolto il problema tornando al codice inviato all'inizio ma eliminando questa riga:

    $r= mysql_fetch_array($result);

    Non so perchè ma eliminando questa ottengo la tabella con tutti i giocatori...

    Grazie per i vostri consigli, sono stati molto prezioni e rapidi.

    Alle prossime domande...

    Davide

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    157
    semplicemente perchè inizi a scorrere il recordset, e ogni qualvolta fai un mysql_fetch_array($result);
    scorri progressivamente il recordset.

    i metodi quindi sono 3:
    1)fai una nuova query e crei un nuovo recordset "vergine" (quello che ho fatto io nel primo post)

    2)se hai bisogno di visualizzare solo il primo record precedentemente al ciclo while, utilizzi il do while che come primo record utilizza il recordset precedentemente estratto fuori dal ciclo.

    3) il terzo è un metodo ancora più fine.. utilizzi una funzione specifica che è: mysql_data_seek();
    che ti permette di riposizionare il "cursore" sul recordet nel punto in cui vuoi te, nel tuo caso lo zero.
    viva il web.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    17
    Grazie ancora per il prezioso aiuto e cortesia....

    Davide

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.