• User

    Mostrare i risultati di una select

    Salve a tutti. Avrei bisogno di una mano per scrivere i risultati di una select sul mio database.
    Premetto che so come gestire i database, ma non conosco praticamente nnulla di php.

    Quello che mi serve in questo momento è questo: io faccio una select con il nome utente utilizzato per accedere all'area riservata (mille grazie a google che mi ha fatto trovare lo script :2: per ricavarmi il nick dell'utente.
    con questo nick vorrei trovare tutti i siti a cui si è iscritto (e che sono memorizzati in una tabella).
    Posto le due select qua sotto:

    
    SELECT nick 
      FROM nick_utente
     WHERE utente = $variabile$
    
    
    
    SELECT siti
      FROM utente_siti
      WHERE nick = $risultato precedente$
    
    

    e vorrei che la pagina mi mostrasse il risultato dell'ultima select.

    potrei anche collegare le due select e farne direttamente una, il problema è che non ho la più pallida idea di come si possa fare in php :bho: :microsoft:


  • User Attivo

    In pratica tu hai una tabella chiamata utente_siti dove ogni record contiene un url e un campo "nick" dove compare l'utente che lo "possiede"?

    Ipotizziamo che hai recuperato già il nick e che estrai 3 dati dalla tabella dei siti...

    $query = "SELECT nick, nome_sito, url_sito FROM utente_siti
    WHERE nick = '$nick'";

    $result = mysql_query($query);

    while ($array = mysql_fetch_array($result))
    {

    $arr_stripped = array_map("stripslashes", $array);
    list($nick, $nome_sito,
         $url_sito) = $arr_stripped; ?>
    <ul><li><?=$nick?></li> <!-- stampi la lista dei tre valori a ciclo -->
    <li><?=$nome_sito?></li>
    <li><?=$url_sito?></li></ul>
    

    }

    Così fai una lista ul per ogni voce che c'è nel database... se vuoi fare una tabella cambi i tag xhtml a tuo piacimento... cmq il ciclo while scorre l'array $array finchè contiene dei valori, assegna ad $arr_stripped i singoli valori e poi li stampa a video...

    Ci sono altre soluzioni volendo, ma questa cmq è funzionale...

    keiske


  • User

    ciao, intanto grazie.
    io ho fatto un paio di modifiche al codice, anche perchè sono ancora fermo alla prima select...

    io ho scritto questo:

    [php]
    <?php
    $query = "SELECT nick FROM nick_utente WHERE utente = " . $_SESSION['MM_Username'];
    $result = mysql_query($query, $globalarea);
    while ($array = mysql_fetch_array($result))
    {

    $arr_stripped = array_map("stripslashes", $array);
    list($nick) = $arr_stripped; ?>
    <ul><li><?=$nick?></li></ul>

    }
    ?>
    [/php]

    e ricevo questo messagio di errore:

    
    **Parse error**:  syntax error, unexpected $end in **/.../privata.php** on line **68**
    
    

    sono sicuro che è una stupidaggine (come un tag non chiuso) però non so cosa possa essere :bho:


  • User Attivo

    $arr_stripped = array_map("stripslashes", $array);
    list($nick) = $arr_stripped; ?>
    <ul><li><?=$nick?></li></ul>
    <?php
    }
    ?>

    devi riaprire il tag php prima dell'ultima graffa

    keiske


  • User

    ok fatto.
    nuovo errore:

    
    **Warning**:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in **/../privata.php** on line **57**
    
    

    ehm...
    ok, scusate ma sto veramente andando per tentativi...


  • User Attivo

    Si direbbe che la tua query non dia risultati, mi dà da pensare quel $globalarea nell'esecuzione della query... ad ogni modo metti un

    if($result) {

    }

    a inglobare tutto il ciclo while... e controlla che la tua query dia un risultato...

    keiske


  • User

    mhm mi sa che il problema è più a monte.
    come si fa a includere una variabile in una query? perchè mi sa che sbaglio nello scrivere la select...


  • User Attivo

    SELECT nome_campo FROM nome_tabella WHERE nome_campo = '$variabile'
    SELECT nome_campo FROM nome_tabella WHERE nome_campo = 'stringa'

    le variabili così come le stringhe normali tra apici singoli... se passi una variabile di tipo $_VARS['var'] ti consiglio di assegnarla prima all'inizio della pagina:

    if(isset($_VARS['var]))
    $var = $_VARS['var];
    else
    $var = "";

    E poi usi $var (volendo nell'isset di prima puoi anche mettere l'escaping della stringa per aumentare la sicurezza)


  • ModSenior

    la query sarebbe cosi corretta:
    [php]$query = "SELECT nick FROM nick_utente WHERE utente = '$_SESSION['MM_Username']'";[/php]


  • User

    @Thedarkita said:

    la query sarebbe cosi corretta:
    [php]$query = "SELECT nick FROM nick_utente WHERE utente = '$_SESSION['MM_Username']'";[/php]

    anche in questo modo mi da' lo stesso degli errori..
    a questo punto credo che il problema sia nello script relativo all'accesso...
    quindi prima devo risolverlo per andare avanti..
    cose faccio continuo in questo thread oppure ne apro un'altro?

    mi servirebbe poter creare una semplice area riservata e avere dei gruppi di utente (in particolar modo l'admin -cioè io- poter avere accesso a determinate pagine).
    ho visto che qua sul sito c'è già una script, ma a quanto pare ha dato un po' di problemi a non poche persone...

    grazie veramente a tutti per l'aiuto.


  • User Attivo

    Prepara una semplice query che prenda i dati che passi al form di login e in caso di riscontro user/password nel db setta una variabile di sessione con l'id di chi si è loggato...

    Poi un file sicurezza.php nel quale cerchi la variabile di sessione e se c'è tutto ok, mentre se non c'è chiami la pagina iniziale... poi la sicurezza.php la metti require in ogni pagina che vuoi "proteggere" e per le pagine che vuoi vedere solo tu come admin metti che la variabile di sessione non solo esista ma sia quella relativa al tuo id/nick...

    keiske


  • User

    allora, io credo di diventarci scemo.
    non riesco in nessun modo a visualizzare i risultati.
    ho usato questo codice:
    [php]
    <body>
    <!-- area riservata -->
    <?php
    $sql = 'SELECT * FROM nick_utente LIMIT 0, 30 ';
    $result = mysql_query($sql);
    print ($result);
    ?>
    </body>
    [/php]
    non mi torna neanche un risultato! la query è corretta, PER FORZA. L'ho copiata da phpMyAdmin e poi mi sembra basilare...
    allora, se mi spiegate perchè non mi viene fuori nulla?
    (p.s. ovviamente la tabella non è vuota, c'è dentro un record.. e ho impostato come chiave primaria il campo utente...)


  • ModSenior

    quella è una query dovrebbe stamparti #resource...
    devi usare altre funzioni come mysql_fetch_array per spampare il contenuto, oppure mysql_num_rows per contare il numero di record


  • User Attivo

    già... il $result è un array... non puoi stamparlo

    per vedere se ci sono risultati, alla grezza fai

    if(mysql_num_rows($result))
    echo "ci sono risultati";

    Per vedere i risultati in dettaglio invece usi come ha detto dark fetch_array

    keiske


  • User

    ho fatto un paio di prove e ho avuto conferema...
    è proprio come pensavo: è lo script del login che fa casino e mi impalla tutto quanto...
    prima devo sistemare questo, poi dopo tutto il resto viene da se
    cmq grazie a tutti quanti


  • User

    allora, alla fine, picchia e mena, ci sono riuscito.
    paradossalmente complicando le cose.
    ecco il codice:
    [php]
    <?php
    $result = mysql_query("SELECT sitoFROM utente_sito WHERE nick = (SELECT nick FROM nick_utente WHERE utente = '".$_SESSION['username']."')");
    for ($i = 1; $i <= mysql_num_rows($result); $i++)
    {
    $riga = mysql_fetch_assoc($result);
    if ($i == mysql_num_rows($result))
    {
    print ('"' . $riga["sito"] . '"');
    }
    else
    {
    print ('"' . $riga["sito"] . '",');
    }
    }

    ?>
    [/php]

    come avrete già capito ho un po' di problemi nel gestire il risultato di una query...
    :bho: