2016-11-13 5 views
0

Я был занят изучением php/mysql.
Чтобы убедиться, что я понимаю, как и что я делаю, я начал проект по созданию собственной php-игры.Дополнительные (скрытые) данные в форме

У меня есть точка для создания регистрационной формы.
Форма работает так, как она запрограммирована.

В форме выборки для 5 разных классов, идея заключается в том, что определен выбранный, стартовая статистика для этого класса будет помещена в базу данных.
Вот селектор классов, да, я знаю, что он имеет die(), но это показывает, что он «работает».

Мой вопрос:
Как добавить дополнительный «скрытый» вход? (Как л.с., мана, DEF, >>>>)

Я попытался заменить 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> 
+0

Вы ищете field? – axlj

+0

Какая 'смерть' вы получаете? Что происходит, когда вы добавляете этот запрос в этот условный? – chris85

ответ

0

Создать еще две таблицы:

Classes -> Эта таблица должна содержать ClassId, ClassName, и Starting Class Properties (то есть: HP, Mana и т. д.).

UserProperties -> Эта таблица должна иметь столбцы, которые содержат ссылки на каждого пользователя, PropertyName и PropertyValue

Когда создается новый пользователь, загрузите выбранный класс из Classes таблицы и заполнить UserProperties таблицу начальные свойства выбранного класса.

Теперь, когда вы можете запрашивать и обновлять определенные свойства для определенных пользователей.

0

Вам не нужны никакие скрытые поля ввода, поскольку эти поля, по-видимому, предопределены для каждого класса. Это означает, что вы можете хранить их в отдельной таблице (например, Classes(classID, classLabel, HPInitial, ManaInitial))) в своей базе данных.

Затем в запросе, вы можете просто добавить:

$query = ' INSERT INTO user (...,mana, hp,...) VALUES 
       (..., 
        (SELECT ManaInitial FROM Classes WHERE classLabel = :class), 
        (SELECT HPInitial FROM Classes WHERE classLabel = :class), 
       ...); 

Такой подход вызывает много проблем, если добавить больше атрибутов к классу, как вы будете иметь много подзапросов. Более практичный подход состоял бы в том, чтобы заранее выбрать атрибуты и добавить их в запрос вставки до его выполнения.

0

Очень интересные решения, мне нравится ваш axlj

Я на самом деле продолжал бездельничать, и нашли решение, скажите мне, что вы думаете об этом. Все еще думая разместить основную статистику в таблице, но я счастлив, что это действительно работает.

//Class selector and full userinfo prepare 

if($_POST['class'] == 'ssd') 
{ 
    $query = "INSERT INTO user (username,charname,password,salt,regkey,email,class,hp,mana,atkpwr,defpwr,speed,crit,luck) VALUES (:username,:charname,:password,:salt,:regkey,:email,:class,'4','0','3','3','1','1','5')"; 
} 
elseif($_POST['class'] == 'holo') 
{ 
    $query = "INSERT INTO user (username,charname,password,salt,regkey,email,class,hp,mana,atkpwr,defpwr,speed,crit,luck) VALUES (:username,:charname,:password,:salt,:regkey,:email,:class,'4','2','5','0','1','1','5')"; 
} 
elseif($_POST['class'] == 'cleric') 
{ 
    $query = "INSERT INTO user (username,charname,password,salt,regkey,email,class,hp,mana,atkpwr,defpwr,speed,crit,luck) VALUES (:username,:charname,:password,:salt,:regkey,:email,:class,'4','3','2','1','1','1','5')"; 
} 
elseif($_POST['class'] == 'wizzard') 
{ 
    $query = "INSERT INTO user (username,charname,password,salt,regkey,email,class,hp,mana,atkpwr,defpwr,speed,crit,luck) VALUES (:username,:charname,:password,:salt,:regkey,:email,:class,'3','3','5','1','1','1','5')"; 
} 
elseif($_POST['class'] == 'floppy') 
{ 
    $query = "INSERT INTO user (username,charname,password,salt,regkey,email,class,hp,mana,atkpwr,defpwr,speed,crit,luck) VALUES (:username,:charname,:password,:salt,:regkey,:email,:class,'2','1','3','2','1','1','10')"; 
} 
elseif(empty($_POST['class'])) 
{ 
    die("Chose a class plix."); 
} 
Смежные вопросы