Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Ricerca in una tabella con LIKE

    Ciao ragazzi...

    Premetto che sono al mio primo script con l'uso di MySQL.
    E devo dire che fin'adesso l'accoppiata php-mysql mi sta dando grosse soddisfazioni.

    Vengo al sodo.
    Io ho nel mio database 2 tabelle: 1 in cui ho salvati dei campi, tra cui uno che conserva l'ip dell'utente che lascia un commento tramite lo script. Un'atra dove salvo gli ip bannati dai commenti.

    Ora sto realizzando il sistema per il ban dell'ip, vorrei mettere un controllo che faccia si che, se l'ip e' gia stato bannato, ferma lo script e produce un'output.

    I codici sono:
    Codice PHP:
    //seleziopne dell'ip da bannare
        
    $query "SELECT ip
                  FROM test
                  WHERE id = '
    $id'";
                  
        
    $query mysql_query($query,$db) or die ("Impossibile recuperare i dati. ".mysql_error());
        
    $row mysql_fetch_array($query);
            
        
    $b_ip $row['ip'];
        
        
    //verifica se l'ip e' gia bannato
        
    $ver_query "SELECT id FROM banned 
                      WHERE ip LIKE '%
    $b_ip%'";
        
        
    $ver_query mysql_query($ver_query,$db) or die (mysql_error());
        
    $row mysql_fetch_array($ver_query);
        
        
    $ver_id trim($row["id"]);
        echo 
    $ver_id
    L'ultimo echo lo uso tipo per "debug", per vedere che valore assume la variabile restitutita dalla query.

    Il mio problema e' che, avendo dei campi senza ip salvato, lui restituisce sempre l'id numero 3.

    Cioe' qualunque situazione gli impongo lui mi restituisce sempre l'id 3:
    id ip
    3 127.0.0.1
    Cosa ho sbagliato?

  2. #2
    non fai più presto ad inserire gli ip bannati in un file di testo, e tramite questa semplicissam funzione vedi se l'ip è presente nel file?

    Codice PHP:
    $banned file('banned.txt');
    if (!
    in_array($ip$banned)) { 

  3. #3
    Originariamente inviato da Manuelandro
    non fai più presto ad inserire gli ip bannati in un file di testo, e tramite questa semplicissam funzione vedi se l'ip è presente nel file?

    Codice PHP:
    $banned file('banned.txt');
    if (!
    in_array($ip$banned)) { 
    No apparte quello, il fatto e' che, come detto sopra, sto imparando ora MySQl e il relativo linguaggio SQL. E comunque mi troverei comunque, prima o poi, ad affrontare il problema, quindi vorrei capire perche' non va e avere padronanza anche di LIKE.

  4. #4
    Non sapete dirmi perche' non va like?

  5. #5
    Utente di HTML.it L'avatar di marco80
    Registrato dal
    May 2005
    Messaggi
    1,357
    Prova a scrivere cosi' la variabile: '%".$b_ip."%'";

    fai stampare anche la query magari e vedi cosa contiene o se manca qualcosa.

  6. #6
    Il mio problema e' che, avendo dei campi senza ip salvato, lui restituisce sempre l'id numero 3.
    Se non c'é ip basta che prima fai un test:

    codice:
    if (!$row)
       echo "non c'é ip...";

  7. #7
    E comunque non devi usare il like ma =

    Con like 10.10.10.10 é uguale a 110.10.10.10 o 10.10.10.107

  8. #8
    Utente di HTML.it L'avatar di marco80
    Registrato dal
    May 2005
    Messaggi
    1,357
    Il like si puo' usare ma diversamente. Giusto come dice margherita ma se sei certo che l'ip iniza o finisce in un certo modo puoi settarlo cosi':

    like '".$ip."%' (inizia per $ip e finisce in qualsiasi modo)
    like '%".$ip."' (finisce per $ip e inizia in qualsiasi modo)

  9. #9
    Intanto grazie a tutti e faro' un po' di prove prendendo in considerazione i vostri consigli.

    Da quanto ho capito documentandomi, se io metto %$ip% significa che ai capi dell'ip puo' esserci altro. Quindi per il mio caso dovrei levare %%.

    Comunque faro' delle prove e vio faro sapere.

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.