Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Impossibile inserire stringa con apici nel database

    Quando inserisco un testo nel database che contiene ' lo script va in tilt. Ho corretto nel seguente modo:

    Codice PHP:
        //Controllo dati
        
    if(isset($_POST['name']) and $_POST['name'] != ""){//<- controllo il nome
            
    $nome strip_tags($_POST['name']);
            
    $nome=str_replace("'","''",$nome);
        }
        elseif(isset(
    $_POST['name'])){
            
    $error[] = "Nome mancante.";
        }
        if(isset(
    $_POST['email']) and filter_var $_POST['email'], FILTER_VALIDATE_EMAIL )){//<- controlla se la mail è presente e se è in un formato valido
            
    $email $_POST['email'];
        }
        elseif(isset(
    $_POST['email'])){
            
    $error[] = "Email mancante o non valida.";
        }
        if(isset(
    $_POST['message']) and $_POST['message'] != ""){//<- controllo il messaggio
            
    $messaggio strip_tags($_POST['message']);
            
    $messaggio=str_replace("'","''",$messaggio);  
        }
        elseif(isset(
    $_POST['message'])){
            
    $error[] = "Inserire un messaggio.";
        } 

    ma ora ho paura di avere altre sorprese per cui vi chiedo se sapete come riscrivere decentemente il codice sopra?



    grazie
    Più pratica in futuro...

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    addslashes e stripslashes sono i tuoi amici.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    * la tua rovina

    vi chiedo se sapete come riscrivere decentemente il codice sopra?
    Prepared statements, cosa sono? http://php.net/manual/en/pdo.prepared-statements.php

  4. #4
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    * la tua rovina


    Prepared statements, cosa sono? http://php.net/manual/en/pdo.prepared-statements.php
    Ho capito il suggerimento di badaze ma non il tuo.
    Più pratica in futuro...

  5. #5
    Quote Originariamente inviata da badaze Visualizza il messaggio
    addslashes e stripslashes sono i tuoi amici.
    Stavo riflettendo: non è meglio usare str_replace? Con addslashes e stripslashes sono costretto ad usare 2 istruzioni, prima quando inserisco nel database e poi quando leggo.
    ciao
    Più pratica in futuro...

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Stavo riflettendo: non è meglio usare str_replace? Con addslashes e stripslashes sono costretto ad usare 2 istruzioni, prima quando inserisco nel database e poi quando leggo.
    ciao
    Perché con str_replace non faresti l'operazione inversa quando leggi i dati ? A questo punto ti ritroverai con una marea di apici se aggiorni i dati più volte rimpiazzando ogni apice con due.

    PS : addslashes prende in conto altri caratteri non solo l'apice.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Quote Originariamente inviata da badaze Visualizza il messaggio
    addslashes e stripslashes sono i tuoi amici.
    se uso questo non funziona:

    Codice PHP:
    if(isset($_POST['message']) and $_POST['message'] != ""){//<- controllo il messaggio
            
    $messaggio strip_tags($_POST['message']);
            
    $messaggio addslashes($messaggio);
            
    //$messaggio=str_replace("'","''",$messaggio);  
        


    se uso questo neppure:

    Codice PHP:
    if(isset($_POST['message']) and $_POST['message'] != ""){//<- controllo il messaggio
            
    $messaggio strip_tags($_POST['message']);
            
    $messaggio=str_replace("'","''",$messaggio);
            
    $messaggio=str_replace('\\',"\\\\",$messaggio); 
        } 

    come faccio a scrivere la "\" e chissà cos'altro?
    Più pratica in futuro...

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Che cosa non funziona ? Dacci un esempio.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Che cosa non funziona ? Dacci un esempio.
    Se nel form scrivo questo:

    \

    ovvero una semplice backslash e premo su invio la query non va a buon fine e vedo la solita pagina bianca.

    Il problema è qui:

    Codice PHP:
    $messaggio=str_replace('\\',"\\\\",$messaggio); 

    oppure qui:

    Codice PHP:
    $messaggio addslashes($messaggio); 

    Per risolvere credo bisogni sostituire ogni backslash con una doppia backslace. Sono problemini che un programmatore del vostro livello ha già affrontato e risolto a suo tempo.
    Ultima modifica di giannino1995; 16-05-2016 a 14:01
    Più pratica in futuro...

  10. #10
    Altri problemi dello script:
    il simbolo < non viene scritto mentre il > si;
    e chissà quali altri...
    Più pratica in futuro...

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.