2015-04-06 1 views
1

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

// 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 из того, как его понимают, однако я пробовал много вариантов, но всегда с плохими результатами.

+0

Добро пожаловать в переполнение стека! Этот вопрос немного короткий по информации. Какой у Вас вопрос? –

+0

Здравствуйте, я попросил о помощи. Код, который я написал, работает неправильно, он не обновляет данные. Что насчет этого? Не могли бы вы помочь мне? – Marco

+0

его инструкция update, '-> fetch()' вообще не имеет смысла, используйте '-> rowCount()> 0' вместо – Ghost

ответ

0

в вашем классе метод: public function update ($ email, $ gender, $ location);

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

Таким образом, решение может быть: a. Используйте идентификатор объекта и не используйте $ _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; 
} 

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

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; 
} 

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

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