Visualizzazione risultati 1 fino 6 di 6

Discussione: Problema con uno script in php per generare la lista utenti (era: Lista utenti)

  1. #1
    Guest

    Predefinito Problema con uno script in php per generare la lista utenti (era: Lista utenti)

    Salve ragazzi. Ho un problema con un codice.

    Avviso che è da una settimana che sto imparando a programmare. Sto capendo tante cose ed ho iniziato uno script per gestire un sito.

    Ho fatto login, registrazione e alcuni piccoli dettagli divertenti (numero utenti registrati, ultimo utente registrato ecc..). Ora sto cercando di fare la lista degli utenti registrati ma non ci riesco.

    Il codice è questo

    Codice PHP:
    <?php
    //Dati del mio database
    $nomehost = "***";
    $nomeuser = "***";
    $password = "***";
    $dbname = "***";

    //Connessione al database
    $connessione = mysql_connect($nomehost,$nomeuser,$password);

    //Controllo Connessione
    if($connessione == 0){echo "Connessione al database fallita";}

    //selezione database login
    $database_select = mysql_select_db($dbname, $connessione);

    //Controllo selezione del database
    if($database_select == 0) {echo "Selezione non riuscita";}

    //Estrazione utenti
    $lista_utenti = mysql_query("SELECT username as utente FROM login ORDER BY username");
    $array_utenti = mysql_fetch_array($lista_utenti);
    foreach(
    $array_utenti as $valore) {
    echo
    $valore['utente'];
    }
    ?>
    Il tutto "funziona" ma mi estrae solo 1 username scritto a metà diciamo .-.

    Quale può essere il problema? Grazie per l'aiuto!!

    -
    Scusate ragazzi ho dimenticato di dire una cosa.

    Non riesco nemmeno a registrare la data nel db settando un campo TIMESTAMP...Qualche anima buona può spiegarmi come si fa? Mi serve solo sapere come si inserisce nel db...Non mi interessa estrarla...

    Grazie ancora
    Ultima modifica di darkwolf : 13-08-2010 alle ore 20.51.06

  2. #2
    Guest

    Predefinito

    prova a sostituire quei *** nella variablie $password con la password reale. Forse ti riesco ad aiutare meglio.

    Ecco i miei consigli:
    1) Sostituisci quel:

    Codice PHP:
    //Connessione al database
    $connessione = mysql_connect($nomehost,$nomeuser,$password);

    //Controllo Connessione
    if($connessione == 0){echo "Connessione al database fallita";}
    con

    Codice PHP:
    $connessione = mysql_connect($nomehost,$nomeuser,$password) or die();
    //se preferisci mostrare gli errori che avvengono allora usa:
    //$connessione = mysql_connect($nomehost,$nomeuser,$password) or die(mysql_error());
    //io userei la forma che mostra l'errore ma non appena hai finito lo sviluppo toglierei
    //mysql_error dappertutto. Se conti di fare modifiche in futuro lascialo.
    Il motivo per cui non farei quello che hai fatto tu è molto semplice: se avvengono errori nella connect questi non vengono fermati e si ripercuotono dappertutto. Di solito non fanno danni ma l'esperienza mi insegna di provvedere prima che succeda qualcosa =).
    Ecco come funziona: se mysql_connect va a buon fine allora prosegue, se fallisce esegue quello che sta dopo l'or e quindi esegue die. Die termina lo script. Tutto quello che c'è dopo non verrà eseguito. Quello che c'era prima del die viene eseguito e il risultato viene mostrato.

    1 bis) Con la correzione non servirà più ma sappi che in pezzi di codice come:
    Codice PHP:
    if($connessione == 0){echo "Connessione al database fallita";}
    sarebbe più corretto fare questo:
    Codice PHP:
    if($connessione === False) {
    echo
    "Connessione al database fallita";
    }
    Motivo: mysql_connect in caso di fallimento restituisce False. Ciò che hai fatto tu funziona comunque perchè 0 in una condizione viene considerato come un False ma per maggiore sicurezza sarebbe da fare "=== False".
    Non correre nell'errore di fare "==False" per questo motivo (=== controlla anche che sia il valore che il tipo corrispondano):

    Codice PHP:
    if (0 == False) {
    echo
    "Vero | "
    } else {
    echo
    "Falso |"
    }
    if (
    0 === False) {
    echo
    "Vero"
    } else {
    echo
    "Falso"
    //Output: Vero | Falso
    2) Ecco la soluzione per il problema dell'unico record che riesci a leggere. Devi andare a rileggere la documentazione dei php.net dove parla di mysql_fetch_assoc (lo so che hai usato mysql_fetch_array ma ti assicuro che questo ti piacerà di più ed è più veloce a livello di esecuzione.) e anche la documentazione del while (...) { ... } do; (tu hai usato foreach ma vedrai che è più corretto il metodo che usa il while ... do);

    Ecco i link. Scusa per la presa per il culo che hanno ma mi piace molto l'effetto grafico =). Non leggere nemmeno le prese per il culo che contengono. (Usalo con i tuoi amici! )

    http://lmgtfy.com/?q=php.net+mysql_fetch_assoc&l=1
    Leggi la documentazione e il terzo esempio (a partire dalla riga while ($a = mysql_fetch_assoc($z)) { ).

    Ecco la correzione:

    Codice PHP:
    while ($record = mysql_fetch_array($lista_utenti)) {
    //Fai qualcosa come, ad esempio...
    echo $record['utente'];
    }
    Buon lavoro e dacci dentro! ;)

  3. #3
    Guest

    Predefinito

    Prima cosa, grazie mille per i tuoi consigli.

    Per me i tuoi consigli sono oro. Inoltre sono riuscito a creare questa lista (anche se ora mi leggerò qualche guida sul paging per farla diventare ancora più bella ).

    Ho letto ciò che mi hai linkato e ne faccio tesoro (tranquillo è divertente il redirect XD)

    Solo che ti sei dimenticato di rispondermi alla seconda domanda. Te la riporto qui:


    Citazione Originalmente inviato da Mishima
    Scusate ragazzi ho dimenticato di dire una cosa.

    Non riesco nemmeno a registrare la data nel db settando un campo TIMESTAMP...Qualche anima buona può spiegarmi come si fa? Mi serve solo sapere come si inserisce nel db...Non mi interessa estrarla...

    Grazie ancora
    Potresti farmi una buona guida?

    Ed ecco qui il codice risolto con i tuoi consigli(ho aggiunto anche la numerazione per vedere se sto diventando bravo con il php e so aggiungere qualcosa XD):
    Codice PHP:
    <?php
    //Dati del mio database
    $nomehost = "***";
    $nomeuser = "***";
    $password = "***";
    $dbname = "***";

    //Controllo connessione
    $connessione = mysql_connect($nomehost,$nomeuser,$password) or die(mysql_error());

    //Selezione database
    $select_db = mysql_select_db($dbname,$connessione) or die (mysql_error());

    //Selezione db per estrarre gli utenti
    $lista_utenti = mysql_query("SELECT username as utente FROM login ORDER BY username");
    echo
    "<b><center>Lista Utenti</b></center>";
    $n = "1";
    ?>
    <html>
    <head><title>Lista Utenti</title></head>
    <body>
    <center><table border="0" width="30%">
    <?php while($record = mysql_fetch_array($lista_utenti)) {
    echo
    "<tr><td>";
    echo
    "$n ";
    echo
    "</td>";
    echo
    "<td>";
    echo
    $record['utente'];
    echo
    "</td></tr>";
    $n++;
    }
    ?>
    </table></center>
    </body>
    <html>
    Inoltre modificherò la parte della connessione in tutte le altre mie pagine

    EDIT: Con tanta fatica ho aggiunto perfino la tabella O_O. Posto il nuovo file per avere consigli per scriverlo più pulito...perchè credo che non sia proprio il massimo xD
    Ultima modifica di Mishima : 14-08-2010 alle ore 00.02.42

  4. #4
    Guest

    Predefinito

    Grazie per i complimenti =) Non ne ricevo tanti e quella volta che li ricevo sono veramente contento =) Per aver appena cominciato vai molto bene =). Hai già avuto a che fare con altri linguaggi oltre a quelli "web-oriented"? C? C++? Turbo Pascal? Delphi (My LoVe! <3)?

    Il timestamp, sarò sincero, non l'ho mai nemmeno visto o sentito xD. Io conosco il DATETIME e comunque avendo cominciato anche io da un mesetto scarso non l'ho usato. Non ne ho ancora avuto l'occasione considerato che il mio progetto di sito sta ancora prendendo piede.

    Mi viene naturale farti una domanda. Hai detto che il campo della data non lo userai mai. A questo punto a cosa ti serve se non ad occupare spazio? Lo vuoi scrivere comunque nel caso che ti serva più avanti?

    Ad ogni modo l'unico modo che conosco io per settare la data, ignoranza mia e quindi ti chiedo scusa, è usare la funzione MySQL CURRDATE(). Ecco dei link.

    http://dev.mysql.com/doc/refman/5.0/...functions.html
    http://dev.mysql.com/doc/refman/5.0/...n_current-date

    Avendo appena cominciato è probabile che tu non riesca facilmente a capire dove andare ad inserire la parola. Ho visto che sei molto sveglio e che comunque capisci al volo quindi basterà uno snippet veloce di codice e vedrai come usarla (probabilmente non ne avrai nemmeno bisogno =D):

    Codice:
    INSERT INTO tabella (...) VALUES (..., CURRDATE())
    (non so se tra VALUES e () ci va uno spazio... prova e vedi se funziona in uno dei due modi. Mi pare sia quello con lo spazio)

    Se non funziona è colpa mia perchè SQL l'ho cominciato solo ieri allo stage, mentre studiavo ORACLE SQL. MySQL è diverso per certi aspetti ma guarda caso non so quali xD.

    EDIT>>
    A PROPOSITO! Complimenti per la tabella =) pian piano stai facendo grandi passi =D.

    Unico problemino...
    Inoltre modificherò la parte della connessione in tutte le altre mie pagine
    Una sola risposta O___________O xD. NON SI FA.

    Ti consiglio di studiare PHP5. Esiste un concetto chiamato classe oppure, se non riesci a capirlo, esistono le cosiddette "librerie esterne". Essenzialmente devi creare un file PHP a parte e senza XHTML al suo interno. Uno così per capirsi:

    Codice PHP:
    <?php
    ...
    ?>
    In questo file ci devi mettere delle funzioni (php.net ti spiega tutto a riguardo, cerca functions) che potrai richiamare da tutto il sito. I vantaggi sono che non dovrai correre per tutto il sito per risolvere i bug, che le tue pagine peseranno meno in quanto il codice lo scrivi una volta e non dieci o venti volte. Correggere venti volte la stessa cosa e andare in giro a cercare dove era stata usata può essere causa di depressione, crisi suicide e omicide (dipende da come ti gira xD) nonchè possibilità di creazione spontanea di buchi neri (non ti preoccupare, sono le 00:23 e il mio cervello è andato). Per questo motivo ti conviene sfruttare questa tecnica. Una volta messe le funzioni nel file "library.php" (ad esempio) per usarle ti basta scrivere all'inizio dello script
    Codice PHP:
    require_once('library.php');
    Consiglio spassionato, vai a studiare include, include_once, require, require_once. Di solito conviene usare require_once.
    Io penso che potrebbe essere una vera manna dal cielo per te il fatto di usare quanto meno le librerie, ancora meglio se usi le classi e gli oggetti, strumenti fondamentali della programmazione che, una volta compresi e appresi a dovere, sono in grado di renderti abilissimo e ti permettono di raggiungere risultati fenomenali.

    Che dire... non mi sembra manchi altro. A presto ;) il mio sito vero e proprio non è provaphpprova.altervista.org ma blackgecko.altervista.org. Fai un salto se ti va =)
    Ultima modifica di provaphpprova : 14-08-2010 alle ore 00.33.37

  5. #5
    Guest

    Predefinito

    Ancora grazie per la puntuale risposta.

    No, non ho mai avuto a che fare con altri linguaggi. Ho iniziato da 1 anno o più a smanettare con gli script PHP e ho imparato per bene l'HTML e poi da una settimana che ho deciso di imparare il PHP.
    Siccome poi non c'è una scuola nelle mie vicinanze per l'informatica ho dovuto scegliere il liceo scientifico (ho 17 anni, devo fare il 4 anno) :P

    Purtroppo però questo passaggio dell'inserimento della data non l'ho capito. Provo a postarti il file. Comunque mi serve solo per vedere l'ultimo utente registrato visto che con MAX(id) non riesco a farlo funzionare. Con la data ci stavo riuscendo poi non ha funzionato più (avrò modificato qualcosa).

    Codice PHP:
    <?php
    //Dati del mio database
    $nomehost = "***";
    $nomeuser = "***";
    $password = "***";
    $dbname = "***";

    //Connessione al database
    $connessione = mysql_connect($nomehost,$nomeuser,$password);

    //Controllo Connessione
    if($connessione == 0){echo "Connessione al database fallita";}

    //selezione database login
    $database_select = mysql_select_db($dbname, $connessione);

    //Controllo selezione del database
    if($database_select == 0) {echo "Selezione non riuscita";}

    //Selezione db per estrarre l'ultimo utente registrato
    $sql_ult_utente = mysql_query("SELECT MAX(id), username FROM login");
    $ult_utente = mysql_fetch_array($sql_ult_utente);
    echo
    "<center>Ultimo utente registrato: ";
    echo
    "<b>";
    echo
    $ult_utente['username'];
    echo
    "</b></center>";

    //Utenti iscritti al sito
    $sql_utenti_isc = mysql_query("SELECT count(*) as utenti_iscritti FROM login");
    $utenti_isc = mysql_fetch_array($sql_utenti_isc);
    echo
    "<center>Utenti registrati: <b>";
    echo
    $utenti_isc['utenti_iscritti'];
    echo
    "</b><center>";
    echo
    "<a href=\"lista_utenti.php\" target=\"home\">Lista Utenti</a>";
    ?>
    vedi la parte per estrarre l'ultimo iscritto. Non riesco a farlo funzionare.

    Grazie per la tabella credevo fosse "sbagliata".

    Per quanto riguarda l'include ecc...avevo letto da parte questa funzione e avevo creato un file config.php così:

    Codice PHP:
    <?php
    //Dati del mio database
    $nomehost = "***";
    $nomeuser = "***";
    $password = "***";
    $dbname = "***";

    //Connessione al database
    $connessione = mysql_connect($nomehost,$nomeuser,$password);

    //Controllo Connessione
    if($connessione == 0){echo "Connessione al database fallita";}

    //selezione database login
    $database_select = mysql_select_db($dbname, $connessione);

    //Controllo selezione del database
    if($database_select == 0) {echo "Selezione non riuscita";}
    ?>
    Ma quando andavo a mettere in un file include(config.php); non mi funzionava...mi dava un errore. Perchè?

    PS poi modificherò meglio i controlli delle connessioni come mi hai insegnato tu, ora ho copiato il file che avevo quando ancora non lo sapevo.

  6. #6
    Guest

    Predefinito

    Mi dispiace per la scelta scolastica =( è un peccato ma vabbè. Le scelte sono scelte e se ti sei trovato nella condizione di non avere una scuola mi dispiace ancora di più (Io per andare nella mia devo fare 35x2 km ogni giorno ma almeno ho la fortuna di averla, tu nemmeno quella =( ).
    Allora, scusa il mio ritardo e diamoci dentro, usando il MAX(id) ciò che ottieni è di prendere l'ultimo iscritto. Quella funzione non penso vada bene là. Ora non ho le possibilità di provare ma penso che quella query ti restituisca una tabella grande tanto quanto quella degli utenti ma con tutti gli ID uguali (tutti avranno come valore l'ID massimo) e i nomi diversi che corrispondono a quelli che hai messo tu.

    Io proverei questa query che penso essere più corretta:
    Codice:
    SELECT * FROM login WHERE id = MAX(id)
    Modificala come devi e sei a posto, mi riferisco al *.

    Se id è definito come auto_increment sei a posto.

    Per l'errore dell'include non so dirti... Sai, anche io sono nuovo alla fin fine =)
    Mi impegno e cerco di eccellere quando posso ma non so tutto xD

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •