Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727

    motore di ricerca che mi scrive le ricerche nulle...

    scusate il titolo ostrogoto ma adesso provo a spiegarmi meglio: con php ho fatto un piccolo motore di ricerca all'interno del mio db-->

    // il termine che cerco è la variabile PAROLA
    while (list(,$parola) = each ($keys))
    { $parola = trim($parola);
    $parola = strtolower($parola);
    if ($parola != "")
    $query .= "nome LIKE '%$parola%' OR categoria LIKE '%$parola%' OR sottocategoria LIKE '%$parola%' OR descrizione LIKE '%$parola%' ";
    }
    $query .= "0";
    $query = "SELECT * FROM tabella WHERE " . $query;
    //e poi qui estraggo i dati che ho cercato

    fin qui tutto bene
    adesso avrei l'esigenza di avere un elenco delle ricerche effettuate nel db il cui risultato sia stato nullo, esempio: cerco nel db la parola PIPPO, ma nel db non c'è e quindi il mio script memorizza PIPPO in un file di testo
    Allo scopo ho iniziato a testare questo codice:

    $testo = "$parola\n";
    $identificatore = fopen("ricerche_nulle.txt", "a");
    // Scrivo i dati nel file con la condizione IF
    if ($query != "")
    fwrite($identificatore, $testo);
    // Chiudo il file
    fclose($identificatore);

    ma non scrive nulla.............

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mmh.. però mi pare che $query non è mai una stringa vuota... per il controllo dovresti secondo me fare la query e leggere il numero di righe restituite - mysql_num_rows() - e quindi scrivere il tuo "log" se tale valore è 0

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727
    oh grazie della dritta
    ma in effetti un altro mio problema è DOVE mettere il secondo blocco di codice
    dopo questa riga-->
    $query = "SELECT * FROM tabella WHERE " . $query;
    o prima?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    DOPO la query leggi il valore della funzione che ho detto, quindi più avanti fai l'IF con il controllo che ho indicato (==0 che vuol dire che nessun record risponde al criterio)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727
    allora... innanzi tutto grazie infinite x l'aiuto xchè ormai sono nel marasma come fantozzi..
    poi volevo chiederti: visto che dopo la query ho GIA' x altre esigenze un mysql_num_rows
    posso sfruttarlo, no? ecco come procede il mio codice dopo la query

    $query = "SELECT * FROM tabella WHERE " . $query;
    $records_media = mysql_query($query);
    $num_records = mysql_num_rows($records_media);
    $count = $num_records;
    while($count > 0){
    print '<tr>';
    for ($n=0; $n<$colonne; $n++){
    if ($media = mysql_fetch_array($records_media)){
    $count--;
    ?>

    e poi qui costruisco una tabella html con i risultati della query dentro
    Posso usare $records_media vero? metto if davanti ecc ecc???
    (te lo chiedo ma ho già provato tutto il blocco e non va... ma questo lo vediamo dopo)

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    prova a cambiare:

    Codice PHP:
    if ($query != "")
    fwrite($identificatore$testo); 
    con:
    Codice PHP:
    if (!$num_recordsfwrite($identificatore$testo); 

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727
    oh ma sai che ci siamo quasi?
    ti dico cosa succede adesso:
    - se cerco un termine che c'è nel DB, nel file di testo non viene scritto nulla
    - se cerco un termine che NON c'è nel DB, nel file di testo viene scritto 1 byte... in pratica fa un "a capo"... non scrive il termine che non c'è... però è un bel segno di vita, eh??
    PEr completezza incollo qui tutto il codice:

    $query = "";
    reset ($keys);
    while (list(,$parola) = each ($keys))
    { $parola = trim($parola);
    $parola = strtolower($parola);

    if ($parola != "")
    $query .= "nome LIKE '%$parola%' ";
    }

    $query .= "0";

    $query = "SELECT * FROM tabella WHERE " . $query;

    $records_media = mysql_query($query);
    $num_records = mysql_num_rows($records_media);
    $count = $num_records;

    //qui in mezzo il codice che scrive la tabella e poi....

    $testo = "$parola\n";
    $identificatore = fopen("domande_nonsoddisfatte.txt", "a");
    // Scrivo i dati nel file
    if (!$num_records) fwrite($identificatore, $testo);
    // Chiudo il file
    fclose($identificatore);
    ?>

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    il problema è che $parola è assegnata in un ciclo while tarmite each, che esce dal ciclo assegnandole un valore di false (in pratica al primo passaggio vale qualcosa, al secondo se c'è pure e così via fino all'ultimo in cui assegna "false" ed esce), tra l'altro vedo che potresti avere anche più termini, non uno solo, cambia:

    Codice PHP:
    $testo "$parola\n"
    con:
    Codice PHP:
    $testo implode(', ',$keys)."\n"
    che in pratica memorizza nel tuo "log" la lista delle parole chiave separandole con una virgola

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727
    ragazzi FUNZIONAAAAAAAAAAAAAAAAAAAA
    oh sono troppo contento
    caro eiyen ti devo almeno una birra

    però adesso mi studio bene la tua spiegazione del ciclo while.... che non ho ancora capito

    mitico
    ciao

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    con ...

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.