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.