Ir para conteúdo
Entre para seguir isso  
maxsi

fazendo site para ot XML[outro método]P2

Recommended Posts

maxsi    0
maxsi

Antes de mais nada, essa é a parte 2 do tutorial se você não leu a parte 1 ela se encontra no seguinte link:http://forums.otserv.com.br/f34/fazendo-site-para-ot-xml-outro-metodo-p1-89165/

Continuando:

Bem na parte 1 do tutorial eu avia parado após terminar de explicar a criação do arquivo da conta bem agora vamos para a parte que cria o arquivo do Personagem.

 

/*cria o Personagem inicial*/
$CharBase = simplexml_load_file($bases."Char_Base.xml");

Essa parte é simples pois já foi explica, estamos pegado o arquivo base da conta do personagem e guardado na variável $CharBase

$CharBase["name"] = $_POST["name"];
$CharBase["account"] = $_POST["acc"];
$CharBase["sex"] = $_POST["sex"];
$CharBase["voc"] = $_POST["voc"];

aqui estamos adicionado os valores dos parâmetros nome(nome do personagem), account(a conta a qual ele pertence),

sex(o sexo do personagem) e voc(a classe do personagem).

$CharBase->spawn["x"] = $spawn["x"];
$CharBase->spawn["y"] = $spawn["y"];
$CharBase->spawn["z"] = $spawn["z"];
$CharBase->temple["x"] = $temple["x"];
$CharBase->temple["y"] = $temple["y"];
$CharBase->temple["z"] = $temple["z"];

aqui estamos adicionando as coordenadas do templo do personagem e as coordenadas de onde ele ira aparecer ao se logar.

$char = fopen($serverdata."players/".$_POST["name"].".xml", "x");
fwrite($char,$CharBase->asXML());
fclose($char);

como já explicado, aqui estamos criando um novo arquivo com o nome do personagem com a função fopen, escrevendo seu conteúdo com a função fwrite, e fechando o arquivo com a função fclose.

echo("Sua conta foi criada com sucesso");

agora vamos usar a função echo, que não faz nada alem de escrever na tela ou no código fonte dependendo do caso,para mostra para o Jogador uma mensagem de que a conta dele foi criada.

 

}
else{
echo("<script>alert(\"Este Personagme Já exite\");location=\"formulario_acc.html\";</script>");
}
}
else{
echo("<script>alert(\"o nome do Personagme não pode ter caracters especiais\");location=\"formulario_acc.html\";</script>");
}
}
else{
echo("<script>alert(\"digite um nome para seu Personagme\");location=\"formulario_acc.html\";</script>");
}
}
else{
echo("<script>alert(\"esta conta já existe\");location=\"formulario_acc.html\";</script>");
}
}
else{
echo("<script>alert(\"o numero da conta deve ter entre 3 e 20 digitos\");location=\"formulario_acc.html\";</script>");
}
}
else{
echo("<script>alert(\"o numero da conta nesesita ser numerico\");location=\"formulario_acc.html\";</script>");
}
}
else{
echo("<script>alert(\"numero da conta ou senha não preenchidos\");location=\"formulario_acc.html\";</script>");
}

agora você deve querer saber, pra que essa bagunça ai em cima?

bem essa bagunça é onde dizemos pro jogador se ele errou algo na gora de preencher o formulário pra criar a conta e o personagem.

 

bem agora volt explicar o'que um deles faz pois todos funcionam quase igual.

}
else{
echo("<script>alert(\"Este Personagme Já exite\");location=\"formulario_acc.html\";</script>");
}

a chave( } ) na primeira linha esta fechado o ultimo if aberto o else{ seria se não satisfazer as condições do if para avançar venha aqui e fase isso,

o echo nesse caso esta escrevendo no código fonte da pagina as aspas ("") estão ali para dizer: aqui é só texto ignore todo aqui dentro que parece com funções do php ou variáveis. assim o php apenas escreve aquilo e pronto.

as \ antes das aspas aspas e pra não haver erro.

exemplo: se fizermos o código

<?php 
echo(" eu "sou" eu");
?>

o resultado será um erro pois PHP vai achar que o sou é um tipo de variável e como ela não existe(alem de estar colocada de modo errado numa entre uma pilha de texto)

mas se fizermos assim:

<?php 
echo(" eu \"sou\" eu");
?>

teremos como resualta o seguinte texto: eu "sou" eu

 

agora voltado a explicação do codigo la en cima: a tag <script></script>

indeca que estou comesando um codigo en javascript, alert() é uma função do javascrip que tem como resultado:

jsalert.jpg

a função location do javascript manda vc para outra pagina nesse caso

a pagina de cadastro.

 

bem agora juntando tudo tenos no arquivo

cria_acc.php o seguinte codigo

<?php
   include("config.inc.php");
   if(IsSet($_POST["acc"]) && IsSet($_POST["pass"])){
       if(!is_nan($_POST["acc"])){
           if(strlen($_POST["pass"]) < 20 || strlen($_POST["pass"]) > 3){
               if(!file_exists($serverdata."accounts/".$_POST["acc"].".xml")){
                   if(IsSet($_POST["name"])){
                       if(!@strpbrk($_POST["name"],"*/\!@#$%")){
                           if(!file_exists($serverdata."players/".$_POST["name"].".xml")){
                               /*Cria a Conta*/
                               $AccBase = simplexml_load_file($bases."Acc_base.xml");
                               $AccBase["pass"] = $_POST["pass"];
                               $char = $AccBase->characters->addChild('character');
                               $char->addAttribute('name',$_POST["name"]);
                               $char->addAttribute('worldid',"1");
                               $acc = fopen($serverdata."accounts/".$_POST["acc"].".xml", "x");
                               fwrite($acc,$AccBase->asXML());
                               fclose($acc);
                               /*cria o Personagem inicial*/
                               $CharBase = simplexml_load_file($bases."Char_Base.xml");
                               $CharBase["name"] = $_POST["name"];
                               $CharBase["account"] = $_POST["acc"];
                               $CharBase["sex"] = $_POST["sex"];
                               $CharBase["voc"] = $_POST["voc"];
                               $CharBase->spawn["x"] = $spawn["x"];
                               $CharBase->spawn["y"] = $spawn["y"];
                               $CharBase->spawn["z"] = $spawn["z"];
                               $CharBase->temple["x"] = $temple["x"];
                               $CharBase->temple["y"] = $temple["y"];
                               $CharBase->temple["z"] = $temple["z"];
                               $char = fopen($serverdata."players/".$_POST["name"].".xml", "x");
                               fwrite($char,$CharBase->asXML());
                               fclose($char);
                               echo("Sua conta foi criada con suseso");
                           }
                           else{
                               echo("<script>alert(\"Este Personagme Já exite\");location=\"formulario_acc.html\";</script>");
                           }
                       }
                       else{
                           echo("<script>alert(\"o nome do Personagme não pode ter caracters especiais\");location=\"formulario_acc.html\";</script>");
                       }
                   }
                   else{
                       echo("<script>alert(\"digite um nome para seu Personagme\");location=\"formulario_acc.html\";</script>");
                   }
               }
               else{
                   echo("<script>alert(\"esta conta já existe\");location=\"formulario_acc.html\";</script>");
               }
           }
           else{
               echo("<script>alert(\"o numero da conta deve ter entre 3 e 20 digitos\");location=\"formulario_acc.html\";</script>");
           }
       }
       else{
           echo("<script>alert(\"o numero da conta nesesita ser numerico\");location=\"formulario_acc.html\";</script>");
       }
   }
   else{
       echo("<script>alert(\"numero da conta ou senha não preenchidos\");location=\"formulario_acc.html\";</script>");
   }
?>

e devemos ter a seginte ierarquia de pastas:

[font=Verdana]WWW/[/font][font=Verdana]
 -site_[/font][font=Verdana][color=black]ot[/color][/font][font=Verdana]/
   -formulario_acc.html
   -cria_acc.php
   [/font][font=Verdana]-bases/
     -[/font][font=Verdana][color=black]Char[/color][/font][font=Verdana]_Base.[/font][font=Verdana][color=black]XML
     [/color][/font][font=Verdana]-[/font][font=Verdana][color=black]Acc[/color][/font][font=Verdana]_base.[/font][font=Verdana][color=black]XML[/color][/font][font=Verdana]
[/font]

 

bem agora vamos pra o prosimo html:

o formulario_login.html

<html>
   <head>
       <title>Criar conta</title>
   </head>
   <body>
       <form method="post" action="loga_acc.php">
           Numero da conta<br/>
           <input type="text" name="acc"/><br/>
           Senha<br/>
           <input type="password" name="pass"/><br/>
           <input type="submit" /><br/>
       </form>
       <a href="formulario_acc.html">não tem conta? então se cadastre</a>
   </body>
<html>

esse é um simples formulario de login com um link que leva para a pagina de cadastro caso o jogador não tenha conta ainda.

azul: o type="password" quer diser que enver da sua senha apareser (pra qualquer incherico ler)so vão apareser uma pilha de ******* muito + legal não é?

 

agora vamos ver o loga_acc.php

include("config.inc.php");
if(IsSet($_POST["acc"]) && IsSet($_POST["pass"]) && is_numeric($_POST["acc"]) && file_exists($serverdata."accounts/".$_POST["acc"].".xml")){

1° como fisemos antes estamos incluindo o arquivo de configurão config.inc.php

2° estamos verificando em um unico if se o numero da conta foi digitado, se a senha foi digitada, se o numero da conta é um unmero, e se esa conta esite. mas por que verificar isso tudo de uma ves só aqui se quando criamos a conta verificamos um por um?

simples: para se cadastras o usuario presisa saber o que esta erado, mas se diser oque esta errado quando ele tenta logar ele pode tentar hackar uma conta por tentaviva e erro pois ele vai saber se o numero da conta é de uma conta ecxisten e se a senha é ou não dessa conta.

$acc = simplexml_load_file($serverdata."accounts/".$_POST["acc"].".xml");
if($_POST["pass"] == $acc["pass"]){

caregamos o XML da conta e verificamos se a senha esta coreta.

session_start(); //inicia a seção
$_SESSION["nacc"]=$_POST["acc"];

iniciamos uma seção e gardamos numa variavel de seção o numero da conta.

mas o que é uma variavel de seção? pense nela como uma variavel que so perdera seu valor quando for destrida o que so acontese de 2 maneras

1° usando a função do php session_destroy();

2° se o jogador que se fez LOGIN se desconctar da internet.

e para que iniciar a seção? bem uma variavel de seção so pode ser acesada se uma seção for inicida.

echo("<script>location=\"mostra_acc.php\";</script>");

e agora mandamos ele para a prosima pagina que vai mostra para o jogador os personagem que ele posui e dar a ele a posibilidade de exluilos ou criar um personagem novo.

 

ok agora so falta os else para diser que ele digito algo erado:

else{
echo("<script>alert(\"numero da conta ou senha incoreto\");location=\"formulario_login.html\";</script>");
}
}
else{
echo("<script>alert(\"numero da conta ou senha incoreto\");location=\"formulario_login.html\";</script>");
}

e dai juntamos tudo no arquivo loga_acc.php que ficara asim:

<?php
   include("config.inc.php");
   if(IsSet($_POST["acc"]) && IsSet($_POST["pass"]) && is_numeric($_POST["acc"]) && file_exists($serverdata."accounts/".$_POST["acc"].".xml")){
       $acc = simplexml_load_file($serverdata."accounts/".$_POST["acc"].".xml");
       if($_POST["pass"] == $acc["pass"]){
           session_start();
           $_SESSION["nacc"]=$_POST["acc"];
           echo("<script>location=\"mostra_acc.php\";</script>");
       }
       else{
           echo("<script>alert(\"numero da conta ou senha incoreto\");location=\"formulario_login.html\";</script>");
       }
   }
   else{
       echo("<script>alert(\"numero da conta ou senha incoreto\");location=\"formulario_login.html\";</script>");
   }
?>

ok por em quanto é só, pois não quero faser um post muito longo.

na prosima parte mostro e esplico o arquivo mostra_acc.php

:bye:

Compartilhar este post


Link para o post
Pedroddcunha    3
Pedroddcunha

Obrigado pela contribuição

 

 

- Aprovado -

Compartilhar este post


Link para o post
Blakk    26
Blakk

Eu não achei a parte 1! =(

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×