Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    81

    verificare la presenza di una porzione di stringa

    Ciao a tutti, mi trovo nei guai.

    Allora, ho un form dove l'utente va inserire un codice prodotto. Questo codice prodotto può essere per esempio: "wer6GX120ui" oppure "jdhkk4GX120ugh". Io dovrei verificare se c'è nel codice la porzione di stringa "GX120".

    C'è da dire poi che avrò alcuni gruppi di codice da verificare

    Vediamo in codice:

    Codice PHP:
    //questa è la input
    <input type="text" name="matricola" id="_matricola" />

    //questo è uno dei gruppi di codice
    $cod1 = array('GX120''GC135');
    //ecc

    //questo è il filtro
    if(preg_match('/'.$_POST['matricola'].'\b/i',implode(",",$cod1))){
       
    //codice trovato
    } else {
      
    //codice non trovato

    Se inserisco il codice "pulito", mi trova l'occorrenza altrimenti se cerco una cosa come "sdjhsdGX120", non trova nulla.
    Dov'è l'errore??

    Grazie

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    81
    Avevo guardato anche quella funzione, il problema è che non so come attravarsare l'array in semplicità...

  4. #4
    Originariamente inviato da ilsangue
    Avevo guardato anche quella funzione, il problema è che non so come attravarsare l'array in semplicità...
    in che senso scusa????

    un array lo "attraversi" con un foreach(), no??

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    81
    Nel senso che ho più di un array! Se non trovo il valore in nessuno degli array, ho un'azione di default.

  6. #6
    molto dipende da dove li prendi questi array...

    però insomma ...il concetto è questo:
    1. cicli l'array (o gli array) con foreach
    2. All'interno del ciclo usi strpos per vedere se qualcuni dei valori dell'array è contenuto in matricola
    3. se sì fai quello che devi
    se no fai l'azione di default

  7. #7
    Potrebbe esserti utile anche la funzione nativa del php :
    Codice PHP:
    in_array() 
    http://it1.php.net/manual/en/function.in-array.php

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    81
    Originariamente inviato da philbert
    molto dipende da dove li prendi questi array...

    però insomma ...il concetto è questo:
    1. cicli l'array (o gli array) con foreach
    2. All'interno del ciclo usi strpos per vedere se qualcuni dei valori dell'array è contenuto in matricola
    3. se sì fai quello che devi
    se no fai l'azione di default
    Ho trovato una soluzione simile, con le parole magiche "return false".

    Posto il codice com'è all'incirca:

    Codice PHP:
    //ogni mappa motore dovrà essere filtrata in base alla matricola
                
    $mods1 = array('GX120''GC135');
                
    $mods2 = array('cod3''cod4');
                
    //ecc
                
                //primo ciclo
                
    foreach($mods1 AS $mod1):
                    
    $pos strpos($hidden_field['matricola'], $mod1);
                    
                    if (
    $pos !== false) {
                        
    $pagename 'motore_1.html';
                        return 
    false;
                    }
                endforeach;
                
                
    //secondo ciclo
                
    foreach($mods2 AS $mod2):
                    
    $pos strpos($hidden_field['matricola'], $mod2);
                    
                    if (
    $pos !== false) {
                        
    $pagename 'motore_2.html';
                        return 
    false;
                    }
                endforeach;
                
                            
    //non trova nessuna occorrenza
                
    $pagename 'matricola_irreperibile.html'
    Per funzionare funziona!

    C'è un metodo più elegante?

    @Avenger1713 ero partito proprio con uno switch basato sulla funzione in_array(); ma la matricola che mi va inserire l'utente è sporca, tranne che per una porzione che è la matrice di n matricole. Il problema stava nel trovare una funzione per estrarre la matrice e confrontarla nel mio array...

  9. #9
    Originariamente inviato da ilsangue

    Per funzionare funziona!

    C'è un metodo più elegante?
    prima di pensare all'eleganza penserei piuttosto a scrivere codice corretto.

    innanzitutto per uscire da un ciclo si usa
    Codice PHP:
    break; 
    e non
    Codice PHP:
    return false
    perché è semanticamente non è corretto e se in questo caso funziona in altri casi potrebbe non funzionare come ti aspetti.

    Seconda cosa l'inizializzazione di default delle variabili va fatta all'inizio e non alla fiine del flusso.. quindi
    Codice PHP:
    //non trova nessuna occorrenza
    $pagename 'matricola_irreperibile.html'
    va messa prima dei cicli e non alla fine altrimenti il risultato sarà sempre che non trovi nessuna occorrenza...

    poi se ti piace quella sintassi alternativa del foreach..de gustibus... ma in ambito produttivo non l'ho mai vista usare..cioè voglio dire scrivere 11 caratteri anzichè 1...ma siamo matti??

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    81
    Avevo usato break; in un primo momento però non andava.

    Ora va tutto a meraviglia!

    Grazie delle dritte, essendo un autodidatta per me è facile perdermi in sciocchezze.

    Solo per crescita personale: se avessi voluto fare una cosa più "elegante"?


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.