Я довольно новичок в php. Я получаю строку ($ stmt-> bindParam (": e1", $ _POST ['eidosmetaf1']);) ошибка «Неопределенная переменная: 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); ?>
Вы здесь много всего делаете!
Вам необходимо подготовить свой запрос, прежде чем связывать свои значения, иначе как php узнает, где и как он должен связывать значение в запросе, который не существует в то время! Также вы переписываете переменную $query
перед каждым оператором if.
Поэтому ваш код должен выглядеть примерно так:
Здесь я сначала $checkPostIndex
через массив $checkPostIndex
который содержит местозаполнитель в качестве индекса и индекс переменной POST как значение, где я проверяю с помощью array_filter()
какие переменные $_POST
установлены, а какие нет, что я делаю с isset()
и отфильтруйте их.
После этого я $checkedValues
массив $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); ?>
Боковые заметки:
Я бы порекомендовал вам добавить отчет об ошибках в верхней части файла (ов), который поможет вам найти ошибки. Только во время постановки (не в производство!):
<?php ini_set("display_errors", 1); error_reporting(E_ALL); ?>
Также включите режим ошибки для вашего PDO-соединения сразу после подключения:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
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, ПОДГОТОВИТЬ ЗАПРОС, СЛУЧАЙНЫЕ ПАРАМЫ, ВЫПОЛНИТЬ