2012-01-09 2 views
0

У меня есть форма, где пользователь может изменить свою личную информацию, которая уже находится в базе данных. Какое лучшее решение для обновления только полей базы данных, которые были изменены, а не всех доступных параметров формы.PHP обновление информации о пользователе

Если у вас есть какие-либо предложения, чем вкладывание в одну форму, пожалуйста, сообщите.

+1

Вы используете какие-либо рамки? – cmbuckley

+0

PHP/MYSQL на сервере Wamp, без фреймворков, написание кода в блокноте. –

+2

Единственным реальным доказательством этого является проверка/сравнение новых данных с исходными данными на стороне сервера после отправки новых данных. Это означает, что вы либо должны снова «SELECT» перед «UPDATE», либо сохранить результаты своего исходного 'SELECT' в каком-то сеансе. – DaveRandom

ответ

2

Обновить всю запись пользователя, не заботясь о том, какие поля были изменены, а какие нет.

Обновление всех полей одновременно примерно так же эффективно, как и время и память, как запрос на проверку, какие поля были изменены. На самом деле, вы просто тратите свое время на проверку полей один за другим, чтобы посмотреть, какие из них обновлены. Поэтому перед обновлением нет никаких оснований.

1

После отправки формы обновления вы должны проверить значения, выполнив выбор запроса where id = xyz, а затем проверив if($_POST['textboxname'] == $row['colname']), если обнаружены какие-либо изменения, то добавьте в запрос обновления другой мудрый пропустить это значение.

Если вы написали свой код здесь, тогда это может быть очень легко понять вас.

2

Предполагая, что MySQL и что вы не возражаете против использования сеансов, вот способ сделать это:

<?php 

    // Start the session 
    session_start(); 

    // The name of the table in the database 
    $table = 'table_name'; 
    // The primary key of the record we are dealing with 
    $id = 1; 
    // The name of the column that holds the primary key 
    $pkCol = 'id'; 

    // Connect to database somewhere here and store it in $conn 

    if (!empty($_POST['update'])) { 

    // Update the record 

    // Compare values from $_POST with values from $_SESSION and build an array of data that has changed 
    $changes = array(); 
    foreach ($_SESSION['original_data'] as $colName => $value) { 
     if ($_POST[$colName] != $value) { 
     $changes[] = "$colName = '".mysqli_real_escape_string($conn, $_POST[$colName])."'"; 
     } 
    } 

    // Build the query 
    $query = "UPDATE $table SET ".implode(', ', $changes)." WHERE $pkCol = {$_SESSION['record_id']}"; 

    // Do the query 
    if (!mysqli_query($conn, $query)) exit("Unable to update record in database"); 

    } 

    // generate the form 

    // Get original data from DB and store it in the session 
    $query = "SELECT * FROM $table WHERE $pkCol = $id"; 
    if (!$result = mysqli_query($conn, $query)) exit("Unable to get record from database"); 
    $_SESSION['original_data'] = mysqli_fetch_assoc($result); 
    $_SESSION['record_id'] = $id; 

    // Echo start of HTML page 
    echo "<html> 

    <head> 
    <title>Record update example</title> 
    </head> 

    <body> 
    <form method='post' action=''> 
     <input type='hidden' name='update' value='1' /> 
"; 

    // Generate inputs from data 
    foreach ($_SESSION['original_data'] as $colName => $value) { 
    if ($colName != $pkCol) { 
     $colName = htmlspecialchars($colName); 
     $value = htmlspecialchars($value); 
     echo "  $colName: <input type='text' name='$colName' value='$value' /><br />\n"; 
    } 
    } 

    // Close off HTML 
    echo " </form>\n </body>\n</html>"; 
1

Вы можете делать то, что предложил Хоссейн (+1, кстати), или вы можете пометить как-то изменили элементы, и вы можете сопоставить свои объекты с идентификаторами.

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