为什么这不起作用?
<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值。
答案 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();
}