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

    Codifica dei caratteri e problema query

    Ciao, nella mia web app php ho dato la possibilità di fare ricerche nel database anche per singole stringhe parziali di caratteri.

    Ad esempio la parola Casa verrebbe trovata cercando anche solo "a" o "as". Per farlo quindi nella query ho l'operatore LIKE %as%.

    Fin qua tutto bene, ma ho notato un bug quando vengono inseriti alcuni caratteri come "aa" che diventa LIKE %aa%. In quel caso nella query viene generato un carattere speciale (che poi diventa un ? a sfondo nero) al posto di %aa.

    Come posso evitare ciò? Obbligando quindi a non convertire %aa in qualcos'altro?

    Grazie!

  2. #2

  3. #3
    Si scusa, non ho scritto gli apici, ma ovviamente nel codice ci sono. il problema è che diventa così:
    Immagini allegate Immagini allegate

  4. #4

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    come generi la query?

    La stringa che contiene i caratteri incriminati viene passata tramite metodo get dalla pagina precedente, e si concatena alla query presente nella pagina.

    Mi sa che il problema è quello perchè se invece di prendere i dati dalla pagina precedente scrivo la query per intero allora funziona e i caratteri non vengono modificati. Può essere un problema del metodo get?

  6. #6

  7. #7
    Quando un utente vuole effettuare una ricerca per valori parziali, nella pagina iniziale inserisce dei dati e preme Cerca. Questa pagina genera una stringa che viene passata alla pagina successiva tramite metodo get. Questa stringa è del tipo

    cognome LIKE '%a%'

    Giunti nell'altra pagina questa stringa viene concatenata alla query del tipo:

    $sql = "SELECT c.codiceFiscale, c.nome, c.cognome, c.comuneNascita, DATE_FORMAT(c.dataNascita, '%d/%m/%Y') as dataNascita FROM cittadino c WHERE ".$stringP."";

    Diventando quindi:

    $sql = "SELECT c.codiceFiscale, c.nome, c.cognome, c.comuneNascita, DATE_FORMAT(c.dataNascita, '%d/%m/%Y') as dataNascita FROM cittadino c WHERE cognome LIKE '%a%'";



    Ultima modifica di Legolas84; 07-09-2020 a 19:15 Motivo: .

  8. #8
    Un metodo per farlo funzionare è usare una replace e sostituire tutti i simboli % dalla stringa con una codice.
    A quel punto nella pagina successiva utilizzare un'altra replace e inserire nuovamente la % al posto del codice.

    Così funziona e questo vuol dire che è proprio un problema di metodo get.

    È l'unica soluzione percorribile?

  9. #9
    Ho trovato la soluzione definitiva, che penso possa essere utile anche agli altri.... prima di passare la stringa con metodo get, la passo nella funzione di PHP urlencode.... così funziona perfettamente.

    Ciao!

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 © 2020 vBulletin Solutions, Inc. All rights reserved.