Установка статуса других строк после INSERT - PullRequest
0 голосов
/ 28 января 2009

Эй, у меня есть поле с названием СТАТУС, и это либо 1, чтобы показать, либо 0, чтобы скрыть. Мой код ниже. Я использую редактор редактирования на месте с jQuery. Каждый раз, когда вы обновляете, он создает новый ROW, который я хочу, но я хочу, чтобы только новый имел STATUS = 1, а остальные - 0. Любые идеи о том, как я это сделал?

<?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 ]

2 голосов
/ 28 января 2009

Я не совсем уверен, что вы имеете в виду - хотите, чтобы все записи, кроме новой, имели статус = 0? Если это так, просто введите обновление перед вставкой:

UPDATE notes SET status = 0

Однако я должен также отметить, что у вас есть потенциальная возможность внедрения SQL-кода. Удаляя косые черты после применения «mysql real escape-строки», вы потенциально позволяете кому-то помещать в ваш оператор SQL текст, который будет выполнять произвольный оператор SQL.

0 голосов
/ 28 января 2009

Вы действительно хотите получить идентификатор новой сгенерированной строки, а затем вызвать ОБНОВЛЕНИЕ, где вы все строки, где идентификатор не новой строки, например,

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

Если в столбце идентификатора в вашей таблице используется AUTO_INCREMENT, вы можете получить его идентификатор через «SELECT LAST_INSERT_ID ()», а затем использовать возвращаемое значение в этом выражении в своем выражении UPDATE.

Псевдокод:

$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");

Единственная оговорка к этому подходу - это когда у вас может быть короткий момент времени, когда 2 строки имеют статус = 1 (время между вашей ВСТАВКОЙ и ОБНОВЛЕНИЕМ). Я бы обернул все это в транзакцию, чтобы сделать весь блок более атомарным.

0 голосов
/ 28 января 2009

Как-то так, извините за пост раньше, я неправильно прочитал его в первый раз, потом вернулся:

<?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']);
?>

Я только что натолкнулся на проблему, которую я не установил из-за того, что мой стол не позволяет мне показывать больше, чем один клиент за раз, и у меня будет много клиентов, мой плохой при планировании ха

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...