Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    6

    Come selezionare una tabella generica da un database

    Salve, vi chiedo umilmente aiuto per questo problema che sto riscontrando... E' da poco che uso il php e non capisco se sto sbagliando qualcosa o no... Ho cercato su internet ma non riesco a trovare quello che mi serve. Il problema è il seguente:
    Vorrei creare una pagina PHP nella quale viene visualizzata una tabella del mio database, inserendo il nome in un form nella pagina precedente a questa; fino a qui tutto bene, ma quando provo a stampare il contenuto della tabella, ricevo come risultato solo alcuni valori... Per la precisione il primo valore della prima colonna e il secondo valore della seconda (la tabella è composta da tre colonne: "ID, DESCRIZIONE E CERTIFICAZIONE" e ognuna ha 2 record). Sono abbastanza sicuro che il problema sia nel ciclo, qualcuno sa aiutarmi?
    codice:
    <?phpinclude('connection_db.php');
    $table = $_POST['table'];
    
    
    $query = "SELECT * FROM $table"; //You don't need a ; like you do in SQL
    $result = mysql_query($query);
    echo "<table>";
    $i=0;
    echo "<tr>";
    while($row = mysql_fetch_array($result)) {
    echo $i;
    echo "<td>" . $row[$i] . "</td>";
    $i= $i+1;
    
    
    }
    echo "</tr>";
    echo "</table>";
    mysql_close();
    
    ?>

    Scusate credo di aver sbagliato sezione
    Ultima modifica di Farnuca; 09-04-2019 a 20:50

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,631
    Ciao, sì, il problema è nel ciclo, ma prima di tutto voglio darti un consiglio.
    Chiaramente sei all'inizio con PHP e di conseguenza con l'interfacciamento ad un database, il consiglio è: NON usare le funzioni mysql_ sono state tempo fa abbandonate e più recentemente rimosse, se ti funzionano vuol dire che stai usando una versione di PHP vecchia, così come vecchi sono gli esempi a cui ti sei ispirato per creare quello script.
    Impara da subito ad usare PDO per dialogare col database, in questo modo dovrai imparare una cosa invece che 2 perché appena i tuoi script si troveranno a girare su una versione nuova di PHP non funzioneranno più e dovrai correre a modificare il codice.

    Veniamo al tuo problema.
    la variabile contatore $i è usata male.
    Ad ogni ciclo vale una unità in più, ma ad ogni ciclo cambi anche riga di risultato per via del fetch nel while, quindi è giusto ciò che ottieni ovvero primo ciclo prendi la colonna 0 della prima riga, poi $i+1 e nuova riga, quindi colonna 1 della seconda riga...

    D'altro canto la variabile $i neanche serve, il numero di colonne della tabella non è variabile, lo sai quante sono e sai anche come si chiamano, quindi quel ciclo lo farei così (mantengo le mysql_ per usare qualcosa a te familiare, ma resta il consiglio di passare a PDO)

    Codice PHP:
    // se vuoi usare gli indici delle colonne
    while ( $row mysql_fetch_array($result) )
    {
        echo 
    '<td>' $row[0] . '</td><td>' $row[1] . '</td><td>' $row[2] . '</td>';
    }

    // visto che sai i nomi delle colonne, così il codice è più leggibile, 
    // sai subito che colonna stai visualizzando, senza doverti ricordare le posizioni
    // i nomi sono case sensitive, quindi devi rispettare maiuscole e minuscole, 
    // io li ho scritti così come lì hai proposti tu
    while ( $row mysql_fetch_assoc($result) )
    {
        echo 
    '<td>' $row['ID'] . '</td><td>' $row['DESCRIZIONE'] .  '</td><td>' $row['CERTIFICAZIONE'] . '</td>';



    EDIT: ho erroneamente tralasciato il fatto della selezione della tabella, quindi non sai effettivamente numero di colonne e nomi. Il discorso PDO resta valido, così come l'uso errato di $i, appena ho un attimo correggo la risposta riguardante il resto.
    Ultima modifica di Alhazred; 10-04-2019 a 09:05

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,631
    Dunque, la cosa nel tuo caso è leggermente più elaborata, dovrai prima eseguire una query per sapere il numero di colonne presenti nella tabella richiesta e lo si fa con questa query
    codice:
    SELECT count(*) AS colonne FROM information_schema.columns WHERE table_name = 'nome_tabella';
    "AS colonne" è opzionale se vuoi che il risultato sia prelevabile usando un nome, altrimenti hai direttamente il numero come risultato

    A questo punto una variabile contatore ti serve, ma va usata in modo corretto.
    Il numero recuperato prima sarà il limite da usare per la variabile contatore, più o meno in questo modo

    Codice PHP:
    include('connection_db.php');
    $table $_POST['table'];

    // qui usi la query proposta prima per calcolare il numero di colonne

    $query "SELECT * FROM $table";
    $result mysql_query($query);

    echo 
    "<table>";

    while ( 
    $row mysql_fetch_array($result) )
    {
        echo 
    '<tr><td>';

        for( 
    $i 0$i numero_colonne_calcolato_prima$i++)
        {
            echo 
    $row[$i] . '</td><td>';
        }

        echo  
    '</td></tr>';
    }

    echo 
    "</table>"

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    6
    Grazie mille per il tuo tempo innanzitutto... Avevo già provato questo metodo e in effetti sembrava funzionare... Ma ora si presenta lo stesso problema per cui avevo provato a cambiare: la tabella è visualizzata, ma ci sono molte colonne vuote e credo che sia un problema di posizionamento dei vari td e tr ma non so come metterli... Sto impazzendo ahahaha
    Ultima modifica di Farnuca; 10-04-2019 a 12:28

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    6
    Ecco qui l'immagine della tabella... Un altro problema è che non viene visualizzato il nome delle colonne, ma credo basti aggiungere prima del ciclo dei <th>Titolo colonna</th>, solo che non so che codice usare per visualizzare il nome dato che deve essere generico per qualsiasi tabella.
    Allegato 29779

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,631
    Quote Originariamente inviata da Farnuca Visualizza il messaggio
    Grazie mille per il tuo tempo innanzitutto... Avevo già provato questo metodo e in effetti sembrava funzionare... Ma ora si presenta lo stesso problema per cui avevo provato a cambiare: la tabella è visualizzata, ma ci sono molte colonne vuote e credo che sia un problema di posizionamento dei vari td e tr ma non so come metterli... Sto impazzendo ahahaha
    Sì, ho scritto il codice un po' al volo e non sono stato a pensare ai td e tr, sono quelli che vanno sistemati, nello specifico, invece di fare direttamente gli echo si dovrebbe mettere tutto come stringa in una variabile, poi prima di aggiungere il </td></tr> finale si dovrebbe fare un substr() in modo da eliminare gli ultimi 4 caratteri, che corrispondono in pratica il tag <td> che apre una cella inutile all'ultimo ciclo.
    Quindi vanno aggiunti i tag di chiusura e poi fatto l'echo di tutto.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    6
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Sì, ho scritto il codice un po' al volo e non sono stato a pensare ai td e tr, sono quelli che vanno sistemati, nello specifico, invece di fare direttamente gli echo si dovrebbe mettere tutto come stringa in una variabile, poi prima di aggiungere il </td></tr> finale si dovrebbe fare un substr() in modo da eliminare gli ultimi 4 caratteri, che corrispondono in pratica il tag <td> che apre una cella inutile all'ultimo ciclo.
    Quindi vanno aggiunti i tag di chiusura e poi fatto l'echo di tutto.
    Sono andato un po' avanti e ho cercato anche di risolvere il problema dei nomi delle colonne e questo è quello che ho fatto:
    codice:
     <?phpinclude('connection_db.php');
    $table = $_POST['table'];
    
    
    //Query per il nome delle colonne
    
    
    $query2 = "SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = N'$table'";
    $nomecolonne = mysql_query($query2);
    
    
    //Query per calcolare il numero di colonne
    
    
    $query1 = "SELECT count(*) AS colonne FROM information_schema.columns WHERE table_name = '$table'";
    $numerocolonne = mysql_query($query1);
    
    
    
    
    //Query per selezionare l'intero contenuto della tabella
    
    
    $query = "SELECT * FROM $table";
    $result = mysql_query($query);
    
    
    
    
    echo '<table>';
    
    
    while ($nomecol = mysql_fetch_array($nomecolonne)) {
        for( $j = 0; $j < $numerocolonne; $j++)
        {
            echo '<th colspan="1">' . $nomecol[$j] . '</th>';
        }
    }
    
    
    
    
    while ($row = mysql_fetch_array($result))
    {
        echo '<tr>';
    
    
        for( $i = 0; $i < $numerocolonne; $i++)
        {
            echo '<td>' . $row[$i] . '</td>';
        }
        
        echo  '</tr>';
    
    
    }
    
    
    echo "</table>";  
    ?>
    Quello che vedo adesso è questo... tabella.png

    Non ho ben capito cosa devo fare con i <td> e <tr> ...

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,631
    Perché qui
    echo '<th colspan="1">' . $nomecol[$j] . '</th>';

    metti il colspan?

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    6
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Perché qui
    echo '<th colspan="1">' . $nomecol[$j] . '</th>';

    metti il colspan?
    Avevo provato magari serviva per fargli prendere solo una colonna ma è inutile ahahah

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 © 2019 vBulletin Solutions, Inc. All rights reserved.