küçücük mce sql hata bağlantıları eklerken

2 Cevap php

Ben sistemi gibi bir blog için bazı içerik yüklemek için yapılmış bir komut ile küçük MCE kullanıyorum. Ben küçük MCE aracılığıyla bir bağlantı eklemek zaman bu hatayı alıyorum. Eğer yardımcı olur bağlantı taşıyan biridir $ içerik için mysql alan türü longblob olduğunu.

Burada bağlantı hatası ilk ve sonra benim kodu

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'google test" href="http://www.google.ca" target="_blank">google est laborum' at line 4

/* GRAB FORM DATA */
 $title = $_POST['title'];
 $date = $_POST['date'];
 $content = $_POST['content'];
 $imageName1 = $_FILES["file"]["name"];
 $date = date("Y-m-d");

 $sql = "INSERT INTO blog (title,date,content,image)VALUES(
 \"$title\",
 \"$date\",
 \"$content\",
 \"$imageName1\"
 )";

 $results = mysql_query($sql)or die(mysql_error());

GÜNCELLEME: nasıl ben şu hatayı alıyorum, bir güncelleme ile WHERE deyimi yapıyorum zaman sprintf ile aynı mysql kaçış yapıyor hakkında gitmek istiyorum

Warning: sprintf() [function.sprintf]: Too few arguments in /home/akitson1/anderskitson.ca/admin/blogEdit.php  on line 88
Query was empty



$sql = sprintf("UPDATE blog SET WHERE id=$thisID (title,date,content,image)VALUES('%s','%s','%s','%s')",
                                mysql_real_escape_string($title),
                                mysql_real_escape_string($date),
                                mysql_real_escape_string($content));

2 Cevap

Verilerinizi kaçış. mysql_real_escape_string() iyisi, addslashes () en az ...

mysql_real_escape_string ve sprintf:

  $title = $_POST['title'];
     $date = $_POST['date']; // why do you assign this here, though? it's re-assigned again below?
     $content = $_POST['content'];
     $imageName1 = $_FILES["file"]["name"];
     $date = date("Y-m-d");

     $sql = sprintf("INSERT INTO blog (title,date,content,image)VALUES('%s','%s','%s','%s')",
              mysql_real_escape_string($title),
              mysql_real_escape_string($date),
              mysql_real_escape_string($content),
              mysql_real_escape_string($imageName1) );

     $results = mysql_query($sql)or die(mysql_error());

Bu, en az iki faydası vardır:

  1. istediğiniz veri koymak sağlar
  2. sorgusu ile derlenecek sql girmesini engeller. SQL enjeksiyon bakıyorum, geliştirmek gibi akılda tutmak önemlidir.

sprintf temiz ifadenizi tutar çünkü güzel ve diğer güzel şeyler yapalım. Check it out.

Son şey Eğer onu almak zaman un verilerinizi kaçmak gerekir olduğunu. Bu yüzden

$result = mysql_query("SELECT * FROM `blog`");
$row = mysql_fetch_assoc($result);
echo stripslashes($row['content']);

Re: your update:

SQL bir güncelleştirme için hatalı biçimlendirilmiş. Sprintf gelince, onun (bunu 4% s verirseniz, bunu 4 argümanlar vermek gerekir) sağlanan değişkenler ile (kullandığınız ne olursa olsun .. ya da rakam için% d) Tüm% s yerine gidiyor.

Lütfen güncelleme durumda, 5 var. Dört% s (dizeleri) ve bir% d (hane)

$sql = sprintf("UPDATE `blog` SET `title` = '%s', `date` = '%s', `content` = '%s', `image` = '%s' WHERE `id` = '%d'",
                                mysql_real_escape_string($title), // first %s gets replaced
                                mysql_real_escape_string($date), // second %s gets replaced
                                mysql_real_escape_string($content), // third %s gets replaced
                                mysql_real_escape_string($imageName1), // fourth %s gets replaced
                                $thisId ); //forced as digit (the %d), no need for escaping

Mysql_real_escape_string kullanmayı deneyin

$title = mysql_real_escape_string($_POST['title']);
$date = mysql_real_escape_string($_POST['date']);
$content = mysql_real_escape_string($_POST['content']);
$imageName1 = $_FILES["file"]["name"];
$date = date("Y-m-d");