Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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
Php 复选框中的任意值导致难以在PDO上执行SQL语句_Php_Mysql_Checkbox_Pdo - Fatal编程技术网

Php 复选框中的任意值导致难以在PDO上执行SQL语句

Php 复选框中的任意值导致难以在PDO上执行SQL语句,php,mysql,checkbox,pdo,Php,Mysql,Checkbox,Pdo,先生们!我有一个用PDO处理多行更新的php脚本。 如果勾选,我想添加一个复选框,从现在起30天内按时间戳更新我的数据库特定列 问题是ofc,当它没有被勾选时,不会有值发送到它的键,所以我会得到:它返回这个错误 未捕获异常“PDOException”,消息为SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解要使用的正确语法 因此,我请求帮助,如果有转机,这里是我的PHP代码: if (isset($_POST['sub

先生们!我有一个用PDO处理多行更新的php脚本。 如果勾选,我想添加一个复选框,从现在起30天内按时间戳更新我的数据库特定列

问题是ofc,当它没有被勾选时,不会有值发送到它的键,所以我会得到:它返回这个错误

未捕获异常“PDOException”,消息为SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解要使用的正确语法

因此,我请求帮助,如果有转机,这里是我的PHP代码:

if (isset($_POST['submit'])) {
    $stmt = $db->prepare("UPDATE `$tbl_name` SET `ssl`=:ssl, `exp`=:exp, `country`=:country, WHERE id=:id");
    $stmt->bindParam(':id', $id, PDO::PARAM_INT);
    $stmt->bindParam(':ssl', $ssl, PDO::PARAM_STR);
    $stmt->bindParam(':exp', $exp, PDO::PARAM_STR);
    $stmt->bindParam(':country', $country, PDO::PARAM_STR);
    foreach ($_POST['ssl'] as $id => $ssl) {
        if(isset($_POST['thirtydays'][$id])){ 
            $exp = $_POST['thirtydays'][$id]; 
        }
        $country = $_POST['country'][$id];
        $stmt->execute();
    }

    echo '<h1>Updated the records.</h1>';
}
if(isset($\u POST['submit'])){
$stmt=$db->prepare(“更新`$tbl_name`SET`ssl`=:ssl,`exp`=:exp,`country`=:country,其中id=:id”);
$stmt->bindParam(':id',$id,PDO::PARAM_INT);
$stmt->bindParam(':ssl',$ssl,PDO::PARAM_STR);
$stmt->bindParam(':exp',$exp,PDO::PARAM_STR);
$stmt->bindParam(':country',$country,PDO::PARAM_STR);
foreach($\u POST['ssl']作为$id=>$ssl){
如果(isset($_POST['thirtyday'][$id]){
$exp=$_POST['thirtydays'][$id];
}
$country=$_POST['country'][$id];
$stmt->execute();
}
echo“更新了记录”;
}
exp是时间戳列。以下是作为HTML的复选框:

<input type="checkbox" name="thirtydays[80]" value="2014-02-04 04:04:53"> 
<input type="text" name="country[80]" value="DE" />
<input type="text" name="ssl[80]" value="false"/>

注意结构:
thirtydays[$id]
,值中的时间戳由
date(“Y-m-d H:i:s”,strotime(+30天))生成。

希望有人能帮助我。提前感谢并提供更多功能。

$exp=''$国家=''$ssl='';
$exp=''; $country=''; $ssl='';

if (isset($_POST['submit'])) {
    $stmt = $db->prepare("UPDATE `$tbl_name` SET `ssl`=:ssl, `exp`=:exp, `country`=:country WHERE id=:id");
    $stmt->bindParam(':id', $id, PDO::PARAM_INT);
    $stmt->bindParam(':ssl', $ssl, PDO::PARAM_STR);
    $stmt->bindParam(':exp', $exp, PDO::PARAM_STR);
    $stmt->bindParam(':country', $country, PDO::PARAM_STR);
    foreach ($_POST['ssl'] as $id => $ssl) {
    if(isset($_POST['thirtydays'][$id])){ $exp = $_POST['thirtydays'][$id]; }
    $country = $_POST['country'][$id];
    $stmt->execute();
    }

    echo '<h1>Updated the records.</h1>';
如果(isset($_POST['submit'])){ $stmt=$db->prepare(“更新`$tbl_name`SET`ssl`=:ssl,`exp`=:exp,`country`=:country WHERE id=:id”); $stmt->bindParam(':id',$id,PDO::PARAM_INT); $stmt->bindParam(':ssl',$ssl,PDO::PARAM_STR); $stmt->bindParam(':exp',$exp,PDO::PARAM_STR); $stmt->bindParam(':country',$country,PDO::PARAM_STR); foreach($\u POST['ssl']作为$id=>$ssl){ 如果(设置($_POST['thirtydays'][$id]){$exp=$_POST['thirtydays'][$id];} $country=$_POST['country'][$id]; $stmt->execute(); } echo“更新了记录”;
查询仅在选中复选框后执行,因为
if(isset($\u POST['thirtyday'][$id])

此外,在将
$exp
变量绑定到语句后,还可以设置该变量。 这同样适用于
$country
变量

if (isset($_POST['submit'])) {  
    $stmt = $db->prepare("UPDATE `$tbl_name` SET `ssl`=:ssl, `exp`=:exp, `country`=:country WHERE id=:id");  
    $stmt->bindParam(':id', $id, PDO::PARAM_INT);  
    $stmt->bindParam(':ssl', $ssl, PDO::PARAM_STR);  
    foreach ($_POST['ssl'] as $id => $ssl) {  
        if(isset($_POST['thirtydays'][$id])){   
            $exp = $_POST['thirtydays'][$id];  
        } else {  
            $exp = '';  
    }  
    $country = $_POST['country'][$id];  
    $stmt->bindParam(':exp', $exp, PDO::PARAM_STR);  
    $stmt->bindParam(':country', $country, PDO::PARAM_STR);  
    $stmt->execute();  
}  

echo '<h1>Updated the records.</h1>'; }
if(isset($_POST['submit']){
$stmt=$db->prepare(“更新`$tbl_name`SET`ssl`=:ssl,`exp`=:exp,`country`=:country WHERE id=:id”);
$stmt->bindParam(':id',$id,PDO::PARAM_INT);
$stmt->bindParam(':ssl',$ssl,PDO::PARAM_STR);
foreach($_POST['ssl']作为$id=>$ssl){
如果(isset($_POST['thirtyday'][$id]){
$exp=$_POST['thirtydays'][$id];
}否则{
$exp='';
}  
$country=$_POST['country'][$id];
$stmt->bindParam(':exp',$exp,PDO::PARAM_STR);
$stmt->bindParam(':country',$country,PDO::PARAM_STR);
$stmt->execute();
}  
echo“更新了记录”。;}

语句中WHERE前面有逗号。这可能是问题所在。

所有想知道的人(可能)OP代码的实际错误是什么:在
UPDATE`$tbl_name`SET`ssl`=:ssl,`exp`=:exp,`country`=:country,其中id=:id
WHERE
之前的逗号是一个语法错误。仅此而已。

缺少
country
左侧的第一个反勾号,除非这只是一个输入错误。@Fred ii-I更新,显示表单确实存在错误es确实存在。在我选中复选框之前,表单和PHP都在工作。我是说在你的查询中,它说
country=:country
,你缺少了一个backtick。第一个开头。@Fred ii-哦,对不起,我过度擦除了它。但仍然不工作。那么你是说只有当字段为空时才会发生错误?先生,if statement在$stmt->execute()之前关闭;你是对的,我的错误。尝试移动
$stmt->bindParam(':exp',$exp,PDO::PARAM_STR);
$stmt->bindParam(':country',$country,PDO::PARAM_STR);
在foreach loopYes中定义
$exp
$country
变量后,逗号是问题所在,因此PDO错误已停止。非常感谢您,现在关于发送值…先生,我们不能空$exp,要么我们使用新值更新exp,要么该值必须保留其原始值。发送空值将导致emp返回原始列,更像:if(isset($\u POST['thirtydays'][$id]){$exp=$\u POST['thirtydays'][$id];}否则{//什么都不做}