Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439

    Ricerca per lettera in un DB

    Salve, non ho mai utilizzato php fin ora. Qualche volta ho utilizzato asp per interfacciarmi con i database, però ora ho l'esigenza di gestire tutto con il php (perchè sono più libero di gestirmi le cose ...)

    Comunque torniamo al problema. Ho un database composto essenzialmente di tre tabelle e ho creato una pagina in cui vengono visualizzati dei valori (nome, cognome, posizione, società) in ordine alfabetico per cognome e poi nome.

    Il problema è che dovrei creare un menù sottostante con già tutte le query pronte per ordinarmi i dati partendo dalla lettera selezionata (ad esempio qualcosa del tipo:
    A | B | C | D | E | F | G | H | I | J | K | L | M | N
    ). Possibilmente la lettera selezionata/premuta dovrebbe diventare non selezionabile/linkabile...

    Lo script che ho fatto è:
    Codice PHP:
                                <?php
                            $query 
    'SELECT management.Nome AS Nome, management.Cognome AS Cognome, management.Posizione AS Posizione, aziende.Societa AS Societa
                            FROM aziende
                            INNER JOIN management ON (aziende.ID = management.ID_Azienda)
                            ORDER BY Cognome ASC, Nome ASC LIMIT 30'
    ;
                            
    $ris mysql_query($query,$conn) or die("Errore nella query: " mysql_error());
                            while(
    $riga mysql_fetch_array($ris)) {
                                print
    "[b]$riga[Cognome] ";
                                print
    "$riga[Nome][/b]
    "
    ;
                                  print
    "[i]$riga[Posizione]
    "
    ;
                                print
    "<font color='#FF6600'>$riga[Societa]</font>[/i]
    "
    ;

                            };
                            
    mysql_free_result($ris);
                            
    ?>
    Apertura e chiusura del db vengono a capo e a fine pagina.

    ...e fin qui è tutto funzionante.
    わさび

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    56
    Bè se ho capito bene la tua domanda è sufficente che
    usi un istruzione con operatore SQL che prenda i dati da una richiesta Get :

    " Where Nome Like '".$_GET['Nome']."%'"

  3. #3
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    Originariamente inviato da vali75
    Bè se ho capito bene la tua domanda è sufficente che
    usi un istruzione con operatore SQL che prenda i dati da una richiesta Get :

    " Where Nome Like '".$_GET['Nome']."%'"
    Quindi mi conviene gesire il tutto con metodo GET e non POST come facevo io... non sono ancora molto pratico...
    わさび

  4. #4
    Puoi mettere ad ogni lettera un link alla stessa pagina che manda in querystring la lettera stessa.

    codice:
    A
    in questo modo la query la farai così:

    codice:
    $lettera = $_GET['lettera'];
    $sql = "SELECT * FROM tabella WHERE nome LIKE '$lettera%'";
    Così ti estrae tutti i record che inziano con quella lettera.

    Per gestirti il fatto di rendere cliccabile o meno una lettera puoi fare così, con sontrolli del tipo if ed else:

    codice:
    if ($_GET['lettera'] == 'A')  echo 'A';
    else  echo "<a href=\"pagina.php?lettera=A\">A</a>";
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  5. #5
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    Originariamente inviato da 13manuel84
    Puoi mettere ad ogni lettera un link alla stessa pagina che manda in querystring la lettera stessa.

    codice:
    A
    in questo modo la query la farai così:

    codice:
    $lettera = $_GET['lettera'];
    $sql = "SELECT * FROM tabella WHERE nome LIKE '$lettera%'";
    Così ti estrae tutti i record che inziano con quella lettera.

    Per gestirti il fatto di rendere cliccabile o meno una lettera puoi fare così, con sontrolli del tipo if ed else:

    codice:
    if ($_GET['lettera'] == 'A')  echo 'A';
    else  echo "<a href=\"pagina.php?lettera=A\">A</a>";
    Mitico!
    Ci lavoro su
    わさび

  6. #6
    Dovresti tuttavia utilizzare, all'interno della query, per evitare eventuali problemi di SQL Injection... ovvero, invece di
    codice:
    SELECT * FROM tabella WHERE nome LIKE '$lettera%'
    questo:
    codice:
    SELECT * FROM tabella WHERE nome LIKE '".mysql_escape_String($lettera)."%'

  7. #7
    Ammetto la mia ignoranza, non conoscevo la funzione mysql_escape_String(), me la sono andata a leggere sul manuale e se posso vorrei chiederti delucidazioni in merito, nel senso, perché consigli di usarla in questo caso, passando solo una lettera?cioè, a me non sembra che la querystring inquestione necessiti di caratteri di escape. Come consiglio generale ok, lo userò anche io d'ora in poi e ti ringrazio per averlo precisato.

    >> manuale <<

    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  8. #8
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    Ragazzi intanto vi ringrazio a tutti per l'aiuto e per le delucidazioni. Vorrei chiedervi: queste istruzioni di MySql devono essere date con una certa priorità l'una rispetto all'altra?
    Mi spiego: prima l'Inner Join non mi dava problemi; ora da quando ho inserito lo script della lettera mi da questo output di errore:
    Errore nella query: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '; INNER JOIN management ON (aziende.ID = management.ID_A
    in entrambi i casi (gli esempi).

    Ho scritto questa query:
    Codice PHP:
                            $lettera $_GET['lettera'];
                            
    $query "SELECT management.Nome AS Nome, management.Cognome AS Cognome, management.Posizione AS Posizione, aziende.Societa AS Societa
                            FROM aziende
                            WHERE Cognome LIKE '"
    .mysql_escape_String($lettera)."%';
                            INNER JOIN management ON (aziende.ID = management.ID_Azienda)
                            ORDER BY Cognome ASC, Nome ASC LIMIT 30"
    ;
                            
    $ris mysql_query($query,$conn) or die("Errore nella query: " mysql_error()); 
    (A seguire c'è il while che è rimasto invariato ...)
    わさび

  9. #9
    Prova così:
    codice:
    $lettera = $_GET['lettera'];
    $query = "SELECT management.Nome AS Nome, management.Cognome AS Cognome, management.Posizione AS Posizione, aziende.Societa AS Societa
        FROM aziende
        WHERE Cognome LIKE ".mysql_escape_string($lettera)."%
           INNER JOIN management ON aziende.ID = management.ID_Azienda
    ORDER BY Cognome ASC, Nome ASC LIMIT 30";
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  10. #10
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    Originariamente inviato da 13manuel84
    Prova così:
    codice:
    $lettera = $_GET['lettera'];
    $query = "SELECT management.Nome AS Nome, management.Cognome AS Cognome, management.Posizione AS Posizione, aziende.Societa AS Societa
        FROM aziende
        WHERE Cognome LIKE ".mysql_escape_string($lettera)."%
           INNER JOIN management ON aziende.ID = management.ID_Azienda
    ORDER BY Cognome ASC, Nome ASC LIMIT 30";
    Adesso mi da:
    Errore nella query: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '% INNER JOIN management ON aziende.ID = management.ID_Azienda
    ...però forse dovrei mettere un if all'inizio della query.
    Nel senso che se lettera è indefinita deve essere impostata su 'A', ad esempio...
    わさび

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.