Domanda

Ho fatto un semplice sistema di news con i commenti utilizzando PHP e MySQL, e ha funzionato grande sul mio server Apache locale, sia sulla mia macchina Fedora 10, e il mio Windows 7 uno. Ora ho un problema, però, ho caricato a un host web e continua a tornare tutti i 'e "come \' e \".
Credo che questo sia l'host web che con automatica li aggiunge per motivi di sicurezza o che il MySQL è la raccolta sbagliato, ma non sono stato in grado di risolvere ancora, provando diverse regole di confronto di MySQL.
Ecco un esempio di una query:

mysql_query("INSERT INTO news (title, poster, text, time) VALUES ('$newstitle', '1', '$newstext', '$time')") or die(mysql_error());

$time è time(); $newstitle e $newstext vengono analizzati da $_POST ed entrambi vengono eseguite sui mysql_real_escape_string() prima di funzionare la domanda (credo che questo potrebbe essere il problema, ma dal momento che si tratta di una parte della cauzione io non voglio per rimuoverlo, e dal momento che non ha causato problemi sul mio server locali)

Come nota finale:. Sul mio server Apache locali avevo latin1_swedish_ci che non ha funzionato sul server host web

Modifica

Si guardano come questo nel database:

\'\'\'\"\"\"

Mentre sul mio quelli locali non hanno avuto la barra rovesciata aggiuntiva, quindi deve essere il PHP aggiungerlo. C'è un modo per risolvere questo, tranne l'aggiunta di una funzione che consente di rimuovere le barre rovesciate in più?

È stato utile?

Soluzione

Queste backslash aggiuntivi sono probabilmente Magia Quotes . Prova a disabilitarli o rimuoverli prima di elaborare i dati.

Altri suggerimenti

No, non si vuole correre stripslashes (). Piuttosto, configurare il server in modo corretto.

Per prima cosa, spegnere magic_quotes. Ciò significa che tutti i dati che entrano lo script avrà nulla sfuggiva.

Quindi eseguire mysql_real_escape_string () sui dati, che aggiungerà le barre solo per la query e memorizzerà i dati nel database, senza le barre.

Quando si caricano nuovamente i dati, sarete pronti per partire e non ci sarà alcun backslash intorno alle citazioni.

Modifica : Come già detto più volte di seguito, e nei commenti, il modo corretto di andare su questo è quello di disattivare magic quotes. Se avessi letto integralmente e compreso la domanda prima di rispondere, allora sarebbe probabilmente stato meglio;)


mysql_real_escape_string() farà quello che dice, e sfuggendo i personaggi rilevanti all'interno della stringa. Sfuggire citazioni è fatto da anteponendo il carattere di escape (un back-slash in PHP, e molte altre lingue). Quando si tira indietro i dati dal database , fare qualcosa di simile run stripslashes() (vedere la PHP doc ) sul contenuto, per rimuovere le barre da cose come citazioni.

Modifica : Come detto Gumbo, potrebbe anche essere dovuto alla magia Quotes essere abilitato sul server. È necessario disattivare queste come per la sua risposta .

Date un'occhiata al tuo magic_quotes impostazioni , e confrontarli sui server. I server di casa probabilmente hanno <=> disabile (come dovrebbero essere, dal momento che magic Quotes è deprecato nelle attuali versioni di PHP), e il tuo host web probabilmente li ha abilitato (che è tristemente comune). È possibile utilizzare:

<?php echo phpinfo(); ?>

per un rapido confronto.

Se magic_quotes è nuovo a voi, si consiglia di guardare in sicurezza PHP un po 'di più prima di distribuire qualsiasi cosa che ti interessano.

Domande contenenti "magic_quotes"

Il padrone di casa potrebbe avere Magia Quotes abilitato.

magic_quotes_gpc . È possibile attivare questa via via .htaccess e l'uso mysql_real_escape_string ().

La vera soluzione è quella di utilizzare le dichiarazioni preparate nelle query di inserimento.

Ecco un sito con un esempio di inserimento a destra in alto.

istruzioni preparate in PHP

Il vantaggio è che si tratta di una pratica migliore, e l'effetto collaterale è che non è più necessario preoccuparsi di pulizia l'ingresso contro gli attacchi SQL injection.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top