• User Newbie

    url cliccabile da campo prelevato da db mysql

    Ciao a tutti. Sono alle prime armi con PHP e sto creando delle pagine che gestiscano il mio db relativo alla collezione di dischi che posseggo.
    HO creato il db in mysql (phpmyadmin). Estraggo le pagine per mezze delle classiche query utilizzate in questi casi.
    Ho un problema ma prima vi scrivo il listato della mia pagina che utilizzo per fare l'output di tutta la mia collezione di dischi.

    [PHP]<html>
    <head>
    <meta charset="UTF-8">
    <title>Tabella Completa Dischi</title>
    </head>
    <body>
    <?php

        $host = 'localhost';
        $user = 'leg';
        $password = '';
        $database = 'leg';
        
        $db = mysql_connect($host, $user, $password) or die ("impossibile connettersi al server $host");
        
        mysql_select_db($database, $db) or die ("impossibile connettersi al database $database");
        $query = "select * from lp";
        $dbResult = mysql_query($query, $db);
           
        print "<table border=\"1\"cellspacing=\"0\">\n";
        while ($line = mysql_fetch_array($dbResult, MYSQL_NUM)) 
                {
            print "\t<tr>\n";
            foreach ($line as $col_value) {
                
                print "\t\t<td>$col_value</td>\n";
                           
                }
                print "\t</tr>\n";
            
                       
            
        }
                print "</table>\n";
                                
                mysql_free_result($dbResult);
                mysql_close($db);
                ?>
    </body>
    

    </html>
    [/PHP]

    TRa i vari campi che compongono il DB ne è presente uno, denominato LINK dove scrivo per mezzo di un form di inserimento dati, una URL. Ebbene, all'estrazione dei dati dal db quel testo non è un link cliccabile e vorrei che il contenuto di ogni record, nel campo LINK, sia una URL cliccabile.
    Il dato viene estratto bene dalla query ma è solo comune testo e non un link cliccabile per visitare il sito corrispondente.
    Come posso fare secondo voi?

    Vi ringrazio
    CRis


  • User Attivo

    Buongiorno, Cris.
    Il mysql restituisce sempre dati "grezzi". Se vuoi che questi dati producano delle azioni dovrai essere tu a gestirle.
    Nel tuo caso occorrerà che per il campo dell'URL tu crei l'html che lo fa diventare un link. Per questo dovrai ricavare con il comando mysql_fetch_array anche i nomi dei campi con il parametro MYSQL_ASSOC.
    Io in questo caso con una IF cambierei il valore di $col_value per generare solo per il campo necessario il markup del collegamento.
    [php]
    ...
    while ($line = mysql_fetch_array($dbResult, MYSQL_ASSOC))
    {
    print "\t<tr>\n";
    foreach ($line as $col_name => $col_value) {

                if ($col_name=='url_link'){
                     $col_value=='<a href="'.$col_value.'">'.$col_value.'</a>';
                }
    
                print "\t\t<td>$col_value</td>\n";
                           
                }
                print "\t</tr>\n";
            
                       
            
        }
    

    ...
    [/php]

    Spero sia chiaro.


  • User Newbie

    Ciao Davello. Innanzitutto grazie per la risposta.
    In quella pagina php in effetti non richiamo i nomi delle colonne. Quello è un output generico.
    Ti mostro il codice della pagina che uso per estrarre i risultati previa ricerca tramite form html.
    Questa è la pagina php che riceve i dati dalla pagina form di ricerca SEARCH.HTML

    [PHP]
    <?php

        $host = 'localhost';
        $user = '*******';
        $password = '';
        $database = '*********';
        
        $db = mysql_connect($host, $user, $password) or die ("impossibile connettersi al server $host");
        
        mysql_select_db($database, $db) or die ("impossibile connettersi al database $database");
        
        $artista=trim($_POST['artista']);
        $titolo=trim($_POST['titolo']);
        $barcode=trim($_POST['barcode']);
        $cod=trim($_POST['cod']);
        $supp=trim($_POST['supp']);
        $form=trim($_POST['form']);
        $conf=trim($_POST['conf']);       
    

    $wh="";
    if($artista!=""){//hai inputato l'autore
    $wh.=" artista LIKE '%$artista%' AND ";
    }
    if($titolo!=""){//hai inputato il titolo
    $wh.=" titolo LIKE '%$titolo%' AND ";
    }
    if($barcode!=""){//hai inputato l'autore
    $wh.=" barcode LIKE '%$barcode%' AND ";
    }
    if($cod!=""){//hai inputato l'autore
    $wh.=" cod LIKE '%$cod%' AND ";
    }
    if($supp!=""){//hai inputato l'autore
    $wh.=" supp LIKE '%$supp%' AND ";
    }
    if($form!=""){//hai inputato l'autore
    $wh.=" form LIKE '%$form%' AND ";
    }
    if($conf!=""){//hai inputato l'autore
    $wh.=" conf LIKE '%$conf%' AND ";
    }
    $wh.= " 1=1 ";
    /*
    se non imputi nulla risulta $wh => 1=1 (estrai tutti i record)
    se solo autore $wh => autore LIKE '$autore%' AND 1=1
    se solo titolo $wh => titolo LIKE '$titolo%' AND 1=1
    se imputi autore e titolo $wh => autore LIKE '$autore%' AND titolo LIKE '$titolo%' AND 1=1
    da cui la query
    */
    $query="SELECT * FROM lp WHERE $wh";
    $dbResult = mysql_query($query, $db);
    $AffectedRows = mysql_affected_rows($db);

        print("<h3><a href=\"index1.html\">Torna Al Menu</a></h3>");
        
        print "<table border=\"1\" cellspacing=\"0\">\n";
                
        for ($index=0 ; $index<$AffectedRows ; $index++)
        {
            $row=mysql_fetch_row($dbResult);
             
            if($index==0)
            {                         
                print "<tr>\n";
                foreach ($row as $k => $v)
                {
                    $myfield = mysql_fetch_field($dbResult,$k);
                                   
                    print ("<td><b>" . $myfield->name . "</b></td>");
                }
                print "</tr>\n";
            }
            foreach ($row as $k => $v)
                {
                print ("<td>$v&nbsp;");
                if ($k==0)
                {
                 
                    print "<br>";
                    print "<a href=\"modifica.php?id=$v\"><img src=img/update.gif></a>";
                    print "<br>";
                    print "<a href=\"cancella.php?id=$v\"><img src=img/iconDelete.gif></a>";
                }
                print ("</td>");
            }
        print "</tr>\n";
        
        }
        print "</table>\n";
        print("<h3><a href=\"index1.html\">Torna Al Menu</a></h3>");
        mysql_free_result($dbResult);
        mysql_close($db);
        
                ?>
    <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"beacon-1.newrelic.com","licenseKey":"1b473294f5","applicationID":"550561","transactionName":"M1QBYUMCDUAEWkRfWgoeNkdYTAVcF0xdGUMGQgZaHxMLQw==","queueTime":0,"applicationTime":47,"ttGuid":"","agentToken":"","userAttributes":"","errorBeacon":"jserror.newrelic.com","agent":"js-agent.newrelic.com\/nr-283.min.js"}</script><script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"beacon-1.newrelic.com","licenseKey":"1b473294f5","applicationID":"550561","transactionName":"M1QBYUMCDUAEWkRfWgoeNkdYTAVcF0xdGUMGQgZaHxMLQw==","queueTime":0,"applicationTime":49,"ttGuid":"","agentToken":"","userAttributes":"","errorBeacon":"jserror.newrelic.com","agent":"js-agent.newrelic.com\/nr-283.min.js"}</script></body>
    

    </html>[/PHP]

    In questa pagina richiamo anche i nomi delle colonne del DB e faccio dei filtri grazie a ciò che ho scritto nel form che ti ho menzionato. Ecco, è da questo risultato di output che gradirei trasformare il dato presente nel campo denominato LINK da semplice testo a url cliccabile.


  • User Attivo

    Come sopra. Dove hai
    [php]
    print ("<td>$v ");
    [/php]

    fallo diventare
    [php]
    if ($k== numero di colonna con il link){ $v = '<a href="'.$v.'">'.$v.'</a>';}
    print ("<td>$v ");
    [/php]


  • User Newbie

    Sei splendido!!!!!! Ho risolto!!!!
    Grandissimo!!!!! Grazie davvero!!!!!
    In effetti hai perfettamente ragione se la colonna è la 22(nel mio caso) allora il valore taggalo con la <a href e fai l'output.
    Sei davvero un mago!!!!!

    Come posso ringraziarti?

    Cris

    @davello said:

    Come sopra. Dove hai
    [php]
    print ("<td>$v ");
    [/php]

    fallo diventare
    [php]
    if ($k== numero di colonna con il link){ $v = '<a href="'.$v.'">'.$v.'</a>';}
    print ("<td>$v ");
    [/php]


  • User Attivo

    Lieto di averti potuto aiutare.

    Permettimi però di darti un consiglio: se puoi, usa
    [php]
    mysql_fetch_array( $dbResult, MYSQL_ASSOC )
    [/php]

    piuttosto che
    [php]
    mysql_fetch_row( $dbResult )
    [/php]

    Così nella mia soluzione non dovresti più mettere il numero della colonna, ma il suo nome.
    Questo perché se un giorno modifichi la tabella mettendo in mezzo altri campi non dovrai modificare gli script come questo per andare a cambiare il numero di colonna.