PDO插入成功后的重定向函数


Redirect function after successful PDO insert

简而言之,我正在寻找一种在成功插入PDO后进行重定向的方法。以下是我到目前为止写的。

重定向

<?php
function redirect_to($new_location) {
      header("Location: " . $new_location);
      exit;
    }
?>

PDO插入

请注意,我在下面的例子中修改了一些代码,使其更容易阅读。

try {
        $sql = "INSERT INTO location_info (`department`, `participant`, `activity`, `location`, `rec_injuries`, `rec_injuries_timeframe`, `non_rec_injuries` )
        VALUES (:department, :participant, :activity, :location, :rec_injuries, :rec_injuries_timeframe, :non_rec_injuries, :non_rec_injuries_timeframe, '{$id}')";
        $stmt = $db->prepare($sql);
for($i = 0, $l = count($_POST["department_name"]); $i < $l; $i++) { 
    $loc_info = array(':department' => $_POST["department_name"][$i],
                        ':rec_injuries_timeframe' => $_POST["injury_time_frame"][$i],
                        ':non_rec_injuries' => $_POST["non_rec_injuries"][$i],
                        ':non_rec_injuries_timeframe' => $_POST["non_rec_injury_timeframe"][$i],
                        ':competitor' => $_POST["competitor"][$i],
                        ':cost_per_pair' => $_POST["cost_per_pair"][$i],
                        ':usage_rate' => $_POST["usage_rate"][$i],
                        ':leakage' => $_POST["leakage"][$i],
                        ':cost_of_productivity' => $_POST["cost_of_productivity"][$i],
                        ':non_rec_impact' => $_POST["non_rec_impact"][$i],
                        ':non_rec_sprain' => $_POST["non_rec_sprain"][$i],
                        ':non_rec_puncture' => $_POST["non_rec_puncture"][$i],
                        ':non_rec_dermatitis' => $_POST["non_rec_dermatitis"][$i],
                        ':non_rec_infection' => $_POST["non_rec_infection"][$i],
                        ':non_rec_burns' => $_POST["non_rec_burns"][$i],
                        ':non_rec_cuts' => $_POST["non_rec_cuts"][$i],
                        ':rec_impact' => $_POST["impact"][$i],
                        ':rec_sprain' => $_POST["sprain"][$i],
                        ':rec_puncture' => $_POST["puncture"][$i],
                        ':rec_dermatitis' => $_POST["dermatitis"][$i],
                        ':rec_infection' => $_POST["infection"][$i],
                        ':rec_burns' => $_POST["burns"][$i],
                        ':rec_cuts' => $_POST["cuts"][$i],
                        ':condition' => $_POST["condition"][$i] );
$stmt->execute($loc_info);
}
 if ($stmt->execute()) {
        redirect_to($_SERVER["DOCUMENT_ROOT"]."/testing/tim/results.php"); 
}
}
 catch (Exception $e) {
        $error = $e->getMessage();
        print "<b>error:</b> " . $error;
    }   

你会看到我有一个if语句用于if ($stmt->execute()) { redirect_to($_SERVER["DOCUMENT_ROOT"]."/testing/tim/results.php");

重定向

我哪里错了?

我哪里错了?

当你添加了很多无用的代码。

下面是你需要的完整代码(保存数组):
$sql = "INSERT INTO location_info (`department`, `participant`, `activity`, `location`, `rec_injuries`, `rec_injuries_timeframe`, `non_rec_injuries` )
    VALUES (:department, :participant, :activity, :location, :rec_injuries, :rec_injuries_timeframe, :non_rec_injuries, :non_rec_injuries_timeframe, '{$id}')";
$stmt = $db->prepare($sql);
for($i = 0, $l = count($_POST["department_name"]); $i < $l; $i++) { 
    $loc_info = array(
        ':department' => $_POST["department_name"][$i],
        ':condition' => $_POST["condition"][$i]
    );
    $stmt->execute($loc_info);
}
redirect_to("/testing/tim/results.php"); 

就这些。

此代码将重定向,如果所有执行将成功执行。

你这里有一点结构问题…

如果你想要执行不确定数量的查询,然后在所有查询都成功执行后重定向,那么你需要跟踪所有语句的执行和错误。

如果你想在第一次遇到错误时抛出错误,并停止插入,那么你只需检查执行函数的返回结果,如果失败则抛出错误:

$sql = "INSERT INTO location_info (`department`, `participant`, `activity`, `location`, `rec_injuries`, `rec_injuries_timeframe`, `non_rec_injuries` )
    VALUES (:department, :participant, :activity, :location, :rec_injuries, :rec_injuries_timeframe, :non_rec_injuries, :non_rec_injuries_timeframe, '{$id}')";
$stmt = $db->prepare($sql);
$errors = array();
for($i = 0, $l = count($_POST["department_name"]); $i < $l; $i++) { 
    $loc_info = array(':department' => $_POST["department_name"][$i],
                    ':rec_injuries_timeframe' => $_POST["injury_time_frame"][$i],
                    ':non_rec_injuries' => $_POST["non_rec_injuries"][$i],
                    ':non_rec_injuries_timeframe' => $_POST["non_rec_injury_timeframe"][$i],
                    ':competitor' => $_POST["competitor"][$i],
                    ':cost_per_pair' => $_POST["cost_per_pair"][$i],
                    ':usage_rate' => $_POST["usage_rate"][$i],
                    ':leakage' => $_POST["leakage"][$i],
                    ':cost_of_productivity' => $_POST["cost_of_productivity"][$i],
                    ':non_rec_impact' => $_POST["non_rec_impact"][$i],
                    ':non_rec_sprain' => $_POST["non_rec_sprain"][$i],
                    ':non_rec_puncture' => $_POST["non_rec_puncture"][$i],
                    ':non_rec_dermatitis' => $_POST["non_rec_dermatitis"][$i],
                    ':non_rec_infection' => $_POST["non_rec_infection"][$i],
                    ':non_rec_burns' => $_POST["non_rec_burns"][$i],
                    ':non_rec_cuts' => $_POST["non_rec_cuts"][$i],
                    ':rec_impact' => $_POST["impact"][$i],
                    ':rec_sprain' => $_POST["sprain"][$i],
                    ':rec_puncture' => $_POST["puncture"][$i],
                    ':rec_dermatitis' => $_POST["dermatitis"][$i],
                    ':rec_infection' => $_POST["infection"][$i],
                    ':rec_burns' => $_POST["burns"][$i],
                    ':rec_cuts' => $_POST["cuts"][$i],
                    ':condition' => $_POST["condition"][$i] );
    if(!$stmt->execute($loc_info)){
        $errors[] = $e->getMessage();
        // un-comment if you want to stop on error:
        // print "<b>error:</b> " . $e->getMessage();
        // die();
    };
}
if(count($errors)){
    foreach($errors as $error){
        print "<b>error:</b> " . $e->getMessage()."<br/>";
    }
} else {
    redirect_to($_SERVER["DOCUMENT_ROOT"]."/testing/tim/results.php");
}