Я хочу, чтобы участники могли добавить больше информации (местоположение, история) в свой профиль, а также обновить свой пароль, если это необходимо.
Для этого я использую следующий фрагмент:
$query = mysql_query("INSERT INTO
members (location, story)
VALUES
('$location', '$story')
WHERE
username='$user'
ON DUPLICATE KEY UPDATE
hash = '$password',
location='$location',
story='$story'
");
Это не работает с частью «ГДЕ», но если я удаляю ее, тогда данные просто заполняются пустой записью, а не записью пользователя. Как правильно использовать часть WHERE в этом фрагменте, чтобы обновлялся правильный профиль пользователя?
Я искал вверх и вниз по Интернету и этому веб-сайту, но не нашел ни одного решения, которое удивляет меня, так как это кажется очень распространенным вопросом?
кто-нибудь знает, как решить эту проблему?
Заранее спасибо!
Первый, mysql
устарела, вы должны использовать mysqli
,
Во-вторых, убедитесь, что вы избегаете значений, прежде чем вводить их в запросах. mysql_real_escape_string () это минимум
В третьих, INSERT
/ ON DUPLICATE KEY UPDATE
не принимает WHERE
пункт.
Это используется для избежания дублирования ключей.
Для простой регистрации пользователя или чего бы то ни было, вы можете избежать использования идентификаторов / автоматического увеличения и использовать username
в качестве первичного ключа. Но для этого вам понадобится MyISAM или MySQL 5.6+ для полнотекстовой индексации, и в целом это рекомендуется.
Но в этом случае ваше местоположение и история всегда будут перезаписаны.
Если это то, что вы хотите, вы можете попробовать все, что я написал в предыдущем абзаце.
Вы можете использовать INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE
построить как
INSERT INTO
members (location, story)
SELECT '$location', '$story'
FROM table_name
WHERE username='$user'
ON DUPLICATE KEY UPDATE
hash = '$password',
location='$location',
story='$story'
Хорошо, я наконец-то смог решить эту проблему самостоятельно. Для тех, кто заинтересован, вот код:
// if user entered location
if (!empty($_POST['location']))
{
// if database row empty
if ($row['location'] == " ")
{
mysql_query("INSERT INTO members (location) VALUES ('".$location."') WHERE username='".$user."'");
}
// if database row not empty
else
{
mysql_query("UPDATE members SET location='".$location."' WHERE username='".$user."'");
}
}
// if user entered story
if (!empty($_POST['story']))
{
// if database row empty
if ($row['story'] == " ")
{
mysql_query("INSERT INTO members (story) VALUES ('".$story."') WHERE username='".$user."'");
}
// if database row not empty
else
{
mysql_query("UPDATE members SET story='".$story."' WHERE username='".$user."'");
}
}