我有一个任务必须在一小时内完成。我有一个表单,可以将记录添加到数据库中,就像这样
$member_age = $_POST['member_age'];
$ins = @mysql_query("INSERT INTO test SET member_age='$member_age'");
我有一项新任务,要求我确定成员的年龄并将其转换为年龄范围,然后最后将该年龄范围插入到名为age_range
的新表中。
年龄范围如下:
预期输入可能为12。遵循此行为的预期输出应为10-13。我该如何实现?
答案 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;