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

    preg_match solo testo e numeri

    Ciao a tutti, ho un input in cui posso inserire dei valori per una ricerca.

    Vorrei effettuare la ricerca sul database solo se, vengono passate stringhe testuali e/0 numeriche

    Codice PHP:
    <?php
    $valore_cercato
    =$_POST['valore_cercato'];

    if(
    preg_match("/[a-zA-Z0-9]/"$valore_cercato)){
        print 
    "<h1>test superato -> stringa: $valore_cercato</h1>";
        
    //query...
    }
    else{
        print 
    "<h1>test NON superato -> stringa: $valore_cercato</h1>";
    }
    ?>
    se però cerco nell'input di ricerca scrivo " l'apostrofo ", il test viene superato.

    Praticamente vorrei evitare di eseguire la ricerca se vengono postati apici, doppi apici, maggiore, minore, slash, backslash e quando altro

    Dove ho sbagliato ?!
    aquatimer2000

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Il problema è che non gli dici che tutta la stringa deve contenere lettere e numeri, ma solo che "devono esserci lettere e/o numeri all'interno della stringa", se scrivi invece così

    if(preg_match("/^[a-zA-Z0-9]$/", $valore_cercato))

    gli stai dicedo che devono esserci lettere e/o numeri dall'inizio (^) alla fine ($) e così si comporta come vorresti tu.

  3. #3
    Grazie Alhazred !

    In linea di massima in questo modo, sono anche abbastanza protetto da SQL Injection , giusto ?
    aquatimer2000

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sì, per il campo su cui fai questo controllo sì.

  5. #5
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Il problema è che non gli dici che tutta la stringa deve contenere lettere e numeri, ma solo che "devono esserci lettere e/o numeri all'interno della stringa", se scrivi invece così

    if(preg_match("/^[a-zA-Z0-9]$/", $valore_cercato))

    gli stai dicedo che devono esserci lettere e/o numeri dall'inizio (^) alla fine ($) e così si comporta come vorresti tu.
    Ops scusa, ho provato adesso la soluzione e se posto "Ciao 1" non viene eseguita ricerca, non entro dentro l' IF
    aquatimer2000

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Perché c'è uno spazio, lo spazio non è nel range [a-zA-Z0-9], se vuoi permettere anche lo spazio allora devi usare [a-zA-Z0-9\s]

  7. #7
    Questo è il codice.. non va, mi ritrovo sempre dentro else

    Codice PHP:

    <?php
    $valore_cercato 
    $_POST['valore_cercato'];

    if(
    preg_match("/^[a-zA-Z0-9\s]$/"$valore_cercato)){
        print 
    "<h1>OK : $valore_cercato</h1>";
    }
    else{
        print 
    "<h1>KO: $valore_cercato</h1>";
    }
    ?>
    Ultima modifica di aquatimer2000; 23-02-2016 a 14:56
    aquatimer2000

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Allora così
    [a-zA-Z0-9\s]+

    Comunque se vai su regex101, scrivendo l'espressione regolare ti spiega cosa vuol dire e puoi capire cosa manca perché risponda alle tue esigenze.

  9. #9
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Allora così
    Comunque se vai su regex101, .....
    Ok così funziona, e ottimo anche il sito, che mi serve per poterne scrivere altre con altre esigenze !!
    Intanto grazie, poi magari se ho bisogno, scrivo di nuovo !
    Merci


    Codice PHP:
    <?php
    $valore_cercato 
    $_POST['valore_cercato'];

    if(
    preg_match("/^[a-zA-Z0-9\s]+$/"$valore_cercato)){
        print 
    "<h1>OK : $valore_cercato</h1>";
    }
    else{
        print 
    "<h1>KO: $valore_cercato</h1>";
    }
    ?>
    aquatimer2000

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.