PHP MySQL-插入用户输入名称和相应的id

PHP MySQL-插入用户输入名称和相应的id,php,mysql,Php,Mysql,我有两张桌子,会员和游戏。在成员中是诸如成员id、名字、姓氏等数据 我试图做的是为游戏创建一个表单,用户可以输入参与游戏的成员的名字和姓氏(在一个字符串中,而不是单独输入),一些PHP代码查询这个名字,找到相应的id并存储它。当然,member\u id是games中的外键,但是用户不会知道该成员的id,他们只知道自己的名字 如果有人能解释我将如何着手做这件事,我将不胜感激 表格: 形式 日期: 持续时间: 会员名称: 行动: <?php // database conn

我有两张桌子,
会员
游戏
。在
成员中
是诸如
成员id
名字
姓氏
等数据

我试图做的是为
游戏
创建一个表单,用户可以输入参与游戏的成员的名字和姓氏(在一个字符串中,而不是单独输入),一些PHP代码查询这个名字,找到相应的id并存储它。当然,
member\u id
games
中的外键,但是用户不会知道该成员的id,他们只知道自己的名字

如果有人能解释我将如何着手做这件事,我将不胜感激

表格:


形式

日期:

持续时间:

会员名称:

行动:

<?php

// database connection
include 'pdo_config.php';

try {
// new pdo connection
$conn = new PDO($dsn, $user, $pass, $opt);

// prepare statement and bind parameters
$stmt = $conn->prepare("INSERT INTO games (date, duration, member_id)
  VALUES (:date, :duration, :member_id)");

$stmt->bindParam(':date', $date);
$stmt->bindParam(':duration', $duration);
$stmt->bindParam(':member_id', $member_id);

// post data
$date = $_POST['date'];
$duration = $_POST['duration'];
$member_id = $_POST['member_id'];

// execute statement
$stmt->execute();

// success or error message
echo "New record created successfully";
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}

$conn = null;

?>

这应该行得通

要求用户在表单中输入成员名称而不是成员id。然后首先查询数据库,从成员名称中获取成员id

请记住从名称中搜索成员id不是一个好主意,因为您可能有多个同名成员

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form</title>
</head>
<body>
<form action="action.php" method="post">
    <p>
        <label for="date">Date:</label>
        <input type="date" name="date" id="date">
    </p>
    <p>
        <label for="duration">Duration:</label>
        <input type="time" name="duration" id="duration">
    </p>
    <p>
        <label for="member_name">Member Name:</label>
        <input type="text" name="member_name" id="member_name">
    </p>
    <input type="submit" value="Submit">
</form>
</body>
</html>

形式

日期:

持续时间:

会员名称:




@sinesine我无法尝试该代码,因为我尚未创建数据库。请让我知道,如果它不适合你,我会设法解决它没有担心,非常感谢你的回答。我现在就要测试它,我会告诉你会发生什么。
“注意,只有用户输入一个空格来分隔名称时,分解才能正常工作”
我不确定你在这里的意思,你是说用户必须在名字和姓氏之间输入一个空格,像约翰·史密斯那样的电脑能正常工作吗?他们会以其他方式输入名称吗?例如,像
JohnSmith
那样?@sinesine我在那里警告您,最好在表单中使用两种不同的输入,即名字和姓氏(而不是一个字符串)。因为如果用户输入,例如,两个或三个空格,它将无法正常工作。(永远不要相信用户…)我明白了!这是个好建议。顺便说一下,代码工作得很完美,谢谢!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form</title>
</head>
<body>
<form action="action.php" method="post">
    <p>
        <label for="date">Date:</label>
        <input type="date" name="date" id="date">
    </p>
    <p>
        <label for="duration">Duration:</label>
        <input type="time" name="duration" id="duration">
    </p>
    <p>
        <label for="member_name">Member Name:</label>
        <input type="text" name="member_name" id="member_name">
    </p>
    <input type="submit" value="Submit">
</form>
</body>
</html>
<?php

// database connection
include 'pdo_config.php';

try {
// new pdo connection
$conn = new PDO($dsn, $user, $pass, $opt);

// post data
$date = $_POST['date'];
$duration = $_POST['duration'];

// Note that the explode only works well if user inputs one blank space to separate the name
// You can try to improve the separation method or better use two different inputs in the form

$nameArray = explode(" ", $_POST['member_name']);
$first_name = $nameArray[0];
$last_name = $nameArray[1];

$statement = $conn->prepare("SELECT member_id FROM members WHERE first_name = :first_name AND last_name = :last_name");
$statement->execute(array(':fisrt_name' => $first_name, ':last_name' => $last_name));
$row = $statement->fetch();

$member_id = $row['member_id'];


// prepare statement and bind parameters
$stmt = $conn->prepare("INSERT INTO games (date, duration, member_id)
  VALUES (:date, :duration, :member_id)");

$stmt->bindParam(':date', $date);
$stmt->bindParam(':duration', $duration);
$stmt->bindParam(':member_id', $member_id);

// execute statement
$stmt->execute();

// success or error message
echo "New record created successfully";
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}

$conn = null;

?>