обновить профиль php


Я создал страницу профиля на php. Страница содержит поля адреса и телефона и предлагает пользователям вставить свои данные. Данные будут сохранены в таблице назван профиль. Все работает нормально, но проблема в том, что таблица обновляется только в том случае, если в нее уже включены данные. Как я могу изменить его (вероятно, запрос mysql, который у меня есть в моей функции), так что данные будут введены в таблицу, даже если она пуста. Есть ли что-то вроде обновления или вставки в синтаксис, что я могу использовать? Спасибо

<?php


if ( isset($_GET['success']) === true && empty($_GET['success'])===true ){
echo'profile updated sucessfuly';
}else{

 if( empty($_POST) === false  &&  empty($errors) === true ){

    $update_data_profile = array(
                'address' => $_POST['address'],
                'telephone' => $_POST['telephone'],
                );


   update_user_profile($session_user_id, $update_data_profile);

   header('Location: profile_update.php?success');

   exit();


}else if ( empty($errors) === false ){
   echo output_errors($errors);
}

?>

, а затем с помощью следующей функции

function update_user_profile($user_id, $update_data_profile){

$update = array();

array_walk($update_data_profile, 'array_sanitize');

foreach($update_data_profile as $field => $data )
    {              
        $update[]='`' . $field . '` = '' . $data . ''';
}


     mysql_query(" UPDATE `profile` SET " . implode(',  ', $update) . " WHERE `user_id` = $user_id ") or die(mysql_error());


}
3 4

3 ответа:

Я новичок в опубликованном ответе psu и определенно проверю это, но из быстрого прочтения вы должны быть очень осторожны при использовании этих специальных синтаксисов.

1 причина, которая приходит на ум: вы не знаете, что может происходить с таблицей, в которую вы вставляете или обновляете информацию. Если определено несколько uniques, то у вас могут возникнуть серьезные проблемы, и это обычная вещь при масштабировании приложений.

2 Замена в синтаксисе - это функциональность, которую я редко хочу видеть в своих приложениях. Так как я не хочу потерять данные из colomns в строке, которая уже была в таблице.

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

Как было сказано в первой статье, я, возможно, новичок в этом деле, но в данный момент я предпочитаю:
$result = mysql_query("select user_id from profile where user_id = $user_id limit 1");
if(mysql_num_rows($result) === 1){
    //do update like you did
}
else{
    /** 
     *  this next line is added after my comment, 
     *  you can now also leave the if(count()) part out, since the array will now alwayss
     *  hold data and the query won't get invalid because of an empty array
     **/
    $update_data_profile['user_id'] = $user_id;
    if(count($update_data_profile)){
        $columns = array();
        $values = array();
        foreach($update_data_profile as $field => $data){
            $columns[] = $field;
            $values[] = $data;
        }
        $sql = "insert into profile (" .  implode(",", $columns) .") values ('" . implode("','", $values) . "')" ;
        var_dump($sql); //remove this line, this was only to show what the code was doing
        /**update**/
        mysql_query($sql) or echo mysql_error();
    }
}

Вы не можете обновить таблицу, если в ней нет данных, соответствующих идентификатору user_id, что означает, что у вас должна быть строка, содержащая идентификатор user_id и null или что-то еще для других полей.

A) вы можете попробовать проверить, содержит ли таблица данные, и если нет, то вставить ее еще использовать update (не идеально)

$result = mysql_query("UPDATE ...");       
if (mysql_affected_rows() == 0)    
    $result = mysql_query("INSERT ...");

B) проверьте это ссылки

Http://www.kavoir.com/2009/05/mysql-insert-if-doesnt-exist-otherwise-update-the-existing-row.html

Http://dev.mysql.com/doc/refman/5.0/en/replace.html

Http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

@Stefanos

Вы можете использовать команду use " REPLACE INTO "вместо команды" INSERT INTO " в SQL-запросе.

Например

Предположим, что у вас есть запрос insert

INSERT INTO EMPLOYEE (NAME,ADD) values ('ABC','XYZZ');

Теперь вы можете использовать следующий запрос как комбинацию insert и update

REPLACE INTO EMPLOYEE (NAME,ADD) values ('ABC','XYZZ');

Надеюсь, это поможет!