Visualizzazione risultati 1 fino 9 di 9
Like Tree1Likes
  • 1 Post By karl94

Discussione: Apostrofi

  1. #1
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Question Apostrofi

    Salve a tutti, ho un problema per inspiegabile.
    Ho fatto un piccolo programma con l'inserimento e ricerca di nomi in un archivio.
    Stranamente da oggi non accetta più e non trova neppure i cognomi con l'apostrofo (es. D'ANTONIO).
    Quindi benchè il nominativo sia inserito in archivio non lo trova e non mi inserisce neppure un nuovo nome come D'AMARIO in archivio. Non capisco questo cambiamento di comportamento e soprattutto non ne trovo la soluzione.

    Qualcuno può darmi qualche indicazione ?
    Questa è la riga di codice usate e che andava bene, anzi va ancora bene a parte il caso citato, per la ricerca.

    Codice PHP:
    $sql = "SELECT * FROM SalaStudio WHERE cognome LIKE '$_POST[key]%' OR cognome LIKE '$_POST[key]%' ORDER BY cognome ASC";
    $res = mysql_query($sql);
    Grazie di ogni aiuto

  2. #2
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Devi utilizzare mysql_real_escape_string
    Codice PHP:
    $sql = "SELECT * FROM SalaStudio WHERE cognome LIKE '".mysql_real_escape_string($_POST['key'])."%' OR cognome LIKE '".mysql_real_escape_string($_POST['key'])."%' ORDER BY cognome ASC";
    $res = mysql_query($sql);
    Apprezzi l'aiuto? Offrimi un caffè!

  3. #3
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    E aggiungo che non è solamente un malfunzionamento, è un serio problema di sicurezza che permette ad un eventuale malintenzionato di manipolare la query a piacimento, riuscendo potenzialmente ad eseguire qualsiasi operazione sul database in oggetto.
    Per maggiori dettagli cerca SQL injection sul tuo motore di ricerca preferito.
    miki92 likes this.

  4. #4
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Grazie a entrambi. Grazie tantissimo, anche per la spiegazione sulla sicurezza.
    Ho risolto la prima parte del problema.
    Adesso devo risolvere la seconda parte, cioè salvare i dati con l'apostrofo.
    La insert che utilizzo è :
    Codice PHP:
    $query = "INSERT INTO SalaStudio (cognome, nome, ecc...) VALUES ('$cognome', '$nome', ecc...)";
    if (
    mysql_query($query, $db))

  5. #5
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    La procedura è la medesima, utilizza la funzione indicata da Miki92. Assicurati inoltre di usarla in ogni query che include dati provenienti dall'esterno.

  6. #6
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Aggiungo solo che se le variabili $nome, $cognome, ecc sono già filtrate da quella funzione (o da altre funzioni simili) nella query puoi utilizzare le variabili tra parentesi graffe:
    Codice PHP:
    $query = "INSERT INTO SalaStudio (cognome, nome, ecc...) VALUES ('{$cognome}', '{$nome}', ecc...)";
    Apprezzi l'aiuto? Offrimi un caffè!

  7. #7
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Grazie, il dato mi viene salvato, ma con il codice ascii.
    Cioè D'ANGELO nel database viene (D'ANGELO) e non va bene.

    Eppure quando carico il dato via POST, uso htmlspecialchars per importare anche i caratteri speciali
    Codice PHP:
    $cognome= htmlspecialchars ($_POST['cognome'], ENT_QUOTES);
    Come dovrei fare ?

  8. #8
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Forse è il forum che ha modificato il tuo post perchè a vedersi così sembra tutto normale.

    Premettendo che gli apostrofi vengono salvati con un backslash che li precede puoi utilizzare stripslashes() per eliminarli ma se utilizzi la funzione mysql_real_escape_string verranno sempre aggiunti.
    Apprezzi l'aiuto? Offrimi un caffè!

  9. #9
    portier non è connesso Utente
    Data registrazione
    07-06-2014
    Messaggi
    127

    Predefinito

    Grazie del tuo preziossimo aiuto.
    Ho cambiato semplicemente la stringa d'importazione così:
    Codice PHP:
    $cognome=mysql_real_escape_string($_REQUEST["cognome"]);
    in questo modo mi salva correttamente il cognome anche con l'apostrofo.

    Grazie ancora per la disponibilità.

Regole di scrittura

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