Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ajax更新数据库不需要';行不通_Javascript_Php_Ajax - Fatal编程技术网

Javascript 使用ajax更新数据库不需要';行不通

Javascript 使用ajax更新数据库不需要';行不通,javascript,php,ajax,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='but

为什么这不起作用

<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>
profilesave.php

$('#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';
        }
    }
  });
});
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值

假设
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();
}

其中user=:“.$user.”“
?”??为什么要这样做,而不是像
:name
:sname
?变量
$user
来自
profilesave.php
脚本中?RamRaider,它来自代码顶部的另一个包含文件。它是经过测试的,它是存在的,并且具有支持价值。这是有效的,谢谢,但是。。。我的代码中有什么错误?它应该是正确的。不完全正确-您的最终sql看起来像
更新成员集名称=:名称,sname=:sname WHERE user=:“Fred”
~假设$user是Fred-注意Fred前面的前导冒号!确切地谢谢。