$ _POST Ile ilgili sorun

7 Cevap

Bu alışkanlık iş. Tüm alanları doğru vb vardır ve ben bir db bağlantısı var.

Soruna

Ben db içine bir yazı eklemek için bu komut dosyasını kullanabilirsiniz:

<?php

if (isset($_POST['msg'])) {

$title = mysql_real_escape_string($_POST['title']);
$msg = mysql_real_escape_string($_POST['msg']);

// kolla efter tomma fält
if (empty($title) || empty($msg)) {
$reg_error[] = 1;
}

if (!isset($reg_error)) {
mysql_query("INSERT INTO messages (title, message, date, user_id)
             VALUES('$title', '$msg', '".time()."', '2')");

header('location: /');

exit;

}


}
?>

The Form:

<form action="post_msg.php" method="post">

<b>Title:</b>
<input type="text" name="title" size="40" />


<b>Message:</b>
<textarea rows="15" cols="75" name="msg"></textarea>


<input type="submit" value="Post Message" />
</form>

Worked fine the other day. Not today. No errors. The "post stuff" shows up in the url. I thought it only did when using $_GET which i dont. http://localhost/post_msg.php?title=fdsg&msg=sdfg

i herhangi bir hata sayfası sadece reloads alamadım

mesajlar db

CREATE TABLE IF NOT EXISTS `messages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(140) COLLATE utf8_unicode_ci DEFAULT NULL,
`message` text COLLATE utf8_unicode_ci
`date` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 FULLTEXT KEY `title` (`title`,`message`)

7 Cevap

Form POST kullanmak için ayarlı değil gibi geliyor

<form action="post_msg.php" method="post">

Yardımcı olabilecek birkaç yorum:

  1. Please provide log output, error messages
  2. SQL yazdırın ve sunucu üzerinde elle çalıştırmak, ne hatalar oluşur?
  3. Dize birleştirme kullanarak SQL inşaat really grim ve muhtemelen bir güvenlik riskidir.

PDO için belgelerine bakın. Tutarsız adlandırılmış olsa PHP API, oldukça kararlı. Bu yüzden bir hata doğmak gerekir bu durumda yanlış bir şey yaptım, muhtemeldir.

ne sorgu sonucu echo

echo mysql_errno($link) . ": " . mysql_error($link) . "\n";

komut sorgu yaparken hattına girmek mi?

Yönlendirme başlığını çıkarın ve hata ayıklama için komut dosyası sonunda bu yazın:

var_dump($_POST); echo mysql_error();

Ben sadece garip bir şey fark ettim ...

$ Reg_error bir dizi bunu yazdı yoludur.

$reg_error[] = 1;

Yani .. ardından [0] ya da her neyse .. $ reg_error gibi, bu diziye bir anahtar atamak ve

if(count($reg_error) > 0) { /* your code */ }

.. Ya da sadece $ reg_error itibaren [] köşeli kaldırmak ve olduğu gibi if / else bırakın.

Kod ile sağlanan, reg_error sadece SQL gerçekleştirmek olup olmadığını belirlemek için kullanılır. Bunun yerine bir değişken (koşullu beyanı üzerine onun sadece set bağımlı beri), neden sadece yapmak için kodunuzu değiştirmek ayarı:

<?php

if (isset($_POST['msg'])) {

$title = mysql_real_escape_string($_POST['title']);
$msg = mysql_real_escape_string($_POST['msg']);

// kolla efter tomma fält
if (!empty($title) && !empty($msg)) {

  mysql_query("INSERT INTO messages (title, message, date, user_id)
             VALUES('$title', '$msg', '".time()."', '2')");

  header('location: /');

  exit;

}

else {

  echo "There was an error";

}


}
?>

Bu sadece kod olur. Else açıkçası, sonunda modifiye edilmiş olurdu, ama şimdi size bile SQL sorgusu teşebbüs eğer size gösteren bir sonbaharda geri yol verecekti. Onun değil, koşul başarısız olduğu ve nedense yazılan değerleri alıyorum öyle ise.

Form etiketinin yöntemi değiştirildi eğer URL değiştirecek tek yoludur. Nakletmek için ayarlanırsa, bu URL göstermek gerekir.

Ben sorunu buldum! benim header.php dosyasını kontrol ve tahmin edin ne oldu? i çocuklar rahatsız kapalı :/ üzgünüm hadent bir formu vardı