有没有一种方法可以将数据从2种不同的表单中插入并插入到列的1行中?

时间:2019-11-19 18:41:33

标签: php mysql sql database forms

我有一个用户表,该表具有以下几列:user_id,用户名,名字,姓氏,电子邮件,令牌,密码,位置,电话。

我在两个不同的页面上有2个表格。 1. registration.php 2. user_info.php。

在registration.php中,我正在获取用户的电子邮件,用户名和密码。在user_info.php中,我得到了用户的名字,姓氏,国家/地区,电话。

我想将两个表单数据都插入一行。所以有办法吗?

现在输入我的代码。它将两种表单中的信息插入数据库,但将每种表单中的数据插入2个不同的行中。

这是我的 registration.php

<?php

if (isset($_POST['signup-submit'])) {

$url = "https://www.google.com/recaptcha/api/siteverify";
$data = ['secret' => "[xxxx]", 'response' => $_POST['token'], 'remoteip' => $_SERVER['REMOTE_ADDR']];
$options = array('http' => array('header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => 'POST', 'content' => http_build_query($data)));
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
$res = json_decode($response, true);

    if ($res['success'] == true) {

        require("dbh.inc.php");
        require("functions.php");

        $username = escape($_POST['username']);
        $email = escape($_POST['email']);
        $token = bin2hex(random_bytes(50));
        $password = escape($_POST['password']);
        $passwordRepeat = escape($_POST['confirm_password']);

        if (empty($username) || empty($email) || empty($password) || empty($passwordRepeat)) {

        header("Location: ../registration.php?error=emptyfields");
        exit(); 

        } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL) || !preg_match("/^[a-zA-Z0-9]*$/", $username)) {

        header("Location: ../registration.php?error=invalidmailuid");
        exit();

        } elseif (strlen($username) <= '6') {

        header("Location: ../registration.php?error=usernamecheck");
        exit();

        } elseif (strlen($password) <= '8') {

        header("Location: ../registration.php?error=passwordcheck");
        exit();

        } elseif ($password !== $passwordRepeat) {

        header("Location: ../registration.php?error=passwordverify");
        exit();

        } else {

        $sql = "SELECT username, email FROM users WHERE username = ? AND email = ?";
        $stmt = mysqli_stmt_init($connection);
        if (!mysqli_stmt_prepare($stmt, $sql)) {            
        header("Location: ../registration.php?error=sqlerror");
        exit(); 

        } else {

        mysqli_stmt_bind_param($stmt, "ss", $username, $email);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_store_result($stmt);
        $resultCheck = mysqli_stmt_num_rows($stmt);

        if ($resultCheck > 0) {
            header("Location: ../registration.php?error=usermailtaken");
            exit(); 

        } else {

            $sql = "INSERT INTO users(username, email, password, token, joined) VALUES(?, ?, ?, ?, now())";
            $stmt = mysqli_stmt_init($connection);
            if (!mysqli_stmt_prepare($stmt, $sql)) {            
            header("Location: ../registration.php?error=sqlerror2");
            exit();

          } else {

            $hashed_password = password_hash($password, PASSWORD_DEFAULT);

            mysqli_stmt_bind_param($stmt, "ssss", $username, $email, $hashed_password, $token);
            mysqli_stmt_execute($stmt);
            header("Location: ../user_info.php");
            exit(); 

                }   
            }
        }   
    }
mysqli_stmt_close($stmt);
mysqli_close($connection);  

} else {
    header("Location: ../registration.php?error=captcha");
    exit();         
}

} else {
    header("Location: ../registration.php?error=emptyfields");
    exit();         
}

这是我的 user_info.php

<?php 

if (isset($_POST['profile-submit'])) {

    require("dbh.inc.php");
    require("functions.php");

    $first_name = $_POST['first_name']; 
    $last_name = $_POST['last_name'];
    $location = $_POST['location'];
    $phone = $_POST['phone_number'];

    if (empty($first_name) || empty($last_name) || empty($location) || empty($phone)) {

        header("Location: ../user_info.php?error=emptyfields");
        exit();

    } else {

        $sql = "INSERT INTO users(first_name, last_name, location, phone) VALUES(?, ?, ?, ?)";
        $stmt = mysqli_stmt_init($connection);
        if (!mysqli_stmt_prepare($stmt, $sql)) {            
        header("Location: ../user_info.php?error=sqlerror");
        exit(); 

    } else {

        mysqli_stmt_bind_param($stmt, "sssi", $first_name, $last_name, $location, $phone);
        mysqli_stmt_execute($stmt);
        header("Location: ../index.php?signup=success");
        exit();     

        }
    }
    mysqli_stmt_close($stmt);
    mysqli_close($connection);

} else {
    header("Location: ../user_info.php?error");
    exit();         
}

2 个答案:

答案 0 :(得分:1)

registration.php 中,您需要先获取最后插入的ID,然后再转到user_info.php

stepExecutionRequestQueue

user_info.php中的查询中使用id = $ _GET ['id']

的更新
2019-11-19 12:15:06,565 | DEBUG | Setting up new connection | org.apache.activemq.broker.TransportConnection

答案 1 :(得分:1)

您需要在UPDATE上使用INSERT而不是user_info.php

INSERT添加新行。 https://dev.mysql.com/doc/refman/8.0/en/insert.html

  

INSERT将新行插入到现有表中。

UPDATE连续修改数据。 https://dev.mysql.com/doc/refman/8.0/en/update.html

  

UPDATE是DML语句,用于修改表中的行。

执行UPDATE时,需要添加一个WHERE子句以仅更新所需的行。您通常使用主键来完成此操作,在这种情况下,我假设主键为user_id

您可以使用mysqli_insert_id($connection)来获取INSERT查询运行后插入的最后一个ID。我建议然后将其存储在$_SESSION变量中,然后通过POST或GET在user_info.php上进行访问而不是传递。这样,另一个用户不仅可以在GET或POST请求中键入ID并更新另一个用户的信息。这是一些指导您的代码。

registration.php

//start the session
session_start();
...
...
} else {

    mysqli_stmt_bind_param($stmt, "sssi", $first_name, $last_name, $location, $phone);
    mysqli_stmt_execute($stmt);
    $_SESSION['user_id'] = mysqli_insert_id($connection);
    header("Location: ../index.php?signup=success");
    exit();     

    }
}
....
....

user_info.php

....
....
  if (empty($first_name) || empty($last_name) || empty($location) || empty($phone) || !isset($_SESSION['user_id')) {

    header("Location: ../user_info.php?error=emptyfields");
    exit();

} else {

    $sql = "UPDATE users SET first_name = ?, last_name = ?, location = ?, phone =? WHERE user_id = ?";
    $stmt = mysqli_stmt_init($connection);
    if (!mysqli_stmt_prepare($stmt, $sql)) {            
    header("Location: ../user_info.php?error=sqlerror");
    exit(); 

} else {

    mysqli_stmt_bind_param($stmt, "sssi", $first_name, $last_name, $location, $phone, $_SESSION['user_id']);
    mysqli_stmt_execute($stmt);
    header("Location: ../index.php?signup=success");
    exit();     

    }
....
....