Domanda

Sono abbastanza frustrato. Voglio essere in grado di inserire nel mio database i nomi con virgolette singole, ad esempio O'Connor.

Quindi, quando inserisco nel DB, lo faccio:

 $lname = mysql_real_escape_string(

Sono abbastanza frustrato. Voglio essere in grado di inserire nel mio database i nomi con virgolette singole, ad esempio O'Connor.

Quindi, quando inserisco nel DB, lo faccio:

 $lname = stripslashes($r["lname"]);

E poi inserisco $ lname nel DB.

Quando si trova nel DB, appare come O \ 'Connor.

Quindi, se dovessi ricordare quel cognome nella mia applicazione web, dovrò usare:

 $search = mysql_real_escape_string(

Sono abbastanza frustrato. Voglio essere in grado di inserire nel mio database i nomi con virgolette singole, ad esempio O'Connor.

Quindi, quando inserisco nel DB, lo faccio:

 $lname = mysql_real_escape_string(

Sono abbastanza frustrato. Voglio essere in grado di inserire nel mio database i nomi con virgolette singole, ad esempio O'Connor.

Quindi, quando inserisco nel DB, lo faccio:

 $lname = stripslashes($r["lname"]);

E poi inserisco $ lname nel DB.

Quando si trova nel DB, appare come O \ 'Connor.

Quindi, se dovessi ricordare quel cognome nella mia applicazione web, dovrò usare:

 ; Magic quotes
 ;

 ; Magic quotes for incoming GET/POST/Cookie data.
 magic_quotes_gpc = On

 ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
 magic_quotes_runtime = Off

 ; Use Sybase-style magic quotes (escape ' with '' instead of \').
 magic_quotes_sybase = Off

Tutto sembra funzionare bene. Tuttavia, ho una funzione di ricerca che cercherà i cognomi e visualizzerà i risultati. Quando cerco, devo cercare O \ 'Connor per ottenere qualsiasi risultato.

Vedete, dopo che ho cercato, la casella di testo memorizza automaticamente il valore di ciò che è stato appena cercato (usando le sessioni). Quindi il mio codice è questo:

<*>

Come ho detto prima, quando cerco, devo usare " O \ 'Connor " ;, e poi dopo aver cercato, il valore nella casella di testo diventa " O \\\\' Connor "

È stato frustrante tentare di capirlo. Qualcuno sa cosa sto facendo di sbagliato? Grazie!

EDIT:

Ecco il mio file php5.ini, per quanto riguarda le citazioni magiche:

<*>

Tuttavia, il mio sito è ospitato su GoDaddy e non ho i permessi per modificare il file :(

POST['lname']);

E poi inserisco $ lname nel DB.

Quando si trova nel DB, appare come O \ 'Connor.

Quindi, se dovessi ricordare quel cognome nella mia applicazione web, dovrò usare:

<*>

Tutto sembra funzionare bene. Tuttavia, ho una funzione di ricerca che cercherà i cognomi e visualizzerà i risultati. Quando cerco, devo cercare O \ 'Connor per ottenere qualsiasi risultato.

Vedete, dopo che ho cercato, la casella di testo memorizza automaticamente il valore di ciò che è stato appena cercato (usando le sessioni). Quindi il mio codice è questo:

<*>

Come ho detto prima, quando cerco, devo usare " O \ 'Connor " ;, e poi dopo aver cercato, il valore nella casella di testo diventa " O \\\\' Connor "

È stato frustrante tentare di capirlo. Qualcuno sa cosa sto facendo di sbagliato? Grazie!

EDIT:

Ecco il mio file php5.ini, per quanto riguarda le citazioni magiche:

<*>

Tuttavia, il mio sito è ospitato su GoDaddy e non ho i permessi per modificare il file :(

GET['search']);

Sono abbastanza frustrato. Voglio essere in grado di inserire nel mio database i nomi con virgolette singole, ad esempio O'Connor.

Quindi, quando inserisco nel DB, lo faccio:

 $lname = mysql_real_escape_string(

Sono abbastanza frustrato. Voglio essere in grado di inserire nel mio database i nomi con virgolette singole, ad esempio O'Connor.

Quindi, quando inserisco nel DB, lo faccio:

 $lname = stripslashes($r["lname"]);

E poi inserisco $ lname nel DB.

Quando si trova nel DB, appare come O \ 'Connor.

Quindi, se dovessi ricordare quel cognome nella mia applicazione web, dovrò usare:

<*>

Tutto sembra funzionare bene. Tuttavia, ho una funzione di ricerca che cercherà i cognomi e visualizzerà i risultati. Quando cerco, devo cercare O \ 'Connor per ottenere qualsiasi risultato.

Vedete, dopo che ho cercato, la casella di testo memorizza automaticamente il valore di ciò che è stato appena cercato (usando le sessioni). Quindi il mio codice è questo:

<*>

Come ho detto prima, quando cerco, devo usare " O \ 'Connor " ;, e poi dopo aver cercato, il valore nella casella di testo diventa " O \\\\' Connor "

È stato frustrante tentare di capirlo. Qualcuno sa cosa sto facendo di sbagliato? Grazie!

EDIT:

Ecco il mio file php5.ini, per quanto riguarda le citazioni magiche:

<*>

Tuttavia, il mio sito è ospitato su GoDaddy e non ho i permessi per modificare il file :(

POST['lname']);

E poi inserisco $ lname nel DB.

Quando si trova nel DB, appare come O \ 'Connor.

Quindi, se dovessi ricordare quel cognome nella mia applicazione web, dovrò usare:

<*>

Tutto sembra funzionare bene. Tuttavia, ho una funzione di ricerca che cercherà i cognomi e visualizzerà i risultati. Quando cerco, devo cercare O \ 'Connor per ottenere qualsiasi risultato.

Vedete, dopo che ho cercato, la casella di testo memorizza automaticamente il valore di ciò che è stato appena cercato (usando le sessioni). Quindi il mio codice è questo:

<*>

Come ho detto prima, quando cerco, devo usare " O \ 'Connor " ;, e poi dopo aver cercato, il valore nella casella di testo diventa " O \\\\' Connor "

È stato frustrante tentare di capirlo. Qualcuno sa cosa sto facendo di sbagliato? Grazie!

EDIT:

Ecco il mio file php5.ini, per quanto riguarda le citazioni magiche:

<*>

Tuttavia, il mio sito è ospitato su GoDaddy e non ho i permessi per modificare il file :(

SESSION['search'] = $search;

Tutto sembra funzionare bene. Tuttavia, ho una funzione di ricerca che cercherà i cognomi e visualizzerà i risultati. Quando cerco, devo cercare O \ 'Connor per ottenere qualsiasi risultato.

Vedete, dopo che ho cercato, la casella di testo memorizza automaticamente il valore di ciò che è stato appena cercato (usando le sessioni). Quindi il mio codice è questo:

<*>

Come ho detto prima, quando cerco, devo usare " O \ 'Connor " ;, e poi dopo aver cercato, il valore nella casella di testo diventa " O \\\\' Connor "

È stato frustrante tentare di capirlo. Qualcuno sa cosa sto facendo di sbagliato? Grazie!

EDIT:

Ecco il mio file php5.ini, per quanto riguarda le citazioni magiche:

<*>

Tuttavia, il mio sito è ospitato su GoDaddy e non ho i permessi per modificare il file :(

POST['lname']);

E poi inserisco $ lname nel DB.

Quando si trova nel DB, appare come O \ 'Connor.

Quindi, se dovessi ricordare quel cognome nella mia applicazione web, dovrò usare:

<*>

Tutto sembra funzionare bene. Tuttavia, ho una funzione di ricerca che cercherà i cognomi e visualizzerà i risultati. Quando cerco, devo cercare O \ 'Connor per ottenere qualsiasi risultato.

Vedete, dopo che ho cercato, la casella di testo memorizza automaticamente il valore di ciò che è stato appena cercato (usando le sessioni). Quindi il mio codice è questo:

<*>

Come ho detto prima, quando cerco, devo usare " O \ 'Connor " ;, e poi dopo aver cercato, il valore nella casella di testo diventa " O \\\\' Connor "

È stato frustrante tentare di capirlo. Qualcuno sa cosa sto facendo di sbagliato? Grazie!

EDIT:

Ecco il mio file php5.ini, per quanto riguarda le citazioni magiche:

<*>

Tuttavia, il mio sito è ospitato su GoDaddy e non ho i permessi per modificare il file :(

È stato utile?

Soluzione

Sembra che Magic Quotes siano abilitati nella tua configurazione PHP.

Per verificare se è effettivamente abilitato:

echo get_magic_quotes_gpc();

Per disabilitare , modifica il tuo file php.ini:

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

O aggiungi questa linea al tuo .htaccess:

php_flag magic_quotes_gpc Off

Altri suggerimenti

Le virgolette magiche sono abilitate. Ciò significa che qualsiasi cosa posta in post o get o altre posizioni simili viene automaticamente salvata in modo che i programmatori principianti non debbano preoccuparsene tanto. È deprecato nell'attuale versione di PHP, se ricordo bene.

Quello che vuoi fare per far fronte a questo, e far funzionare lo script da qualsiasi configurazione è il seguente:

function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    return mysql_real_escape_string($value);
}

Potresti voler modificare ulteriormente questo per racchiudere i dati non numerici tra virgolette, che è una variazione comune, ma trovo che sia meglio posizionare tali virgolette manualmente.

Piccola modifica alla funzione fixinput per verificare se l'installazione di PHP ha effettivamente una vera stringa di escape (le versioni precedenti no):

  function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    if (function_exists('mysql_real_escape_string')) {
      return mysql_real_escape_string($value);
    }
    else {
      return mysql_escape_string($value);
    }
  }
  

Quando si trova nel DB, appare come O \ 'Connor.

     

Quindi, se dovessi ricordare quel cognome nella mia applicazione web, dovrò usare:

 $lname = stripslashes($r["lname"]);

Sbagliato! Quando si evitano le stringhe con mysql_real_escape_string , vengono salvate solo nella query. Il database interpreta la query, quindi i dati finiscono nel database senza caratteri di escape. non devi usare striplash quando estrai i dati dal database. Se pensi di farlo, significa che i dati nel tuo database sono alterati. Molto probabilmente perché hai attivato le virgolette.

Dovresti:

  • Disattiva le virgolette o inverti il ??loro effetto a livello globale. Vedi il manuale per i dettagli.
  • Utilizza parametri associati (La migliore soluzione) o scappa da tutte le variabili con mysql_real_escape_string . Dovresti farlo dove stai creando la query.
  • Non fare nulla sulle cose estratte dal database.

In particolare, non impostare una funzione come fixinput e varianti elencate in alcune delle risposte qui. È il modo sbagliato di risolvere il problema, perché rovinerà tutti i dati che non provengono da una richiesta http.

Non controllo get_magic_quotes_gpc è acceso / spento.

Faccio solo $ lname = mysql_real_escape_string (striplashes ($ _ POST ['lname'])); quindi se non c'è alcun testo tra virgolette non rimuoverà le barre .. se è quotato lo farà toglierli.

e fa miracoli per me!

Tutto quello che devi fare è prendere la query di ricerca, mysql_real_escape_string, e dovrebbe andare perfettamente bene. Il modo migliore per farlo è però quello di non archiviarlo mai fuggito, e invece semplicemente sfuggirlo tutto va nel database.

Invece, fai questo:

 

Tutto quello che devi fare è prendere la query di ricerca, mysql_real_escape_string, e dovrebbe andare perfettamente bene. Il modo migliore per farlo è però quello di non archiviarlo mai fuggito, e invece semplicemente sfuggirlo tutto va nel database.

Invece, fai questo:

<*>SESSION['search'] =

Tutto quello che devi fare è prendere la query di ricerca, mysql_real_escape_string, e dovrebbe andare perfettamente bene. Il modo migliore per farlo è però quello di non archiviarlo mai fuggito, e invece semplicemente sfuggirlo tutto va nel database.

Invece, fai questo:

<*>GET['search']; $search = mysql_real_escape_string(

Tutto quello che devi fare è prendere la query di ricerca, mysql_real_escape_string, e dovrebbe andare perfettamente bene. Il modo migliore per farlo è però quello di non archiviarlo mai fuggito, e invece semplicemente sfuggirlo tutto va nel database.

Invece, fai questo:

<*>GET['search']);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top