Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37

Discussione: Query di ricerca

  1. #1

    Query di ricerca

    Salve a tutti, spero che qualcuno sappia aiutarmi: il mio problema � molto semplice devo creare un form di ricerca php (GET o POST).
    Nel database mysql ho 1 tabella (prenotazioni) e 2 campi in cui dovrebbe avvenire la ricerca:
    -nome
    -cognome

    Avrei bisogno di una query che cerchi ogni valore inserito nel form in tutti e due i campi penso che si debba fare con explode() ma non saprei formularla

    INDEX.PHP
    codice:
    <table border="10">
      <tr>
        <td align="center"><b>CERCA</b></td>
      </tr>
      <tr>
        <td>
          <table>
            <form method="post" action="./cerca.php">
            <tr>
              <td>Cerca:</td>
                <td width="250" align="left"><input type="number" step="any" min="1" autocomplete="off" name="testo"/>
              </td>
            </tr>                    
            <tr>
              <td></td>
        <td align="left"><input style="width:100px;" type="submit" value="Cerca"/>
            </tr>
            </form>
          </table>
        </td>
      </tr>
    </table>
    cerca.php

    codice:
    <?
    $testo = $_POST['testo'];
    
    $leggi= "SELECT * FROM prenotazioni WHERE nome LIKE '%$testo%' OR cognome LIKE '%$testo%'"
    
    Il problema è che con questa query viene ricercata una sola parola ma nel form di ricerca io inserir� nome e cognome!
    Ciò che vorrei ottenere è che:
    -Se inserisco precisamente nome e cognome (o cognome e poi nome) ritrovi solo i valori precisi
    -Se non trova niente con precisione che trovi tutte le attinenze possibili con i valori inseriti nel form

    è possibile? GRAZIE
    Ultima modifica di supersqualo; 13-08-2017 a 20:53

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Non so se ho capito...

    codice:
    $testo = explode(" ", $_POST["testo"]);
    if (count($testo) >= 2) {
      $parola1 = $testo[0];
      $parola2 = $testo[1];
    } else {
      $parola1 = $parola2 = $testo[0];
    }
    
    $leggi = "SELECT * FROM prenotazioni
        WHERE
            nome LIKE  '%$parola1%'  OR 
            nome LIKE  '%$parola2%'  OR
            cognome LIKE '%$parola1%'" OR
            cognome LIKE '%$parola2%'"
    Molto grezzo ma dovrebbe funzionare se... (sempre se ho capito bene)

  3. #3
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    Non so se ho capito...

    codice:
    $testo = explode(" ", $_POST["testo"]);
    if (count($testo) >= 2) {
      $parola1 = $testo[0];
      $parola2 = $testo[1];
    } else {
      $parola1 = $parola2 = $testo[0];
    }
    
    $leggi = "SELECT * FROM prenotazioni
        WHERE
            nome LIKE  '%$parola1%'  OR 
            nome LIKE  '%$parola2%'  OR
            cognome LIKE '%$parola1%'" OR
            cognome LIKE '%$parola2%'"
    Molto grezzo ma dovrebbe funzionare se... (sempre se ho capito bene)
    Ciao innanzitutto grazie per avermi risposto! Sapresti tradurmi un po, non sono un campione
    Specialmente questo:
    $parola1 = $parola2 = $testo[0];
    Ultima modifica di supersqualo; 13-08-2017 a 21:32

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    se hai inserito solo "il nome" o solo "il cognome" assegna lo stesso valore alle due variabili.

    potevi scrivere anche

    Codice PHP:
    $testo explode(" "$_POST["testo"]);
    if (
    count($testo) >= 2) {
      
    $parola1 $testo[0];
      
    $parola2 $testo[1];

      
    $leggi "SELECT * FROM prenotazioni
        WHERE
            nome LIKE  '%
    $parola1%'  OR 
            nome LIKE  '%
    $parola2%'  OR
            cognome LIKE '%
    $parola1%' OR
            cognome LIKE '%
    $parola2%'"

    } else {
      
    $leggi "SELECT * FROM prenotazioni
        WHERE
            nome LIKE  '%
    {$testo[0]}%'  OR 
            cognome LIKE '%
    {$testo[0]}%'"

    Puoi scrivere la stessa cosa più o meno con 1000 varianti differenti

  5. #5
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    se hai inserito solo "il nome" o solo "il cognome" assegna lo stesso valore alle due variabili.

    potevi scrivere anche

    Codice PHP:
    $testo explode(" "$_POST["testo"]);
    if (
    count($testo) >= 2) {
      
    $parola1 $testo[0];
      
    $parola2 $testo[1];

      
    $leggi "SELECT * FROM prenotazioni
        WHERE
            nome LIKE  '%
    $parola1%'  OR 
            nome LIKE  '%
    $parola2%'  OR
            cognome LIKE '%
    $parola1%' OR
            cognome LIKE '%
    $parola2%'"

    } else {
      
    $leggi "SELECT * FROM prenotazioni
        WHERE
            nome LIKE  '%
    {$testo[0]}%'  OR 
            cognome LIKE '%
    {$testo[0]}%'"

    Puoi scrivere la stessa cosa più o meno con 1000 varianti differenti

    Io vorrei fare un solo form di ricerca nel quale inserirò Nome e cognome oppure cognome e nome
    La query dovrebbe cercare esattamente i due o più termini (ipotizziamo il caso di cognomi che iniziano con DEL o DI). Se non trova nessuno con quei termini deve cercare i termini separatamente

    Non cerco nulla di speciale o meglio come faresti tu se avessi un solo form di ricerca e due campi nella tabella in cui cercare? GRAZIE
    Ultima modifica di supersqualo; 13-08-2017 a 22:14

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316

    $testo
    = explode(" ", $_POST["testo"]);
    $parola1 = $testo[0];
    $parola2 = $testo[1];

    $leggi = "SELECT * FROM prenotazioni
    WHERE
    nome LIKE '%
    $parola1%' OR
    nome LIKE '%
    $parola2%' OR
    cognome LIKE '%
    $parola1%' OR
    cognome LIKE '%
    $parola2%'"


    Questo dovrebbe andare allora...

  7. #7
    Quote Originariamente inviata da zacca94 Visualizza il messaggio

    $testo
    = explode(" ", $_POST["testo"]);
    $parola1 = $testo[0];
    $parola2 = $testo[1];

    $leggi = "SELECT * FROM prenotazioni
    WHERE
    nome LIKE '%
    $parola1%' OR
    nome LIKE '%
    $parola2%' OR
    cognome LIKE '%
    $parola1%' OR
    cognome LIKE '%
    $parola2%'"


    Questo dovrebbe andare allora...
    GRAZIE zacca94 tu dici che con questa query se scrivo nome e cognome o cognome e nome (anche di 3 parole) trova precisamente quello che cerco? ma non capisco...non funziona (ERRORE: NON ESISTE):


    index.php
    codice:
    <table border="10">
      <tr>
        <td align="center"><b>CERCA</b></td>
      </tr>
      <tr>
        <td>
          <table>
            <form method="post" action="./cerca.php">
            <tr>
              <td>Cerca:</td>
                <td width="250" align="left"><input type="text" autocomplete="off" size="70" name="ricerca"/>
              </td>
            </tr>                    
            <tr>
              <td></td>
        <td align="left"><input style="width:100px;" type="submit" value="Cerca"/>
            </tr>
            </form>
          </table>
        </td>
      </tr>
    </table>
    cerca.php
    Codice PHP:
    <!doctype html><html>
    <head>
    <meta charset="utf-8">
    <title>Ricerca</title>
    </head>
    <body>
    <? include('./config.php'); ?>

    <?
    $testo 
    explode(" "$_POST["ricerca"]);
    $parola1 $testo[0];
    $parola2 $testo[1];

    $leggi "SELECT * FROM prenotazioni
    WHERE
    nome LIKE '%
    $parola1%' OR 
    nome LIKE '%
    $parola2%' OR
    cognome LIKE '%
    $parola1%' OR
    cognome LIKE '%
    $parola2%'";

    $trovati mysql_num_rows($leggi);
    if (
    $trovati 0) { ?>

    <tr>
    <td width="242">
    <table border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
    <tr>
    </tr>
    <tr>
    <td align="center" bgcolor="#FFFFFF"><strong>Nome</strong></td>
    <td align="center" bgcolor="#FFFFFF"><strong>Cognome</strong></td>
    </tr>
    <?
    while($row mysql_fetch_array($leggi)) {
    ?>
    <tr>
    <td align="center" bgcolor="#FFFFFF"><? echo $row['nome']; ?></td>
    <td align="center" bgcolor="#FFFFFF"><? echo $row['cognome']; ?></td>
    </table>
     <p><br>
       <br>
      <?
        
    ;} 
    ;} 
     else {
        echo 
    "ERRORE: NON ESISTE.";
    }
    ?>
    </body>
    </html>
    Ultima modifica di supersqualo; 14-08-2017 a 10:36

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Scusa perdonami, ma non hai specificato fossero possibili anche 3 elementi.

    Se il cognome è "Luca De belli" per dire o "xhiaun zang fhan lin" allora non funzionerà.

    Oltretutto, questo è un omissis o un problema nel codice:
    $trovati = mysql_num_rows($leggi);

    Perchè questa riga non può funzionare

  9. #9
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    Scusa perdonami, ma non hai specificato fossero possibili anche 3 elementi.

    Se il cognome è "Luca De belli" per dire o "xhiaun zang fhan lin" allora non funzionerà.

    Oltretutto, questo è un omissis o un problema nel codice:
    $trovati = mysql_num_rows($leggi);

    Perchè questa riga non può funzionare
    Come potrei risolvere? Ho letto del fulltext ma non so come fare... alla fine dovrebbe esistere da qualche parte qualcosa di già pronto.... è una ricerca in database di nomi

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Puoi fare un esempio concreto delle query di ricerca da effettuare con eventuali records (fittizi) presenti con relativi valori di ritorno come titolo d'esempio, perchè ti assicuro che si fa fatica a comprendere ciò che vuoi, per lo meno, io sto faticando tanto a capire cosa vuoi fare.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.