2017-01-10 21 views
-1

これはなぜ機能しませんか?ajaxを使用したデータベース更新は機能しません

<form id='formprofile' autocomplete='off'> 
    <input type='text' name='name' value='<?php echo $row['name'];?>'> 
    <input type='text' name='sname' value='<?php echo $row['sname'];?>'> 
    <button type='button' id='btnsave'>Save</button> 
</form> 

javascriptの

$('#btnsave').click(function(){ 
$.ajax({ 
    url: 'profilesave.php', 
    type: 'post', 
    data: $('#formprofile').serialize(), 
    success: function(data) { 
     if (data =='empty'){ 
      alert ('something is missing!'); 
     } 
     else{ 
      alert ('profile saved'); 
      location.href = 'index.php'; 
     } 
    } 
    }); 
}); 

profilesave.php

extract($_POST); 

if ($name == ''){ 
    echo ('empty'); 
    exit(); 
} 

try { 
    $stmt = $db->prepare('UPDATE members SET name = :name, sname = :sname WHERE user = :"' . $user . '"'); 
    $stmt->execute(array(
    ":name" => $name, 
    ":sname" => $sname 
    )); 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
} 

データベースが更新されません。
変数$userがテストされています。存在し、プロッパ値を持っています。

データベースが更新されていません。
変数$userがテストされています。存在し、プロッパ値を持っています。

+1

'WHERE user =:" '。$ user。' "' ??なぜそれをし、 ':name'や':sname'のような名前付きパラメータとして持っていないのですか? – RamRaider

+0

'profilesave.php'スクリプトの' $ user'変数はどこにありますか? – RamRaider

+0

@RamRaider、コードの先頭にある別のインクルードファイルから来ています。それはテストされ、存在し、プロッパーの価値を持っています。 – bonaca

答えて

1

おそらくprofilesave.phpの内容が多いとします(すなわち、データベースのインクルードと$userなどの他の変数)。値を直接埋め込むのではなく、このようなプリペアドステートメントを作成するべきでしょう。文を実行しようとする前に、その文が正常に作成されたかどうかをテストできます。

try{ 

    $name = !empty($_POST['name']) ? $_POST['name'] : false; 
    $sname = !empty($_POST['sname']) ? $_POST['sname'] : false; 

    if($name && $sname){ 
     $stmt = $db->prepare('UPDATE members SET name = :name, sname = :sname WHERE user = :user'); 
     if($stmt){ 
      $stmt->execute(array(
        ':name'  => $name, 
        ':sname' => $sname, 
        ':user'  => $user 
       ) 
      ); 
     } else { 
      echo 'Prepared statement failed'; 
     } 
    } 
} catch(PDOException $e){ 
    echo $e->getMessage(); 
} 
+0

これはうまくいきますが、...私のコードの間違いは何ですか?それは正しいはずです。 – bonaca

+1

あなたの最終的なSQLは 'UPDATEメンバSET name =:name、sname =:sname WHERE user = =" Fred "'〜$ userがFredであると仮定します。 – RamRaider

+0

正確に。どうもありがとう。 – bonaca

関連する問題