MySQL: Neden form alanında metni göz ardı edilir?

3 Cevap php

Ben başından beri kendimi MySQL / PHP öğretmeye çalışıyorum. Aşağıdaki kod, çeşitli öğretici sitelerden kaldırıldı. Benim host tarafından sağlanan phpMyAdmin kullanıyorum.

Ben "Kimlik" ve "ilk" olarak adlandırılan başka bir alan adında bir otomatik artan alanı olan bir tablo yaptı (varchar, boş değil, 30 sınırı). Sonra ben bir "ilk" adlı metin alanı ve bir Gönder düğmesi ile basit bir form yaptı. Ben kutuya ismimi yazın ve Gönder'i tıklatın. Bu kimliği ile veritabanında bir satır oluşturmak, ama "ilk" alanında her zaman boştur.

Biraz düz-up kelime ile '$ _POST [ilk]' değiştirmeyi denedim, ve o amele - kelimeler gayet kimlik numarası ile tablo çıktı. Ben gerçekten veritabanına konuşmak yönetiyor bilirim, sadece metin alanını açmıyor

INSERT deyimi çalıştıktan sonra, ben bu tablodaki tüm kayıtları görüntülemek var. Bu kimlik tüm numaraları ve nerede "ilk" olmalıdır sonra boş gösteriyor.

I also have it echo the INSERT statement. This is what the echo displays: INSERT INTO tblHurray(ID, first) VALUES ('','')

When I substitute words for '$_POST[first]', the echo looks like this: INSERT INTO tblHurray(ID, first) VALUES ('','words')

Bu yüzden herhangi bir ilgili bilgi bıraktım eğer bana bildirin lütfen benim ilk soru! Ve Yardımlarınız için şimdiden teşekkürler.

Bu form:

<form action="run_input.php" method="post">
Name: <input type="text" name="first">
<input type="Submit">
</form>

Bu "Gönder" tıklandığında çalışır budur:

<?
include("run_connect.php"); // this connects to the database, this works

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','$_POST[first]')";
mysql_query($step1);
echo "$step1";

echo "<b><center>Database Output</center></b><br><br>";

$step2=mysql_query("SELECT * FROM tblHurray");

$num=mysql_numrows($step2);

$i=0;
while ($i < $num) {

$firstname=mysql_result($step2,$i,"first");
$ID=mysql_result($step2,$i,"ID");
echo "$ID: $firstname<br />";

$i++;
}
?>

3 Cevap

Bu hat

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','$_POST[first]')";

Bu gibi bakmak gerekiyor:

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','" . mysql_escape_string($_POST['first']) . "')";

Her zaman (['ilk'] yerine [ilk] daha) diziniz anahtarlarını alıntı iyi bir alışkanlıktır.

Ayrıca her zaman SQL enjeksiyonu önlemek için veritabanına takmadan önce kullanıcı girişi kaçan alışmak için iyi.

Ayrıca HTML formunda giriş emin isim yapmak için çift kontrol PHP kodu eşleşir.

$_POST['first']

olarak not ile aynıdır

$_POST['First']

Denemek

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','".$_POST['first']."')";

Although, if you're really going learn it, then start with PHP PDO. It will save you ALOT of trouble in the long run, especially with parametrized queries.

Mark Biek çivilenmiş, ancak fraksiyonel çimdik olarak, mysql_real_escape_string fonksiyonu bağlantı ile ilişkili karakter kümesi faktörleri olarak mysql_escape_string daha iyidir.