php - 表单中的额外(隐藏)数据

标签 php mysql forms

我一直忙于学习 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 -> 该表应具有 ClassIdClassNameStarting Class Properties(即:生命值、法力等)。

UserProperties -> 该表应包含包含对每个用户的引用、PropertyNamePropertyValue 的列

创建新用户时,从 Classes 表加载选定的类,并使用选定类的初始属性填充 UserProperties 表。

现在您可以查询和更新特定用户的特定属性。

关于php - 表单中的额外(隐藏)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40576282/

相关文章:

php - 使用 Javascript 设置值

javascript - 使用 JQuery、Ajax 和 PHP 的登录处理程序

php - 将自定义值/数据发送到 PayPal(快速结帐)

mysql - 加入 mysql 表并获取多行

mysql - MySQL 中的全文搜索查询

php - 通过 html 表单保存到 MySQL 数据库

php - 为什么mysql默认值不起作用?

php - 用 <img> 标签替换 <a> 图片链接

java - 我如何在 mysql 数据库更新后立即运行脚本(cronjob)

javascript - jquery load 与 ajax 进行表单提交提交