обновить профиль 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 ответа:
Я новичок в опубликованном ответе 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');
Надеюсь, это поможет!