2016-08-13 8 views
0

На странице списка событий. После ввода записи в db я фиксирую последний идентификатор сПочему UPDATE создает новую запись?

//Store ID[LAST] 
    $ID = mysqli_insert_id($db); 

На следующей странице показано событие, отформатированное для удобства чтения. Затем пользователь может сохранить или утвердить элемент для публикации с помощью двух кнопок: Черновик, Опубликовать. Я использую кнопки отправки для каждого:

//Check ID value (use for testing) 
    echo "<p>ID = ".$ID."</p>\n"; 

    echo "<form action='".$_SERVER['PHP_SELF']."' method='GET'> 
    <input type='submit' name='submitDraft' value='Draft' /> 
    <input type='submit' name='submitPublish' value='Publish' /> 
    </form>"; 

Теперь я использую условно для обновления записи в соответствии с выбранной кнопкой. (Примечание connect.php это включает, что управляет и коды доступа о соединении.)

if (isset($_REQUEST["submitDraft"])) { 
    include('includes/connect.php'); 
    $sql="UPDATE sessions SET postit='0' WHERE ID='$ID'"; 
    if (mysqli_query($db, $sql)) { 
      echo "Record updated successfully"; 
     } else { 
      echo "Error updating record: " . mysqli_error($db); 
     } 

     mysqli_close($db); 
    } 

    if (isset($_REQUEST["submitPublish"])) { 
    include('includes/connect.php'); 
    $sql="UPDATE sessions SET postit='1' WHERE ID='$ID'"; 
    if (mysqli_query($db, $sql)) { 
      echo "Record updated successfully"; 
     } else { 
      echo "Error updating record: " . mysqli_error($db); 
     } 

     mysqli_close($db); 
    } 

Моя проблема UPDATE оператор добавляет новую запись в таблицу, но следует обновить ту же запись. Какая моя ошибка, пожалуйста.

+0

Нужно ли вам, чтобы идентификатор был уникальным для каждой записи в таблице? –

+0

У вас есть триггер, определенный на этой таблице? – Rahul

+0

@ Jay Patel yes - ID должен быть уникальным. – parboy

ответ

0

Я решаю это. Поскольку форму повторно отправить всю страницу, инструкция insert запускается каждый раз и добавляет новую запись. Эта запись также получает обновление, так что UPDATE добавляет новую запись. Действительно INSERT делает новую запись и UPDATE меняет поле postit в одно и то же время. Чтобы исправить, я добавляю условное значение, если $_REQUEST not equal submitDraft or submitPublish then INSERT, иначе он пропускает INSERT. Также я просто вижу такой же ответ от @Jay Patel и @SBA. Спасибо как

1

Я думаю, что вы должны сохранить последний идентификатор вставки в значении сеанса и использовать его, когда пользователь нажимает «Черновик» или «Опубликовать», так как появляется вставка данных и событий или публикация в разные моменты времени.

//Store ID[LAST] 
$_SESSION['ID'] = mysqli_insert_id($db); 

if(isset($_SESSION['ID'])){ 
    $ID=$_SESSION['ID']; 
    //Check ID value (use for testing) 
    echo "<p>ID = ".$ID."</p>\n"; 
    } 


echo "<form action='".$_SERVER['PHP_SELF']."' method='GET'> 
<input type='submit' name='submitDraft' value='Draft' /> 
<input type='submit' name='submitPublish' value='Publish' /> 
</form>"; 

if (isset($_REQUEST["submitDraft"])) { 
include('includes/connect.php'); 
if(isset($_SESSION['ID'])){ 
    $ID=$_SESSION['ID']; 
    } 
$sql="UPDATE sessions SET postit='0' WHERE ID='$ID'"; 
if (mysqli_query($db, $sql)) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . mysqli_error($db); 
    } 

    mysqli_close($db); 
} 

if (isset($_REQUEST["submitPublish"])) { 
include('includes/connect.php'); 
if(isset($_SESSION['ID'])){ 
    $ID=$_SESSION['ID']; 
    } 
$sql="UPDATE sessions SET postit='1' WHERE ID='$ID'"; 
if (mysqli_query($db, $sql)) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . mysqli_error($db); 
    } 

    mysqli_close($db); 
} 
+0

Параметр SESSION по-прежнему добавляет новую запись. Проверять значения значения идентификатора ID ++ каждый раз, когда нажимается кнопка «Проект» или «Опубликовать». – parboy

+0

@parboy попробуйте включить соединение один раз в верхней части страницы, чтобы не было установлено новое соединение при нажатии кнопки публикации или черновика. обновление не должно приводить к вводу данных, поэтому вы можете установить соединение сверху и – SBA

Смежные вопросы