2015-03-30 72 views
0

我是相当新的php。我得到行($ stmt-> bindParam(“:e1”,$ _POST ['eidosmetaf1']);)错误“Undefined variable:stmt在“。这似乎是一个基本的错误,但我无法弄清楚。所以,任何帮助表示赞赏php - 未定义的变量:stmt in

<?php 

require("config.inc.php"); 

    $query = "UPDATE customer SET "; 
if(isset($_POST['eidosmetaf1'])){ 
$stmt->bindParam(":e1", $_POST['eidosmetaf1']); 
    $query .= "eidosmetaf1 = :e1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['weight1'])){ 
$stmt->bindParam(":w1", $_POST['weight1']); 
    $query .= "weight1 = :w1"; 
} 

    $query = "UPDATE customer SET "; 
if(isset($_POST['startNomos1'])){ 
$stmt->bindParam(":sn1", $_POST['startNomos1']); 
    $query .= "startNomos1 = :sn1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['startPoli1'])){ 
$stmt->bindParam(":sc1", $_POST['startPoli1']); 
    $query .= "startPoli1 = :sc1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['start_lat'])){ 
$stmt->bindParam(":slat1", $_POST['start_lat']); 
    $query .= "start_lat = :slat1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['start_lng'])){ 
$stmt->bindParam(":slng1", $_POST['start_lng']); 
    $query .= "start_lng = :slng1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['finalNomos1'])){ 
$stmt->bindParam(":fn1", $_POST['finalNomos1']); 
    $query .= "finalNomos1 = :fn1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['finalPoli1'])){ 
$stmt->bindParam(":fc1", $_POST['finalPoli1']); 
    $query .= "finalPoli1 = :fc1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['final_lat'])){ 
$stmt->bindParam(":flat1", $_POST['final_lat']); 
    $query .= "final_lat = :flat1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['final_lng'])){ 
$stmt->bindParam(":flng1", $_POST['final_lng']); 
    $query .= "final_lng = :flng1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['depDate1'])){ 
$stmt->bindParam(":dD1", $_POST['depDate1']); 
    $query .= "depDate1 = :dD1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['depTime1'])){ 
$stmt->bindParam(":dT1", $_POST['depTime1']); 
    $query .= "depTime1 = :dT1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['specialservices1'])){ 
$stmt->bindParam(":ex1", $_POST['specialservices1']); 
    $query .= "specialservices1 = :ex1"; 
} 

$query = "UPDATE customer SET "; 
if(isset($_POST['comments1'])){ 
$stmt->bindParam(":c1", $_POST['comments1']); 
    $query .= "comments1 = :c1"; 
} 


    try { 
     $stmt = $db->prepare($query); 
     $stmt->execute(); 
    } 
    catch (PDOException $ex) { 

     $response["success"] = 0; 
     $response["message"] = "Database Error2. Please Try Again!"; 
     die(json_encode($response)); 
    }  

    $response["success"] = 1; 
    $response["message"] = "..............!"; 
    echo json_encode($response); 


?> 
+0

首先准备语句然后绑定你的价值观 – Rizier123 2015-03-30 19:09:53

+0

准备好你的语句,然后绑定值。 – 2015-03-30 19:11:46

+0

抱歉,您的意思是移动“$ stmt = $ db-> prepare($ query);”在顶端; – johnnal 2015-03-30 19:13:12

回答

1

你在这里搞了几件事!

你绑定你的价值观之前,您需要准备您的查询,否则怎么PHP的应该知道在哪里以及如何应不当时存在的查询值绑定!还要在每个if语句之前覆盖$query变量。

所以,你的代码应该是这个样子:

在这里,我先通过其持有的占位符指数和POST变量指数值,在那里我有array_filter()$_POST变量的设置和检查数组$checkPostIndex哪些不是,我使用isset()来处理,并将其过滤掉。

在此之后,我循环访问$checkedValues数组,该数组保存的数据与$checkPostIndex完全相同,但只能使用设置的POST变量。通过这个,我创建了查询并创建了占位符数组,该占位符数组将占位符保存为索引,将POST变量值保存为值。

然后,我只需要从查询字符串中修剪最后一个逗号rtrim(),然后就可以执行查询了。

<?php 

    require_once "config.inc.php"; 

    $query = "UPDATE customer SET "; 
    $checkPostIndex = ["e1" => "eidosmetaf1", "w1" => "weight1", "sn1" => "startNomos1", "sc1" => "startPoli1", "slat1" => "start_lat", "slng1" => "start_lng", "fn1" => "finalNomos1", 
    "fc1" => "finalPoli1", "flat1" => "final_lat", "flng1" => "final_lng", "dD1" => "depDate1", "dT1" => "depTime1", "ex1" => "specialservices1", "c1" => "comments1"]; 
    $bindValues = []; 

    $checkedValues = array_filter($checkPostIndex, function($v){ 
     return isset($_POST[$v]); 
    }); 

    foreach($checkedValues as $k => $v) { 
     $query .= "$v = :$k,"; 
     $bindValues[$k] = $_POST[$v]; 
    } 

    $query = rtrim($query, ","); 

    try {   
     $stmt = $db->prepare($query); 
     $stmt->execute($binValues);   
    } catch (PDOException $ex) { 
     $response["success"] = 0; 
     $response["message"] = "Database Error2. Please Try Again!"; 
     echo $ex->getMessage(); 
     die(json_encode($response)); 
    }  

    $response["success"] = 1; 
    $response["message"] = "..............!"; 
    echo json_encode($response); 

?> 

旁注:

我会建议你在你的文件(S),可帮助您查找错误的顶部添加error reporting。只有当分期(不生产!):

<?php 
    ini_set("display_errors", 1); 
    error_reporting(E_ALL); 
?> 

也使error mode为连接后立即您的PDO连接:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

也许你及彼查询errer;) – 2015-03-30 19:47:10

+0

@superduperawesomephpexpert为什么? – Rizier123 2015-03-30 19:53:55

+0

非常详细的答案。谢谢 – johnnal 2015-03-30 20:00:12

0
require("config.inc.php"); 
$query=array(); 
foreach(array('eidosmetaf1','...') as $k){ 
if(isset($_POST[$k])){ 
    $query[]= "$k = :$k"; 
} 
} 
$query = "UPDATE customer SET ".imolde(',',$query); 
$query .= "";#where clause is missing 
try { 

    $stmt = $db->prepare($query); 
    foreach(array('eidosmetaf1','...') as $k){ 
     if(isset($_POST[$k])){ 
      $stmt->bindParam(":$k", $_POST[$k]); 
     } 
    } 
    $stmt->execute(); 
} catch (PDOException $ex) { 
$response["success"] = 0; 
$response["message"] = "Database Error2. Please Try Again!"; 
die(json_encode($response)); 
}  

$response["success"] = 1; 
$response["message"] = "..............!"; 
echo json_encode($response); 

试试这样:准备语句字符串创建PDO ,备查询BIND PARAMS,EXECUTE