Редактировать профиль — PDO

Я пытаюсь включить в свой скрипт страницу, чтобы изменить детали профиля пользователя. Я сделал это так, в классе user.php я включил это:

// Update profile
public function update($email,$gender,$location) {
try {
$stmt = $this->_db->prepare('UPDATE members SET email = ?, gender = ?, location = ? WHERE memberID = ? ');
$stmt->execute(array($email,$gender,$location,$_SESSION['memberID']));
return $stmt->fetch();
} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
}
}

Хотя, например, на странице account.php я сделал это так:

if (isset($_POST['submit'])) {
// new data
$email = $_POST['email'];
$gender = $_POST['gender'];
$location = $_POST['location'];
$id = $_SESSION['memberID'];

// query
if ($user->update($email,$gender,$location,$id)); {
redirect('account.php');
}
}

А также,

<form action="account.php" method="POST">
Email<br>
<input type="text" name="email" value="<?php echo $_SESSION['email'] ?>" /><br>
Gender<br>
<input type="text" name="gender" value="<?php echo $_SESSION['gender'] ?>" /><br>
Location<br>
<input type="text" name="location" value="<?php echo $_SESSION['location'] ?>" /><br>
<input type="submit" name="submit" value="Save" />
</form>

Используйте соединение в PDO, как оно понимается, однако я пробовал много вариантов, но всегда с плохими результатами.

1

Решение

в вашем классе метод:
обновление публичной функции ($ email, $ пол, $ location);

Он не принимает параметр типа $ id.

Таким образом, решение может быть:
а. Используйте идентификатор объекта и не используйте $ _SESSION [‘memberID’].

public function update($email,$gender,$location) {
try {
$stmt = $this->_db->prepare('UPDATE members SET email = ?, gender = ?, location = ? WHERE memberID = ?');
$stmt->execute(array($email,$gender,$location,$this->id);
return true;
} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
}
return false;
}

б. Получите идентификатор в функции и используйте его. Если это так, то лучше использовать это как статический метод.

public static function update($email,$gender,$location,$id) {
try {
$stmt = $this->_db->prepare('UPDATE members SET email = ?, gender = ?, location = ? WHERE memberID = ?');
$stmt->execute(array($email,$gender,$location,$id);
return true;
} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
}
return false;
}

Назовите это, в зависимости от используемой стратегии. Также не делайте echo в методе модели класса, просто присвойте свойству сообщение об ошибке и дайте вызывающей стороне сделать вывод.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector