2014-09-19 4 views
-3

im создание сценария профиля обновления. У меня есть x полей и im тестирование с помощью var_dump ($ _ POST) в верхней части формы. Var_dump показывает, что все правильно, но в коде обновления он что-то обновляет.php code dont update from form

if(isset($_POST['submit'])) 
{ 
       $firstname  = $_POST['firstname']; 
       $lastname  = $_POST['lastname']; 
       $phone   = $_POST['phone']; 
       $profileText = $_POST['profileText']; 
       $website  = $_POST['website']; 
       $username  = $_SESSION['username']; 

       $stmt = $this->_db->execute("UPDATE `members` SET `firstname` = '$firstname', `lastname` = '$lastname', `phone` = '$phone', `profileText` = '$profileText', `website` = '$website' WHERE `username` = '$username'"); 

} 

И это не дает мне какие-либо ошибки, поэтому не могу дать вам сообщение об ошибке ..

Html форма:

<form role="form" method="POST" action="<?php $_PHP_SELF ?>"> 
<div class="form-group"> 
<label class="control-label">Fornavn</label> 
<input type="text" value="<?php echo $userInfo->firstname; ?>" name="firstname" id="firstname" class="form-control"/> 
</div> 
<div class="form-group"> 
<label class="control-label">Efternavn</label> 
<input type="text" value="<?php echo $userInfo->lastname; ?>" name="lastname" id="lastname" class="form-control"/> 
</div> 
<div class="form-group"> 
<label class="control-label">Mobil Nummer</label> 
<input type="text" value="<?php echo $userInfo->phone; ?>" name="phone" id="phone" class="form-control"/> 
</div> 
<div class="form-group"> 
<label class="control-label">Job Titel</label> 
<input type="text" value="<?php echo $userInfo->work; ?>" name="work" id="work" class="form-control" disabled/> 
</div> 
<div class="form-group"> 
<label class="control-label">Profil Tekst</label> 
<textarea class="form-control" rows="3" name="profileText" id="profileText" value="<?php echo $userInfo->profileText; ?>"></textarea> 
</div> 
<div class="form-group"> 
<label class="control-label">Hjemmeside URL</label> 
<input type="text" value="<?php echo $userInfo->website; ?>" name="website" id="website" class="form-control"/> 
</div> 
<div class="margiv-top-10"> 
<input type="submit" class="btn green" value="Gem" > 
<a href="profile.html" class="btn default">Annuller </a> 
</div> 
</form> 
+3

У вас нет ошибок, потому что вы не проверяете их. Вы также широко открыты для инъекций SQL. –

+0

Проверка с помощью setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); – user3442879

+1

Ой, это заставляет меня хотеть подписаться на 'firstname = '; DROP TABLE members; -' – amphetamachine

ответ

1

Вы пытаетесь использовать функцию, которая не является доступный в классе PDO. Однако он доступен в классе PDOStatement, который появляется, когда вы используете prepare. Кроме того, если вы используете PDO, то, пожалуйста, ради безопасного интернета, используйте подготовленные заявления. Пример:

if(isset($_POST['submit'])) { 
    $firstname  = $_POST['firstname']; 
    $lastname  = $_POST['lastname']; 
    $phone   = $_POST['phone']; 
    $profileText = $_POST['profileText']; 
    $website  = $_POST['website']; 
    $username  = $_SESSION['username']; 

    $stmt = $this->_db->prepare("UPDATE `members` SET `firstname` = :firstname, `lastname` = :lastname, `phone` = :phone, `profileText` = :profileText, `website` = :website WHERE `username` = :username"); 

    $stmt->bindParam(":firstname", $firstname, PDO::PARAM_STR); 
    $stmt->bindParam(":lastname", $lastname, PDO::PARAM_STR); 
    $stmt->bindParam(":phone", $phone, PDO::PARAM_STR); 
    $stmt->bindParam(":profileText", $profileText, PDO::PARAM_STR); 
    $stmt->bindParam(":website", $website, PDO::PARAM_STR); 
    $stmt->bindParam(":username", $username, PDO::PARAM_STR); 

    $stmt->execute(); 
} 

Если на вашем месте я бы даже добавить проверку на стороне сервера, если все эти поля были заполнены, а также. Быстрый и грязный способ сделать это:

if (isset($_POST['submit'])) { 
    $firstname  = isset($_POST['firstname']) ? $_POST['firstname'] : null; 
    $lastname  = isset($_POST['lastname']) ? $_POST['lastname'] : null; 
    $phone   = isset($_POST['phone'] ? $_POST['phone'] : null; 
    $profileText = isset($_POST['profileText'] ? $_POST['profileText'] : null; 
    $website  = isset($_POST['website']) ? $_POST['website'] : null; 
    $username  = isset($_SESSION['username']) ? $_SESSION['username'] : null; 

    if (!in_array(null, array($firstname, $lastname, $phone, $profileText, $website, $username))) { 
     $stmt = $this->_db->prepare("UPDATE `members` SET `firstname` = :firstname, `lastname` = :lastname, `phone` = :phone, `profileText` = :profileText, `website` = :website WHERE `username` = :username"); 

     $stmt->bindParam(":firstname", $firstname, PDO::PARAM_STR); 
     $stmt->bindParam(":lastname", $lastname, PDO::PARAM_STR); 
     $stmt->bindParam(":phone", $phone, PDO::PARAM_STR); 
     $stmt->bindParam(":profileText", $profileText, PDO::PARAM_STR); 
     $stmt->bindParam(":website", $website, PDO::PARAM_STR); 
     $stmt->bindParam(":username", $username, PDO::PARAM_STR); 

     $stmt->execute(); 
    } else { 
     // tell them to fill in all of their details 
    } 
} 
+0

Спасибо, но он по-прежнему не обновляет профиль пользователей. Дамп var выглядит следующим образом: 'array (5) {[" firstname "] => string (4)" test "[" lastname "] => string (4)" test "[" phone "] => string (8) "00000000" ["profileText"] => string (4) "test" ["website"] => string (4) "test"} ' – user3442879

+0

Как насчет вашего имени пользователя? Что произойдет, если вы просто просто произнесете имя пользователя? Если вы ничего не получите, вы должны поместить 'session_start();' перед установкой переменной '$ username'. –

+0

Если i echo $ _SESSION ['username'], я получаю имя пользователя .. – user3442879