使用ajax进行数据库更新不起作用

时间:2017-01-10 08:42:31

标签: javascript php 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已经过测试,它存在且具有propper值。

数据库未更新 变量$user已经过测试,它存在且具有propper值。

1 个答案:

答案 0 :(得分: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();
}