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

时间:2018-11-22 21:40:00

标签: php mysql forms

我有一个任务必须在一小时内完成。我有一个表单,可以将记录添加到数据库中,就像这样

$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。我该如何实现?

1 个答案:

答案 0 :(得分:1)

首先,@清楚地表明mysql_*在PHP 5.6之后已被贬值,实际上已经完全删除了(有原因)。因此,我正在使用PDO回答此问题,以使您受益匪浅。

第二,您的问题非常不清楚,因此我将按照我的回答进行回答。 You can see this working over at w34l

更新:PDOStatement::execute()有一些问题,我忘记了将绑定值作为数组传递,并添加了一些更多信息和“继续前进”指针。 < / p>

# 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表中获取主键列的值。然后,可以将其附加到age_range表中,以便可以将信息与test表进行交叉引用,以确保解决方案的完整性。 See it working over at 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;