MySQL / PHP "ile sorunu ve '

7 Cevap php

Hi

I made a simple news system with comments using PHP and MySQL, and it worked great on my local Apache server, both on my Fedora 10 machine, and my Windows 7 one. Now I have a problem though, I uploaded it to a web host and it keeps returning all the ' and " as \' and \".

I believe this is either the web host who by automatic adds them for security reasons or that the MySQL is the wrong collation, but I have not been able to resolve it yet, testing multiple MySQL collations.

Here is a example of a query:

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

$time is time(); $newstitle and $newstext are parsed from $_POST and both are ran through mysql_real_escape_string() before I run the query (I guess this might be the problem, but since it is a part of the security I just don't want to remove it, and since it did not cause problems on my local servers)

Son bir not olarak: benim yerel apache sunucularda I latin1_swedish_ci web barındıran sunucu üzerinde hangi işe yaramadı vardı.

EDIT:

Onlar veritabanında şöyle:

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

Benim yerel olanları yaparken de ekstra ters eğik çizgi yoktu, bu yüzden ekleyerek PHP olmalıdır. İlave backslash'lar çıkaran bir fonksiyon ekleyerek dışında bu çözmek için herhangi bir yolu var mı?

7 Cevap

Bu ek ters eğik muhtemelen Magic Quotes. Verileri işlemeden önce disable them or remove them çalışın.

Hayır, siz) (stripslashes çalıştırmak istemiyorum. Aksine, düzgün sunucusu kurmak.

Öncelikle, magic_quotes kapatın. Bu komut girmeden herhangi bir veri şey kaçtı olacağı anlamına gelir.

Sonra veri mysql_real_escape_string () çalıştırın, sadece sorgu için eğik çizgi eklemeniz gerekir, ve eğik çizgi olmadan veritabanında verileri saklamak olacaktır.

Eğer tekrar veri yüklediğinizde, gitmek iyi olacak ve tırnak etrafında herhangi tersbölüler olmayacaktır.

Edit: birkaç kez aşağıda belirtilen ve yorumlarda, bu konuda gitmek için doğru yolu sihirli tırnak devre dışı bırakmak gibi. Ben tamamen okunup yanıtlarken önce soruyu kavramış olsaydı, o zaman muhtemelen ;) daha iyi olurdu


mysql_real_escape_string() ne diyor yapıyor, ve dize içinde ilgili karakterleri kaçan edilecektir. Tırnak Kaçış kaçış karakteri (PHP bir arka yırtmaç, ve diğer birçok dilde) ile önek yapılır. When you pull the data back from the database, çalıştırmak gibi bir şey yapmak stripslashes() tırnak gibi şeyler bölü kaldırmak için, içeriği (PHP doc bakınız).

Edit: Bamya belirtildiği gibi, aynı zamanda nedeniyle sunucu üzerinde etkin olan Magic Tırnaklar için olabilir. Bu as per his answer devre dışı bırakmanız gerekir.

(Lütfen magic_quotes settings, and compare them on your servers. Your home servers probably have magic_quotes (onlar olması gerektiği gibi Magic Quotes is deprecated PHP'nin güncel sürümleri beri) özürlü ve web barındırma muhtemelen onları sağladı bir göz atın hangi ne yazık ki ortak). Sen kullanabilirsiniz:

<?php echo phpinfo(); ?>

hızlı bir karşılaştırma için.

Magic_quotes sizin için yeni ise size umurumda şey dağıtmadan önce, biraz daha PHP güvenlik içine bakmak isteyebilirsiniz.

Questions containing "magic_quotes"

Sizin ev sahibi Magic Quotes etkin olabilir.

magic_quotes_gpc bak. Sen. Htaccess ve kullanım mysql_real_escape_string () aracılığıyla bu kapatabilirsiniz.

Gerçek çözüm insert sorguları hazırlanmış deyimleri kullanmaktır.

Burada sağ üst kısmında bir uç örnek olan bir site.

Prepared Statements in PHP

Yararı en iyi uygulama olduğunu ve yan etkisi artık SQL injection saldırılarına karşı girişini temizliği konusunda endişelenmenize gerek olmasıdır.