Bu longwinded ve repetative sql komut Geliştirilmesi

0 Cevap php

Ben KURU kodu hakkında öğrenme oldum ve benim kod KURU değil ...

Örneğin, özel bir CMS var ve ben bir makale, bir kullanıcı bir olay gibi ... temelde bir isim, içerik ve bir kaç şey için bir yayınlama durumunu kaydedin. Bir formu göndermek için, bu yüzden gibi bunu bir anahtara sahip bir dosyanın (process.php) teslim:

switch($_POST['process']) {


case 'speaker':

    if($_POST['speaker_id']) {

        $sql = '
            UPDATE speakers 
            SET speaker_name="' . mysql_escape_string($_POST['speaker_name']) . '",
            speaker_content="' . mysql_escape_string($_POST['speaker_content']) . '",
            speaker_status="' . $_POST['speaker_status'] . '"
            WHERE speaker_id="' . $_POST['speaker_id'] . '"
            LIMIT 1
        ';

    } else {

        $sql = '
            INSERT INTO speakers 
            SET speaker_name="' . mysql_escape_string($_POST['speaker_name']) . '",
            speaker_content="' . mysql_escape_string($_POST['speaker_content']) . '",
            speaker_status="' . $_POST['speaker_status'] . '"
        ';

    }


    mysql_query($sql);  

    if($_POST['speaker_id']) {

        header('Location: speakers?speaker_id=' . $_POST['speaker_id']);        

    } else {

        header('Location: speakers?speaker_id=' . mysql_insert_id);

    }

break;





case 'event':

    if($_POST['event_id']) {

        $sql = '
            UPDATE events 
            SET event_name="' . mysql_escape_string($_POST['event_name']) . '",
            event_content="' . mysql_escape_string($_POST['event_content']) . '",
            event_status="' . $_POST['event_status'] . '"
            WHERE event_id="' . $_POST['event_id'] . '"
            LIMIT 1
        ';

    } else {

        $sql = '
            INSERT INTO events 
            SET event_name="' . mysql_escape_string($_POST['event_name']) . '",
            event_content="' . mysql_escape_string($_POST['event_content']) . '",
            event_status="' . $_POST['event_status'] . '"
        ';

    }


    mysql_query($sql);  

    if($_POST['event_id']) {

        header('Location: events?event_id=' . $_POST['event_id']);      

    } else {

        header('Location: events?event_id=' . mysql_insert_id);

    }

break;


case 'article':

    if($_POST['article_id']) {

        $sql = '
            UPDATE articles 
            SET article_name="' . mysql_escape_string($_POST['article_name']) . '",
            article_content="' . mysql_escape_string($_POST['article_content']) . '",
            article_status="' . $_POST['article_status'] . '",
            article_modified="' . $_POST['article_modified'] . '"
            WHERE article_id="' . $_POST['article_id'] . '"
            LIMIT 1
        ';

    } else {

        $sql = '
            INSERT INTO articles 
            SET article_name="' . mysql_escape_string($_POST['article_name']) . '",
            article_content="' . mysql_escape_string($_POST['article_content']) . '",
            article_status="' . $_POST['article_status'] . '"
        ';

    }


    mysql_query($sql);  

    if($_POST['article_id']) {

        header('Location: articles?article_id=' . $_POST['article_id']);        

    } else {

        header('Location: articles?article_id=' . mysql_insert_id);

    }

break;




}

Belki orada farklı tablo adları ve sütun adları, bazen bir çift daha fazla olmak ya da doldurmak için daha az sütun gibi temel bazı varyasyonlar rağmen, kod anlamıyla aynıdır ve bu gibi programlama fazla yaratıcılık fazla veri girişi gibi hissediyor.

Ben tüm aşağıda kod miktarının 1/3 'de elde edilebilir ki bu bir sınıf oluşturmak için bir yolu var düşünün. Aerodinamik mysql insert / update yöntemi / stratejisi çeşit var mı?

Ben onlar sütun 'speaker_name' ve giriş denir, yani eğer, tablodaki gibi tüm girişler aynı isim varsa kafamda, ben düşünüyorum ..

<input type="text" name="speaker_name" />

Ben $ _POST dizi geçti ve sadece uygun alanları güncellenen bir işlevi olabilir eğer ... Ben merak ediyorum. Bu ses mantık mı?

Belki işlevi güncelleştirmek için hangi tablo bildirin ve gerisini halleder 'table' değişken şeklinde gizli bir giriş olurdu.

Ben sadece yüksek sesle düşünce ise Afedersiniz. Herhangi bir fikir gerçekten harika olurdu!

My newbie solution Here's what I have i got working

if($_POST['id']) {

  $sql = 'UPDATE ';

} else {

  $sql = 'INSERT INTO ';

}

// number of rows in array
$total = count($_POST);
// number of commas = total of values minus 1
$commas = $total - 1;
// starting number
$count = 1;

foreach ($_POST as $key => $value) {

  if($count == 1)
{

  $sql .= mysql_real_escape_string($value) . ' SET ';

}
else
{

if(    $count < $total    )
{

 $sql .= $key . '="' . mysql_real_escape_string($value) . '"';

if($count != $commas)
{

  $sql .= ', ';

}

    }
    elseif(    $_POST['id']    ) 
    {

    $sql .= ' WHERE ' . $key . '="' . mysql_real_escape_string($value) . '"';

    }


  }

$count = $count + 1;


}

mysql_query($sql);

if($_POST['id']) {

  header('Location: ' . $_POST['process'] . '?id=' . $_POST['id'] . '');


} else {

header('Location: ' . $_POST['process'] . '?id=' . mysql_insert_id());

}

Bunu yapmak için benim form tasarımları son giriş tablosundaki satırın kimlik numarası (varsa) düzenlenmekte olan, birinci gizli giriş tablo adını tutan, yani oldukça sıkı kurulum olması gerekir demektir.

Ben onun kadar iyi biliyorum ... ama daha önce aldı çizgilerin yüzlerce çok daha iyi.

0 Cevap