Visualizzazione risultati 1 fino 9 di 9

Discussione: Dati database senza spazi [mysql] [php]

  1. #1
    ysoolder non è connesso Utente giovane
    Data registrazione
    06-04-2013
    Messaggi
    97

    Question Dati database senza spazi [mysql] [php]

    Buongiorno. Avrei la necessità di reperire dei numeri di targa dal database, il problema è che questi numeri di targa sono stati inseriti sia con spazi che senza.
    Per esempio, se nel database ho la stessa targa scritta due volte così:


    - AA 000 BB
    - AA000BB

    nel campo di ricerca, se scrivo: AA 000 BB, il risultato sarà solo la targa con gli spazi e non anche quella senza spazi, anche se uguale. il codice è il seguente:


    Codice PHP:
    $targa = $_POST['targa'];

    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa LIKE '$targa' ");

    if(
    mysqli_num_rows($seltarga) == 0) {
    echo
    "Errore";
    }else{
    echo
    "targa trovata";
    }
    Ho provato pure con i seguenti SELECT:

    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa LIKE '&$targa&' ");
    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa ='&$targa&' ");
    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa = '".trim($targa).'" ' ");
    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa = '".str_replace(' ', '', $targa).'" ' ");
    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa = '".trim($targa).'" ' OR targa = '$targa' ");
    ma niente da fare. Avete qualche consiglio in merito? Grazie in anticipo e buon ferragosto
    Ultima modifica di ysoolder : 13-08-2021 alle ore 08.52.37

  2. #2
    ysoolder non è connesso Utente giovane
    Data registrazione
    06-04-2013
    Messaggi
    97

    Predefinito

    Citazione Originalmente inviato da ysoolder Visualizza messaggio
    Buongiorno. Avrei la necessità di reperire dei numeri di targa dal database, il problema è che questi numeri di targa sono stati inseriti sia con spazi che senza.
    Per esempio, se nel database ho la stessa targa scritta due volte così:


    - AA 000 BB
    - AA000BB

    nel campo di ricerca, se scrivo: AA 000 BB, il risultato sarà solo la targa con gli spazi e non anche quella senza spazi, anche se uguale. il codice è il seguente:


    Codice PHP:
    $targa = $_POST['targa'];

    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa LIKE '$targa' ");

    if(
    mysqli_num_rows($seltarga) == 0) {
    echo
    "Errore";
    }else{
    echo
    "targa trovata";
    }
    Ho provato pure con i seguenti SELECT:

    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa LIKE '&$targa&' ");
    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa ='&$targa&' ");
    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa = '".trim($targa).'" ' ");
    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa = '".str_replace(' ', '', $targa).'" ' ");
    Codice PHP:
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa = '".trim($targa).'" ' OR targa = '$targa' ");
    ma niente da fare. Avete qualche consiglio in merito? Grazie in anticipo e buon ferragosto
    EDIT:

    POTREI USARE UN PREG_MATCH CHE AGGIUNGE UNO SPAZIO TRA LETTERE E NUMERI? Così, quando cerco la targa senza aggiungere spazi tra numeri e lettere, lo farà in automatico.

  3. #3
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    3,997

    Predefinito

    Salve,
    va bene anche di rimuovere gli spazi, ma nelle prove fatte con trim() e str_replace() c'è un errore di sintassi e quindi non funziona per quello.

    Ad ogni modo, trim() da solo elimina soltanto eventuali sapzi a inizio e fine della stringa.

    Così è impostato correttamente:
    Codice PHP:
    $no_space_targa = str_replace(' ', '', trim($targa));
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa = '$no_space_targa'");
    in questo modo, elimina sia gli spazi agli estrmi della stringa che quelli intermedi.

    Cordialoi saluti.
    Ultima modifica di GraphOGLRisorse : 13-08-2021 alle ore 12.47.43

  4. #4
    ysoolder non è connesso Utente giovane
    Data registrazione
    06-04-2013
    Messaggi
    97

    Predefinito

    Citazione Originalmente inviato da GraphOGLRisorse Visualizza messaggio
    Salve,
    va bene anche di rimuovere gli spazi, ma nelle prove fatte con trim() e str_replace() c'è un errore di sintassi e quindi non funziona per quello.

    Ad ogni modo, trim() da solo elimina soltanto eventuali sapzi a inizio e fine della stringa.

    Così è impostato correttamente:
    Codice PHP:
    $no_space_targa = str_replace(' ', '', trim($targa));
    $seltarga = mysqli_query($conn,"SELECT targa FROM utenti WHERE targa = '$no_space_targa'");
    in questo modo, elimina sia gli spazi agli estrmi della stringa che quelli intermedi.

    Cordialoi saluti.
    Ciao e grazie per la risposta. Nulla da fare purtroppo, non trova nessuna targa. Il problema non è eliminare gli spazi della targa che ho scritto, ma di quella che viene presa al database per farla coincidere con quella che ho scritto. Le targhe nel database stanno con gli spazi, il mio problema è farla coincidere con la targa che scrivo io senza spazi.
    Ultima modifica di ysoolder : 18-08-2021 alle ore 09.26.56

  5. #5
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Se il carattere problematico è lo spazio assicurati di modificare il risultato della query e i dati via post.
    Codice PHP:
    $prelevato_dal_database = str_replace(' ', '', 'AA 00 99');
    $richiesta_post=str_replace(' ', '', $_POST['targa'])
    if(
    $prelevato_dal_database === $richiesta_post)
    echo
    'identici';
    else
    eco 'non identici';
    Se invece vuole cercare una stringa con spazi dentro al database non è possibile poiché è sconosciuta la posizione e i caratteri coinvolti (potrebbe essere A A0099, AA 00 99 il che richiede molte combinazioni). Meglio modificare a mano ogni record anche se si trattano miliardi di targhe o se lo tiene così come sta anche se non necessariamente le funziona.
    Comunque per mysql il carattere % zero o più occorrenze mentre _ una occorrenza. 't e st o' %st% (recupera qualsiasi cosa delimitato da st).
    Ultima modifica di darbula : 18-08-2021 alle ore 10.48.13

  6. #6
    ysoolder non è connesso Utente giovane
    Data registrazione
    06-04-2013
    Messaggi
    97

    Predefinito

    Perfetto, però il risultato non cambia.
    Quando inserisco str_replace(' ', '', 'AA 00 99'), la ricerca nel database viene effettuata con AA0099, ma nel database la targa è AA 00 99 e quindi non la trova.

    Ho provato pure con %AA0099% ma niente da fare. Ho fatto esattamente cosi:

    Codice PHP:
    $searctarga = str_replace(' ', '', $_POST['searctarga']);

    $seltarga = mysqli_query($conn,"SELECT targa FROM schede WHERE targa = '$searctarga' ");
    $row = mysqli_fetch_assoc($seltarga);

    $targa = str_replace(' ', '', $row['targa']);

    echo
    "SCRITTA: ".$searctarga."<P>";
    echo
    "TROVATA: ".$targa."<P>";

  7. #7
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Mi scusi non trovo il modo corretto di comunicare con lei, se nel database è memorizzato con AA 00 99 potrà effettuare la ricerca %00% (delimitato da 00) tradotto in SQL
    Codice:
    SELECT targa FROM utenti WHERE targa LIKE '%00%';
    , ritorna zero o uno o più risultati. Come vede c'è un problema di progettazione strutturale da parte sua, può essere cambiata se converte quella stringa senza spazi e provvede alla memorizzazione di tale testo. Vuole conoscere la sintassi SQL per modificare ogni riga nel Database? Oppure vuole modificarla manualmente?
    Ultima modifica di darbula : 18-08-2021 alle ore 13.21.11

  8. #8
    ysoolder non è connesso Utente giovane
    Data registrazione
    06-04-2013
    Messaggi
    97

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Mi scusi non trovo il modo corretto di comunicare con lei, se nel database è memorizzato con AA 00 99 potrà effettuare la ricerca %00% (delimitato da 00) tradotto in SQL
    Codice:
    SELECT targa FROM utenti WHERE targa LIKE '%00%';
    , ritorna zero o uno o più risultati. Come vede c'è un problema di progettazione strutturale da parte sua, può essere cambiata se converte quella stringa senza spazi e provvede alla memorizzazione di tale testo. Vuole conoscere la sintassi SQL per modificare ogni riga nel Database? Oppure vuole modificarla manualmente?
    Purtroppo ho ripreso il PHP da poco e le chiedo pazienza nel potersi spiegare. Il mio problema è che nel database ho le targhe auto delimitati da spazi (ES: AA 000 BB, BB 111 CC, ecc..) e vorrei che la targa scritta da me nell'input SENZA SPAZI, (AA000BB, BB111CC, ecc..) venisse trovata nel database e stampata con un echo.

    Se modifico il risultato della query non ha molto senso perchè la ricerca nel database con str_replace o %$targa% non viene effettuata se non scrivendo la targa ESATTA nell'input.

    La ringrazio per l'impegno e l'aiuto

  9. #9
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Ciò che chiede non può essere fatto, o almeno ci vorrebbe più di una combinazione e non ha senso tanto vale modificare il database per essere senza spazi (da valore originale a nuovo valore originale senza spazi).
    Solo il database conosce la targa esatta (compresa la sequenza spazi), l'input è una "targa presunta".
    Glielo mostro a video
    Input:
    AA0099
    A A0099
    A A 0099
    A A 0 099
    AA 00 99
    1) (Finché non si completa la combinazione di 11 caratteri)
    2) Poi nel database potrebbe avere gli spazi a intervalli irregolari ad es. A A 00 99 (vista la sua poca esperienza)
    Il modo corretto è modificare il valore originale nel nuovo valore originale senza spazi nella memorizzazione del database.
    Ma temporaneamente se dentro il database è sicuro che gli spazi sono dopo ogni due caratteri (a intervallo regolare), inizialmente
    Codice PHP:
    $input = str_replace(' ', '', $targa);
    //prima query senza spazi
    //seconda query inserendo uno spazio ogni due caratteri // chunk_split($input, 2, ' ');
    Il concetto nel nuovo valore senza spazi, sarà sempre la tua scelta, indipendentemente dal codice toppa che ti ho mostrato.
    Ultima modifica di darbula : 19-08-2021 alle ore 13.39.41

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •