INSERT sonra diğer satır durumunu ayarlama

3 Cevap php

Hey, ben DURUMU adında bir alan var ve 1 gizlemek göstermek veya 0 ya da budur. Benim kod aşağıda. JQuery ile yer editörü bir düzenleme kullanıyorum. Her şey sen ben istediğiniz yeni bir satır oluşturur, ama sadece yeni bir 0'a DURUM = 1 ve diğerlerini istiyorum güncelleyin. Bunu yapacağını nasıl bir fikir?

<?php
    include "../../inc/config.inc.php";
    $temp  = explode("_", $_REQUEST['element_id'] );
    $field = $temp[0];
    $id    = $temp[1];
    $textboxval = stripslashes(mysql_real_escape_string(preg_replace('/[\$]/',"",$_REQUEST["update_value"])));     	
    $query      = "INSERT INTO notes ($field,status,date,c_id) VALUES ('$textboxval','1',NOW(),'$id')";
    mysql_query($query);
    echo($_REQUEST['update_value']);
?>

3 Cevap

Ben ne demek istediğini emin değilim - yeni biri hariç tüm girişleri status = 0 olması yapmak istiyorsun? Eğer öyleyse, sadece ekleme önce bir güncelleştirme sorunu:

UPDATE notes SET status = 0

Ancak, ben de endişelenecek bir potansiyel SQL enjeksiyon olması dikkat etmelisiniz. Bölü after "gerçek bir kaçış dizesini MySQL" uygulayarak sıyırma, potansiyel birisi keyfi bir SQL deyimini yürütmek olacağını SQL deyiminde metin koymak için izin vardır.

Böyle bir şey, önce yazı için özür dilerim, ben bunu o geri gitti ilk defa okumak Mis:

<?php
    include "../../inc/config.inc.php";
    $temp  = explode("_", $_REQUEST['element_id'] );
    $field = $temp[0];
    $id    = $temp[1];
    $textboxval = mysql_real_escape_stringstripslashes((preg_replace('/[\$]/',"",$_REQUEST["update_value"]))); 
    // set older entries to 0 - to not show but show in history
    $hide_notes      = "UPDATE notes SET status = 0";
    mysql_query($hide_notes);

    // add new entry with status of 1 to show only latest note
    $query      = "INSERT INTO notes ($field,status,date,c_id) VALUES ('$textboxval','1',NOW(),'$id')";
    mysql_query($query);
    echo($_REQUEST['update_value']);
?>

ben sadece benim tablo set up değil mi bir sorun bana birden müşterisine bir zaman göstermek için izin vermez için koştu ve ben planlama ha, benim kötü birçok müşterimiz sahip olacak

Eğer gerçekten yeni oluşturulan satır kimliği almak ve daha sonra bir UPDATE tetiklemek istediğiniz yere kimliği not, yeni satır, örneğin tüm satırlar

UPDATE notes SET status = 0 WHERE id != $newly_generated_id

Lütfen tablodaki ID sütunu AUTO_INCREMENT kullanıyorsa, "SELECT LAST_INSERT_ID ()" ile onun kimliğini almak ve sonra UPDATE deyimi O açıklamada dönüş değerini kullanabilirsiniz.

Sahte kod:

$insert = mysql_query("INSERT INTO ..."); 
$last_id = mysql_query("SELECT LAST_INSERT_ID()"); 
$update = mysql_quqery("UPDATE notes SET status = 0 WHERE id != $last_id");

Eğer 2 satır durumu = 1 (sizin INSERT ve UPDATE arasındaki zaman) var, zaman içinde kısa bir an olabilir nerede bu yaklaşımın sadece bir uyarıdır. Ben tüm birim daha atomik yapmak için bir işlem tüm bu örtecek.