簡體   English   中英

PHP 腳本:如何返回正在寫入的 SQL 記錄的 ID 字段(主鍵自增 1)的值

[英]PHP Scripting: How to return the value of the ID field (primary key auto-increment 1) of the SQL record being written to

I'm creating a multi-page web survey form, and I have a PHP script process.php that takes my responses on www.buythosecars.com and places them in a mySQL table and redirects the user to www.buythosecars.com/survey_two .html

我想將存儲響應的 users_data 表記錄中的ID 值傳遞給survey_two,以便將survey_two 中的結果與第一頁的結果發布到 user_data 中的同一記錄中。

這里的想法是,survey_respondants 不需要登錄或以其他方式表明自己的身份來回答調查。

我認為 $_GET 可能是這樣; 但我是 PHP 的新手....

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {//Check it is coming from a form

    //mysql credentials
    $mysql_host = "buythosecarscom.fatcowmysql.com";
    $mysql_username = "[redacted]";
    $mysql_password = "[redacted]";
    $mysql_database = "buythatcar";
    
//header("Location: survey_two.html");

    $u_q1 = filter_var($_POST["question_1"], FILTER_SANITIZE_STRING); //set PHP variables like this so we can use them anywhere in code below
    $u_q2 = filter_var($_POST["question_2"], FILTER_SANITIZE_STRING);
    $u_q3 = filter_var($_POST["question_3"], FILTER_SANITIZE_STRING);
        $u_q4 = filter_var($_POST["question_4"], FILTER_SANITIZE_STRING);
        $u_q4b = filter_var($_POST["question_4b"], FILTER_SANITIZE_STRING);
        $u_q5 = filter_var($_POST["question_5"], FILTER_SANITIZE_STRING);        
        $u_q6 = filter_var($_POST["question_6"], FILTER_SANITIZE_STRING);
        $u_q7 = filter_var($_POST["question_7"], FILTER_SANITIZE_STRING);
        $u_q8 = filter_var($_POST["question_8"], FILTER_SANITIZE_STRING);
        $u_q9 = filter_var($_POST["question_9"], FILTER_SANITIZE_STRING);
        $u_q10 = filter_var($_POST["question_10"], FILTER_SANITIZE_STRING);

    //Open a new connection to the MySQL server
    $mysqli = new mysqli($mysql_host, $mysql_username, $mysql_password, $mysql_database);
    
    //Output any connection error
    if ($mysqli->connect_error) {
        die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    }   
    
    $statement = $mysqli->prepare("INSERT INTO users_data (question_1, question_2, question_3, question_4, question_4b, question_5, question_6, question_7, question_8, question_9, question_10) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); //prepare sql insert query
    //bind parameters for markers, where (s = string, i = integer, d = double,  b = blob)
    $statement->bind_param('sssssssssss', $u_q1, $u_q2, $u_q3, $u_q4, $u_q4b, $u_q5, $u_q6, $u_q7, $u_q8,  $u_q9, $u_q10); //bind values and execute insert query
    
    if($statement->execute()){
//Modify to print the ID of the record where the response to question 3 has 
//been entered instead of the response to question 3        
print "Hello " . $u_q3 . "!, your message has been saved!";
    }else{
        print $mysqli->error; //show mysql error if any
    }
}
?>

當您保存該值時,您會自動將用戶重定向到第二頁。 此時,您可以簡單地獲取最近插入的值:

$mysqli->insert_id

這不太可能不是您的目標,但請注意,如果另一個用戶同時輸入他們的信息,這可能是精確時間和大量用戶的問題

為了防止這種情況,我建議根據第一頁中傳遞的唯一信息,簡單地檢索第二頁上的信息。 考慮到您正在使用汽車,車牌號或 VIN 將是您可以保存的唯一信息的一個很好的示例。

然后在下一頁上,您可以使用以下內容檢索目標:

$targetVIN = 1; // Logic to target your user based on unique ID
$query = "SELECT * FROM `cars` WHERE `vin` = " . $targetVIN;
$result = $mysqli->query($query);
while ($car = $result->fetch_object()) {
    // Access properties via $car->vin, etc.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM