php - 如何将年龄转换为年龄范围并插入数据库
问题描述
我有一项任务必须在一小时内完成。我有一个向数据库添加记录的表单,如下所示
$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。我怎样才能做到这一点?
解决方案
首先也是最重要的,@
清楚地表明它mysql_*
在 PHP 5.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 ()
的值。然后,您可以将其附加到您的表格中,以便您可以将信息与表格进行交叉引用,以确保解决方案的完整性。在 DBFiddle 上查看它test
age_range
test
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;
推荐阅读
- c++ - C++11:无法推断模板参数
- php - 新发布的帖子的 Wordpress 钩子,可以访问帖子元数据
- python - 在 Openpyxl 中创建饼图,但它只抓取了一半的数据
- asp.net - 在 .NET Core 应用程序中创建一个简单的身份验证应用程序
- python - 如何使用 keras 正确微调模型?
- r - 3D 球形极坐标图,第 4 维映射到另一个变量
- list - 你如何制作从列表中返回字符的 af# 递归函数?
- php - 身份验证后如何从 Azure Active Directory 获取用户组
- node.js - Node js原始查询返回匿名数据类型
- html - 垂直滚动菜单不显示底部项目