Visualizzazione risultati 1 fino 11 di 11

Discussione: Mysql-PHP Cercare parte del testo?

  1. #1
    Guest

    Wink Mysql-PHP Cercare parte del testo?

    Buon giorno a tutti, sono qui per risolvere un mio dubbio che non so risolvere, vi spiego subito:

    Tramite una pagina (un form in html e codice php nella stessa pagina) inserisco dei dati in una tabella del mio database:
    Codice PHP:
    ...
    ...
    ...
    <form action="" method="post">
    <table width="400" border="1" cellpadding="3">
    <tr>
    <td width="400" height="10" colspan="2"> <center> <font color="0000FF"> Campi di ricerca </font> </center> </td>
    </tr>
    <tr>
    <td width="75" height="20"> <font color="0000FF"> Titolo: </font> </td>
    <td width="325" height="20"> <center> <input type="text" name="Titolo" id="Titolo" size="45" /> </center> </td>
    </tr>
    <tr>
    <td width="75" height="20"> <font color="0000FF"> Tipo: </font> </td>
    <td width="325" height="20">
    <center>
    <select name="Tipo" size="1" >
    <option selected value="0"> Avventura </option>
    <option value="1"> Fantasy </option>
    <option value="2"> Azione </option>
    </select>
    </center>
    </td>
    </tr>
    <tr>
    <td width="75" height="20"> <font color="0000FF"> Link: </font> </td>
    <td width="325" height="20"> <center> <input type="text" name="Link" id="Link" size="45" /> </center> </td>
    </tr>
    <tr>
    <td width="400" height="20" colspan="2"> <center> <input type="submit" name="Inserisci" id="Inserisci" value=" INSERISCI " /> </center> </td>
    </tr>
    </table>
    </form>
    ...
    ...
    ...

    <?php
    if(isset($_POST['Inserisci'])) {
    $Titolo = addslashes(trim($_POST['Titolo']));
    $Tipo = (trim($_POST['Tipo']));
    $Link = (trim($_POST['Link']));
    require(
    'ConnDatabase.php');
    $query = "INSERT INTO libri (Titolo, Link, Tipo) VALUES ('$Titolo', '$Link', '$Tipo')";
    $result = mysql_query($query);
    if (!
    $result) {
    echo
    "<font color=red> <center> Errore nell' inserimento dei dati </font> </center>";
    die;
    }
    else {
    mysql_close();
    echo
    "<font color=red> <center> Inserimento effettutato </center> </font>";
    }
    }
    ?>
    E fin qui tutto ok, i dati vengono inseriti correttamente. Ora, però, in un altra pagina vorrei riprendere questi dal database dati ma mostrare tutti i recor che hanno in comune una parola cercata nel campo Titolo e il campo Tipo sia uguale.

    ES:
    Cerco il titolo: "L' uomo felice" del tipo: Avventura
    (i filtri di ricerca li seleziono tramite un form)
    Come risultato vorrei ottenere:
    L' uomo felice della vale (sempre del tipo Avventura);
    Chi era L' uomo felice? (sempre del tipo Avventura);
    etc...

    Cercando in internet ho trovato le funzioni glob() e preg() ma non ho capito se fanno al caso mio.

    Grazie 1000 in anticipo

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Se devi fare una ricerca di una parte di stringa puoi usare l'operatore LIKE di MySQL.
    Per cose più complesse esiste REGEXP.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    nella condizione puoi mettere una cosa del genere: like '%$pattern%';
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  4. #4
    Guest

    Predefinito

    Like va benissimo. Grazie :)

  5. #5
    Guest

    Predefinito

    Ragazzi, un altro aiutino per favore. Non riesco ad ordinare i dati, quando lo faccio per i commenti utilizzo l' id e lo faccio aumentare con un ciclo for:
    Codice PHP:
    $nr = mysql_num_rows($rs); //rs e il SELECT
    for($commento = 0; $comento < $nr; $commento++) {
    ...
    ...
    ...
    }
    Come posso fare per i risultati del SELECT con LIKE?
    Potrei utilizzare gli array? Se si, potreste farmi un piccolo esempio?
    Grazie.

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Provato con la clausola ORDER BY all'interno della query?

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  7. #7
    Guest

    Predefinito

    Mmm no, sembra che non riesca a farlo funzionare. Mi rappresenta solo il primo risultato trovato. Ecco il codice:
    Codice PHP:
    $rs = mysql_query("SELECT * FROM libri WHERE Tipo = '$Tipo' AND Titolo LIKE '%$Titolo%' ORDER BY id");
    $nr = mysql_num_rows($rs);

    if (
    $nr != 0) {
    for(
    $id=0; $id < $nr; $id++) {
    ...
    ...
    }
    mysql_colose();
    }
    dove sbaglio? grazie ancora

  8. #8
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    il codice che hai postato sembra essere buono, forse sbagli altrove.
    Ultima modifica di Xsescott : 30-09-2010 alle ore 02.44.58
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  9. #9
    Guest

    Predefinito

    Ok, allora, premetto che i dati sono inseriti correttamente nel database e posto la pagina che uso per richiamarli:

    Codice PHP:
    <form action="" method="post">
    <table width="400" border="1" cellpadding="3">
    <tr>
    <td width="400" height="20" colspan="2"> <center> <font color="0000FF"> Compila il form </font> </center> </td>
    </tr>
    <tr>
    <td width="75" height="20"> <font color="0000FF"> Titolo: </font> </td>
    <td width="325" height="20"> <center> <input type="text" name="Titolo" id="Titolo" size="45" /> </center> </td>
    </tr>
    <tr>
    <td width="75" height="20"> <font color="0000FF"> Tipo: </font> </td>
    <td width="325" height="20"> <center>
    <select name="Tipo" size="1" >
    <option selected value="0"> Azione </option>
    <option value="1"> Fantasy </option>
    <option value="2"> Avventura </option>
    </select>
    </center> </td>
    </tr>
    <tr>
    <td width="400" height="10" colspan="3">
    <center> <input type="submit" name="Cerca" id="Cerca" value=" CERCA " /> </center>
    </td>
    </tr>
    </table>
    </form>
    </center>
    </body>
    </html>

    <?php
    if(isset($_POST['Cerca'])) {
    $Titolo = addslashes((trim($_POST['Titolo'])));
    $Tipo = (trim($_POST['Tipo']));
    //Numero di libri per pagina
    $libri_pag = 8;

    //Numero di pagina
    $pag = 1;

    // Mi connetto al database
    require 'ConnDatabase.php';

    // Uso mysql_num_rows per contare le righe presenti
    // all'interno della tabella agenda
    $all_rows = mysql_num_rows(mysql_query("SELECT id FROM libri"));

    // Tramite una semplice operazione matematica definisco
    // il numero totale di pagine
    $all_pages = ceil($all_rows / $libri_pag);

    $rs = mysql_query("SELECT * FROM video WHERE Tipo = '$Tipo' AND Titolo LIKE '%$Titolo%' ORDER BY id");
    $nr = mysql_num_rows($rs);

    if (
    $nr != 0) {
    for(
    $id=0; $id < $nr; $id++) {
    $row = mysql_fetch_assoc($rs);
    $Titolo = $row['Titolo'];
    $Autore = $row['Autore'];
    $Anno = $row['Anno'];
    $Collana = $row['Collana'];
    $Link = $row['Link'];
    echo
    "<br />";

    echo
    "<center>";
    echo
    " <table width=\"400\" border=\"1\">";
    echo
    " <tr>";
    echo
    " <td width=\"400\" height=\"10\" colspan=\"2\">";
    echo
    " <center> <font color=\"0000FF\"> <u> $Titolo </u> </font> </center>";
    echo
    " </td>";
    echo
    " </tr>";
    echo
    " <tr>";
    echo
    " <td width=\"75\" height=\"20\"> <font color=\"red\"> Autore: </font> </td>";
    echo
    " <td width=\"325\" height=\"20\"> <font color=\"0000FF\"> <center> $Autore </center> </font> </td>";
    echo
    " </tr>";
    echo
    " <tr>";
    echo
    " <td width=\"75\" height=\"20\"> <font color=\"red\"> Anno: </font> </td>";
    echo
    " <td width=\"325\" height=\"20\"> <font color=\"0000FF\"> <center> $Anno </center> </font> </td>";
    echo
    " </tr>";
    echo
    " <tr>";
    echo
    " <td width=\"75\" height=\"20\"> <font color=\"red\"> Collana: </font> </td>";
    echo
    " <td width=\"325\" height=\"20\"> <font color=\"0000FF\"> <center> $Collana </center> </font> </td>";
    echo
    " </tr>";
    echo
    " <tr>";
    echo
    " <td width=\"400\" height=\"20\" colspan=\"2\"> <center> <font color=\"0000FF\"> $Link </font> </center> </td>";
    echo
    " </tr>";
    echo
    " </table>";
    echo
    "</center>";
    die();
    }
    }
    mysql_close();
    }
    ?>
    Ricapitolando, il problema è che pur avendo nel database 2 libri con il titolo molto simile ("Edgar il brutto", "Edgar il bello") come risultato della ricerca ottengo sempre 1 dei 2, in particolare il primo in ordine di id.

  10. #10
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Perché quel die() alla fine del ciclo? Ci credo che così te ne esca solo uno di risultato...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  11. #11
    Guest

    Predefinito

    Di funzionare funziona. Solo un piccolo dubbio:
    Se lascio mysql_close(); non esegue lo script. Me lo levo funziona tutto perfettamente. Perchè?
    Ultima modifica di pcmio : 30-09-2010 alle ore 12.12.00

Regole di scrittura

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