Neden bu basit bir PHP / MySQL kod çalışmıyor?

4 Cevap php

Php / mysql için çok yeni ve bu beni tüyleri gevşek neden olan, ben bir çok düzeyde sitesi navigasyon oluşturmaya çalışıyorum. Benim komut dosyası bu bölümünde ben veritabanına yerleştirilmesi için bir formdan gelen alt ve üst kategoriler hazırlamakla ediyorum:

// get child categories
$catFields = $_POST['categories'];

if (is_array($catFields)) {
  $categories = $categories;

  for ($i=0; $i<count($catFields); $i++) {
    $categories = $categories . $catFields[$i];
  }
}

// get parent category    
$select = mysql_query ("SELECT parent FROM categories WHERE id = $categories");

while ($return = mysql_fetch_assoc($select)) {    
  $parentId = $return['parent'];
}

Benim senaryonun ilk bölümü, bu kullanıcı bir biçimde onay kutularını kontrol ederek bir yazı atamak için seçilen ve veritabanına yerleştirilmesi için hazırlar olan tüm kategoriler kapmak, gayet iyi çalışıyor.

Ama ikinci bölümü çalışmıyor ve ben nedenini anlayamıyorum. Ben kendi tablosunda saklanan bir ebeveyn ile bir kategori maç için çalışıyorum, ama kategoriler tüm anne olsa bile bu hiçbir döndürür. Bu yüzden kimse bana söyleyebilir misiniz?

P.S. $categories değişkeni alt kategori id içerir.

4 Cevap

Ben birkaç hata görebilirsiniz:

$categories = $categories;

olmalıdır

$categories = '';

Hakkında daha fazla olacağından categories siz MySQL in maddesi kullanmak gerekir:

SELECT parent FROM categories WHERE id in ($categories)

Bunun için yapmanız gerekecek categories virgülle ayrılmış listesi eğer döngü gibi değiştirerek kimlikleri:

for ($i=0; $i<count($catFields); $i++) 
    $categories .= "$catFields[$i],"; // append 'id,' to existing list.
trim($categories,','); // remove any trailing commas.

Eğer kullandığınız SQL motoru = burada sadece kullanmak mümkün olacak değil içinde birden fazla değeri olan bir dize olurdu gibi $categories görünüyor durum. SQL WHERE id IN (1,2,3) burada 1, 2, 3 vb gibi bir şey görünüyor böylece muhtemelen bunu değiştirmek gerekir eşleştirmek istediğiniz senin id vardır.

  1. AFAIK, $ _POST bir dizidir. $ _POST Bir çok seçin html formu öğeden ['kategoriler'] verileri midir?

Eğer $ _POST ['kategoriler'] ne tür veriler gönderiyor? Bunu nasıl bir dizi olmasını bekliyorsunuz? Eğer PHP komut göndermeden önce yapısı gibi bir diziye veri kodlama yapıyorsanız, elle bir diziye eklemek gerekebilir.

  1. Kullanım

    $ (.. Implode), "," ($ array "id IN (NEREDEN kategorilerde DAN ebeveyn SEÇ" ")") = mysql_query seçin;

Ve corrent kod SQL enjeksiyon eğilimli, sizin sorguda tırnak ile birlikte mysql_real_escape_string () 'unutma. Hazırlanan tablolar (PDO veya MySQLi) hile irade de.

Ama userinput güvenmiyorum!