如何将年龄转换为年龄范围并插入数据库

1wnzp6jl  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(296)

我有一个任务要在一小时内完成。我有一个表单,它将记录添加到数据库中,如下所示

$member_age = $_POST['member_age'];
$ins = @mysql_query("INSERT INTO test SET member_age='$member_age'");

我有一个新任务,它要求我将成员的年龄转换成一个年龄范围,然后,最后,将这个年龄范围插入一个名为 age_range .
年龄范围如下:
7-9年
10-13年
14-17岁
18+
预期的输入可能是,12。此行为之后的预期输出应为10-13。我怎样才能做到这一点?

cbwuti44

cbwuti441#

最重要的是, @ 很明显地表明了这一点 mysql_* 实际上,在php5.6之后被完全删除(这是有原因的)。所以,我用pdo回答这个问题是为了你的学习。
其次,你的问题是非常不清楚,所以我要回答它,因为我认为它。你可以在w34l上看到这个。
更新:有一些问题 PDOStatement::execute() 在这里,我忘记了将绑定值作为数组传递,并添加了一些信息和“继续”指针。


# Lets first check it is set and is numeric

if ( !isset ( $_POST['member_age'] ) && !is_numeric ( $_POST['member_age'] ) )
    die ( 'Missing argument or argument is not numeric.' );

# Establish connection to DB

try {
    $pdo = new \PDO ( 'mysql:host=localhost;dbname=test;', 'username', 'password' , [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false
    ] );
} catch ( \PDOException $e ) die ( $e->getMessage () ); # Debug

# Insert new record into test

$stmt = $pdo->prepare ( 'INSERT INTO test (member_age) VALUES (?);' );
$stmt->execute ( array ( $_POST['member_age'] ) );

unset($stmt); # Clean up

# Create a configuration for ages

$ageRange = [
    '0-6'   => [0,1,2,3,4,5,6],
    '7-9'   => [7,8,9],
    '10-13' => [10,11,12,13],
    '14-17' => [14,15,16,16]
    # 18+ will be if this returns empty
];

# Loop through age configuration to find age range

foreach ( $ageRange as $range => $ages) {
    if ( in_array ( $_POST['member_age'], $ages ) ) {
       # Insert the age range
       $stmt = $pdo->prepare ( 'INSERT INTO age_range (age_range) VALUES (?)' );
       $stmt->execute ( [$range] );
       exit();
    }
}

# If it got here, they must be 18 or over

$stmt = $pdo->prepare ( 'INSERT INTO age_range (age_range) VALUES (?)' );
$stmt->execute ( ['18+'] );

我假设您有一个表,您希望根据给定的值存储用户年龄范围。因此,如果给定的年龄值是12,则需要在该表中插入10-13。希望这能回答你的问题。
注意,您可以使用 $pdo->lastInsertId ()test table。然后你可以把这个贴在你的手机上 age_range 表,以便可以将信息与 test 确保解决方案的完整性。看到它在dbfiddle工作了吗

foreach ( $ageRange as $range => $ages) {
    if ( in_array ( $_POST['member_age'], $ages ) ) {
       # Insert the age range
       $stmt = $pdo->prepare ( 'INSERT INTO age_range (age_range, testId) VALUES (?, ?)' );
       $stmt->execute ( array ( $range, $pdo->lastInsertId () ) );
       exit();
    }
}

为了测试完整性,你可以用这样的方法

SELECT test.member_age, age_range.age_range
FROM age_range
INNER JOIN test
ON age_range.testId = test.id;

相关问题