我一直忙于学习 php/mysql。
为了确保我了解自己在做什么以及如何做,我启动了一个项目来构建自己的 php 游戏。
我已经开始创建注册表了。
该表单按照编程的方式工作。
表格中选择了 5 个不同的类别,其想法是,当选择某个类别时,该类别的起始统计数据将被放入数据库中。
这是类选择器,是的,我知道它有 die()
,但这表明它“有效”。
我的问题是:
如何添加额外的“隐藏”输入? (如生命值、法力、防御力、>>>>)
我尝试将 die()
替换为:
$query = "INSERT INTO user (hp,deff) VALUES (3,2)";
//Class selector
if($_POST['class'] == 'ssd')
{
die("Selected ssd as Class.");
}
elseif($_POST['class'] == 'holo')
{
die("Selected holo as Class.");
}
elseif($_POST['class'] == 'cleric')
{
die("Selected clerric as Class.");
}
elseif($_POST['class'] == 'wizzard')
{
die("Selected wizz as Class.");
}
elseif($_POST['class'] == 'floppy')
{
die("Selected pitcher as Class.");
}
elseif(empty($_POST['class']))
{
die("Select a Class.");
}
完整代码:
<?php
require("common.php");
if(!empty($_POST))
{
// Ensure that the user has entered a non-empty username
if(empty($_POST['username']))
{
die("Please enter a username.");
}
// Ensure that the user has entered a non-empty password
if(empty($_POST['password']))
{
die("Please enter a password.");
}
//Class selector
if($_POST['class'] == 'ssd')
{
die("Selected ssd as Class.");
}
elseif($_POST['class'] == 'holo')
{
die("Selected holo as Class.");
}
elseif($_POST['class'] == 'cleric')
{
die("Selected clerric as Class.");
}
elseif($_POST['class'] == 'wizzard')
{
die("Selected wizz as Class.");
}
elseif($_POST['class'] == 'floppy')
{
die("Selected pitcher as Class.");
}
elseif(empty($_POST['class']))
{
die("Select a Class.");
}
//Character name
if(empty($_POST['charname']))
{
die("Please enter a Charactername.");
}
// Make sure the user entered a valid E-Mail address
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
die("Invalid E-Mail Address");
}
//SQL query to see whether the username entered by the user is already in use
$query = "
SELECT
1
FROM user
WHERE
username = :username
";
$query_params = array(
':username' => $_POST['username']
);
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query:");
}
$row = $stmt->fetch();
if($row)
{
die("This username is already in use");
}
// email address unique check
$query = "
SELECT
1
FROM user
WHERE
email = :email
";
$query_params = array(
':email' => $_POST['email']
);
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query");
}
$row = $stmt->fetch();
if($row)
{
die("This email address is already registered");
}
//charname unique check
$query = "
SELECT
1
FROM user
WHERE
charname = :charname
";
$query_params = array(
':charname' => $_POST['charname']
);
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query");
}
$row = $stmt->fetch();
if($row)
{
die("This charactername is already taken");
}
$query = "
INSERT INTO user (
username,
charname,
password,
salt,
email,
class
) VALUES (
:username,
:charname,
:password,
:salt,
:email,
:class
)
";
$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));
$password = hash('sha256', $_POST['password'] . $salt);
for($round = 0; $round < 65536; $round++)
{
$password = hash('sha256', $password . $salt);
}
$query_params = array(
':username' => $_POST['username'],
':password' => $password,
':salt' => $salt,
':email' => $_POST['email'],
':charname' => $_POST['charname'],
':class' => $_POST['class']
);
try
{
// Execute the query to create the user
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: ");
}
die("Redirecting to login.php");
}
?>
<h1>Register</h1>
<b>NOTE! A admin or moderator will NEVER ask you for a loginname or password. Only a Character is needed for help or problems.</b>
<form action="register.php" method="post">
<br />Loginname<b> keep this private!</b>:<br />
<input type="text" name="username" value="" /><br />
Charactername<b> Advice is to use different name then the loginname, this is how people will see you</b>: <br />
<input type="text" name="charname" value="" /><br />
E-Mail: <br />
<input type="text" name="email" value="" /><br />
Password: <br />
<input type="password" name="password" value="" /><br />
Class: <br />
<input type="radio" name="class" value="ssd"> Solid State Defender<br />
<input type="radio" name="class" value="holo"> Hologram<br />
<input type="radio" name="class" value="cleric"> Office Cleric<br />
<input type="radio" name="class" value="wizzard"> IT Wizzard<br />
<input type="radio" name="class" value="floppy"> Floppy Picher<br /><br />
<input type="submit" value="Register" />
</form>
最佳答案
再创建两个表:
Classes
-> 该表应具有 ClassId
、ClassName
和 Starting Class Properties
(即:生命值、法力等)。
UserProperties
-> 该表应包含包含对每个用户的引用、PropertyName
和 PropertyValue
的列
创建新用户时,从 Classes
表加载选定的类,并使用选定类的初始属性填充 UserProperties
表。
现在您可以查询和更新特定用户的特定属性。
关于php - 表单中的额外(隐藏)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40576282/