Jump to content

Search the Community

Showing results for tags 'php'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • OpenTibia
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
    • Divulgação de Servidores
    • Projetos e Formações de Equipes
  • Outros
    • Design

Found 7 results

  1. Nome do servidor: WolfOT Qual é a sua pergunta? Meu otserv é um 8.0 antigo só queria entrar nele pra olhar mesmo mais não tem account manager o ot precisar criar conta no site só que quando vai criar conta no site fica dando uns erro, já tentei baixar outros websites mais fica com mais erro que o site original do otserv , e é um antigo website está com o seguinte erro do site original do otserv: seguinte erro = Parse error: syntax error, unexpected 'case' (T_CASE) in D:\xampp\htdocs\account.php on line 465 || na linha 465 tem assim = #####CHANGE PASSWORD##### case "password": Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  2. Opa, tranquilo!? Bom, para falar que eu não contribuo com porra nenhum, criei este tutorial até pra poder ajudar o vHp (siga essas dicas aqui no site da OTBR) e a comunidade que não entende muito de segurança. A finalidade desta lista é ajuda a vocês a proteger e incrementar um pouco a mais de segurança no seu webserver. Eu fiz este tutorial de forma genérica, serve para qualquer webserver, mas há algumas poucas referências mais voltado para OTServ. Directory Listing É um descuido muito grave e frequente, uma vez que se é possível obter informações relevantes para uma possível exploração de falhas, vulnerabilidades ou até roubo de informação. Para desativar o Directory Listing basta seguir os 3 passos baixo: Navegue até o diretório /etc/apache2/sites-enabled e abra o arquivo 000-default No meu caso, irei utilizar o nano, um editor de texto no modo texto (terminal). Procure pela linha que diz <Directory /caminho/www>, onde /caminho/www representa sua pasta de arquivos utilizada pelo Apache. Em seguinte procure por Options Indexes e mude o Indexes para -Indexes Após isso, pressione CTRL+X para fechar, Y(ou S) para confirmar as alterações e enter para salvar. Agora apenas precisamos reiniciar o serviço do Apache2 para que a configurações começem a valer. No terminal, digite service apache2 restart Resultado (Antes e Depois): Server Tokens Se repararem na imagem acima, irão ver que de fatos diminuimos os acessos as informações dos arquivos internos, mas se olharem lá em baixo, no rodapé da página de Forbidden, está escrito toda a nossa infraestrutura de webserver, ou seja, estou utilizando Apache 2.2.22 rodando em um Ubuntu. E isso não é legal aparecer, até porque uma vez que se obtém a versão de uma software é possível pesquisar exploits já encontrados desta versão específica. Para retirar-los basta seguir simples 3 passos também: Vá até o diretório /etc/apache2/conf.d/ e abra o arquivo security Logo nas primeiras linhas do arquivo, existem duas atributos que devemos mudar. O ServerTokens e ServerSignature, onde devemos alterar os valores respectivamente para Prod e Off. Após isso, dê um CTRL+X, digite Y(ou S) para confirmar as alterações e enter para salvar. Agora reinicie o apache2 utilizando o comando service apache2 restart Resultado: Expose PHP Quando fazemos requisição a algum página cujo interpretação seja feita pelo PHP, por padrão, no cabeçalho desta requisição é possível identificar a versão do PHP, então é bom desativar para que as essas informações extremamente importantes não sejam expostas. Apenas com apenas 3 passos se resolve este problema. Vá até o diretório /etc/php5/apache2/ e abra o arquivo php.ini Procure pela variável de configuração chamada expose_php e altere de On para Off Após isso, dê um CTRL+X, digite Y(ou S) para confirmar as alterações e enter para salvar. Agora reinicie o apache2 utilizando o comando service apache2 restart Resultado: Arquivos desnecessários Quando vamos implementar algum script que não possuimos o conhecimento ou ele tem várias dependências, nós costumamos baixar a documentação e os arquivos de exemplo para podermos ler e implementar. Mas o que acaba ocorrendo é que depois de implementado e funcionando, nós nos esquecemos dele e acaba sobrando os arquivos de documentações e exemplo. Mas não é só por parte de nós desenvolvedores não... acontecem com vocês que vivem fuçando no site. Um exemplo bem claro é no Gesior AAC, onde criamos nossa página e incluimos no index.php e repassamos o site a diante, ai o cara não tá utilizando ele e apenas retira do layout e acha que removeu o sistema... o buraco é mais fundo. Solução de prioridade alta resolvidas de forma atabalhoada Quem lê assim até parece uma coisa foda, magnífica, mas é simplesmente uma gambiarra ou hardcoded. Esse alterações ou implementações de forma extremamente amadora ou gambiarrosa podem simplesmente abrir brechar na segurança de seu site. Por isto, quando quiserem implementar de forma correta, procurem um conhecido do assunto ou um profissional da área, leia o manual da linguagem, do framework. Mantenha tudo atualizado Seja software ou infra, mantenha-os atualizado. É extremamente necessário. Quer um bom motivo para fazer isso? Recentemente fora descoberto uma falha de segurança em todos os Internet Explorer que permitia o invasor ter acesso a praticamente tudo. E ontem a Microsoft soltou a correção. Senha padrões Por favor galera, troquem as senhas padrões. Mas troquem pra senhas seguras e quando eu digo seguras 12345, admin, teste, não são sejas seguras. Uma senha segura envolve números, letras(minusculas e maiusculas) e algum caracter especial com no mínimo 6 digitos. 1KG de vergonha na cara ""Herp Derp, meu servidor tá com Linux, vou instalar XAMPP"". Tenha o dominio completo do que está instalado ou não e não coloque essas merdas de bundle. Instale os pacotes na mão e configure bonitinho. WebDAV Ano passado teve muita gente que sofreu com isso. Era uma falha do XAMP que iniciava o WebDav com senha padrão e deixava outra pessoa simplesmente vir, acessar sua máquina e fazer uma bagunça. Por isso eu recomendo o item de cima. Porque ele só vai instalar o que você mandar. Exceto Baidu, porque ele vem sempre. Sistema de Controle de Versão É o que há. Quem nunca deletou uma parte de arquivo no bloco de notas, salvou e apertou um caracter em branco sem querer. E a alteração não deu certo e você foi desfazer e não tinha como? Os maiores servidores utilizam isso justamente para ter o total controle dos arquivos. A cada edição que você faz, ele cria uma revisão do arquivo. Então eu posso editar milhares de vezes e ver as alterações passadas, quem alterou, o que adicionou e o que removeu. É lindo. Leiam sobre SVN e GIT, são ótimas ferramentas. Referências [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] NÃO ESQUECE DE CURTIR!!! This post has been promoted to an article
  3. Olá pessoal, a muito tempo que eu não passo por aqui. Até deixei de lado o facinante mundo dos otservers... Antigamente eu tinha um servidor chamado Tibia Revolution e eu sempre tinha um problem pra criar map. Na hora de fazer as caves eu me intediava por ser a parte mais chata de todas... Estou agora criando um sisteminha via php que cria automaticamente caves, tornando o mapping um processo muito mais ágil... :louco: Quero que dêem-me uma dica, o que acham disso, devo levar para frente esse projeto? Alguma sugestão? Aki vai uma imagem do OTcave Generator (Beta): [ATTACH=CONFIG]3198[/ATTACH] Aguardo sugestões, criticas e elogios ---Edit---: Atualizei um pouco a programação e o design, por inquanto o projeto está assim (versão beta): [ATTACH=CONFIG]3245[/ATTACH] [ATTACH=CONFIG]3246[/ATTACH] Conforme for atualizando o sistema, vou postando mais SS, e enquanto isso, espero que dêem suas opiniões perante o assunto! Abraços!
  4. bem aqui começa a 3 parte do tutorial caso não tenha lido a parte ^^ continuação: bem como avia dito antes irei mostra e explicar agora o mostra_acc.php em partes. 1° <?php session_start(); if(IsSet($_SESSION["nacc"])){ ?> iniciamos a secção para podermos pegar o valor da variável de secção e depois verificamos se ela tem um valor. se não tiver o Jogador vai de volta pra pagina de login para fazer isso no final da pagina colocaremos o seguinte código: <?php } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> 2° isso fica logo após fecharmos a tag do php no inicio do código. <table border="1"> <tr> <td>Nome</td> <td>Excluir?</td> </tr> esse é o inicio da tabela que mostraremos ao jogador após ele se logar. 3° <?php $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); caregamos novamente a conta do jogador. 4° foreach($acc->characters->character as $char){ echo(" <tr> <td> ".$char["name"]." </td> <td><a href=\"apaga_char.php?char=".$char["name"]."\">Excluir</a></td> </tr> "); } agora tem coisa nova: já que um jogador pode ter mais de um personagem por conta( e tag do que guarda o nome tem sempre o mesmo nome <character name=""> ) então usamos a função foreach(){} para guardar os parâmetro da tag <character> dentro da variável $char, e essa função ira ficar em LOOP ate que que não tenha mais valores fazendo isto linha a linha. ou seja no primeiro LOOP termos dentro da variável $char["name"] o nome do primeiro personagem no segundo LOOP o do segundo personagem e assim por diante ate que que não aja + personagem. Depois escrevemos o corpo da nossa tabela e colocamos um link para excluir o personagem, ?char=".$char["name"]." e para sabermos na proxima pagina que vamos apagar. 3° ?> <table> <a href="Formulario_personagem.php">criar novo personagem</a> <a href="sair.php">sair</a> agora fechamos a tag do php, concluimos a tabele e colocamos 2 link 1 é para o Jogador poder criar um novo personagem e o outro é para fazer LOGOUT. agora juntando tudo temos o seguinte código no arquivo mostra_acc.php <?php session_start(); if(IsSet($_SESSION["nacc"])){ ?> <table border="1"> <tr> <td>Nome</td> <td>Excluir?</td> </tr> <?php $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); foreach($acc->characters->character as $char){ echo(" <tr> <td> ".$char["name"]." </td> <td><a href=\"apaga_char.php?char=".$char["name"]."\">Excluir</a></td> </tr> "); } ?> <table> <a href="Formulario_personagem.php">criar novo personagem</a> <a href="sair.php">sair</a> <?php } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> bem agora vamos criar o arquivo Formulario_personagem.php , mas por que ele primeiro e não apaga_char.php? por que para apagar primeiro tem que criar...^^ o código de arquivo é simples é a parte em php serve apenas para que pessoas não logas não vejam essa pagina.(e já foi usado na pagina mostra_acc.php e vai ser usado também na apaga_char.php) <?php session_start(); if(IsSet($_SESSION["nacc"])){ ?> <html> <head> <title>criar personagem</title> </head> <body> <form method="POST" action="cria_char.php"> Nome<br/> <input type="text" name="name"/><br/> Sexo<br/> <select name="sex"> <option value="0">Feminino</option> <option value="1">Masculino</option> </select><br/> Vocação<br/> <select name="voc"> <option value="1">Sorcerer</option> <option value="2">Druid</option> <option value="3">Paladin</option> <option value="4">Knight</option> </select><br/> <input type="submit"> </form> </body> </html> <?php } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> certo agora vamos a parte interessante que é como fazer para criar o personagem novo. arquivo cria_char.php 1° <?php session_start(); if(IsSet($_SESSION["nacc"])){ include("config.inc.php"); inicimanos a secção, verificamos se ele esta logado e incluimos o arquivo de configuração. 2° if(IsSet($_POST["name"])){ if([email protected]($_POST["name"],"*/\[email protected]#$%")){ if(!file_exists($serverdata."players/".$_POST["name"].".xml")){ verificamos se o nome do personagem foi digitado, se não contem carcters especiais e se o personagem ja esiste. 3° /* coloca o personagme na conta */ $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); $char = $acc->characters->addChild('character'); $char->addAttribute('name',$_POST["name"]); $char->addAttribute('worldid',"1"); file_put_contents($serverdata."accounts/".$_SESSION["nacc"].".xml", $acc->asXML()); carregamos o XML da conta, adicionamos o personagem e depois actualizamos o XML com a função file_put_contents() 4° /* cria o personagem */ $CharBase = simplexml_load_file($bases."Char_Base.xml"); $CharBase["name"] = $_POST["name"]; $CharBase["account"] = $_SESSION["nacc"]; $CharBase["sex"] = $_POST["sex"]; $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("<script>alert(\"Seu novo personagem foi criado, Divritase\");location=\"mostra_acc.php\";</script>"); aqui fasemos basicamente o mesmo que fisemos quando criamos a conta( ja que criamos um personagem junto) juntando tudo no cria_char.php temos <?php session_start(); if(IsSet($_SESSION["nacc"])){ include("config.inc.php"); if(IsSet($_POST["name"])){ if([email protected]($_POST["name"],"*/\[email protected]#$%")){ if(!file_exists($serverdata."players/".$_POST["name"].".xml")){ /* coloca o personagme na conta */ $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); $char = $acc->characters->addChild('character'); $char->addAttribute('name',$_POST["name"]); $char->addAttribute('worldid',"1"); file_put_contents($serverdata."accounts/".$_SESSION["nacc"].".xml", $acc->asXML()); /* cria o personagem */ $CharBase = simplexml_load_file($bases."Char_Base.xml"); $CharBase["name"] = $_POST["name"]; $CharBase["account"] = $_SESSION["nacc"]; $CharBase["sex"] = $_POST["sex"]; $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("<script>alert(\"Seu novo personagem foi criado, Divritase\");location=\"mostra_acc.php\";</script>"); } else{ echo("<script>alert(\"Este Personagme Já exite\");location=\"Formulario_personagem.php\";</script>"); } } else{ echo("<script>alert(\"o nome do Personagme não pode ter caracters especiais\");location=\"Formulario_personagem.php\";</script>"); } } else{ echo("<script>alert(\"digite um nome para seu Personagme\");location=\"Formulario_personagem.php\";</script>"); } } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> certo prosima parte apagado o personagem.... arquivo apaga_char.php 1° /* apaga o personagem da conta */ $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); $i=0; caregamos o arquivo da conta e criamos uma variavel com valor 0 2° foreach($acc->characters->character as $char){ if($char["name"] == $_GET["char"]){ unset($acc->characters->character[$i]); break; } $i++; } o foreach de novo, agora verificamos se a linha que estanos e a do personagem que quemos apagar se for usamos a função unset para apagar essa linha e a função break; para para o foreach (pois ja apagamos a linha que queriamos enão não presisamos + dele), o $i++ fais o mesmo que $i = $i + 1; e serve para sabermos o numero da linha que estamos. 3° file_put_contents($serverdata."accounts/".$_SESSION["nacc"].".xml", $acc->asXML()); unlink($serverdata."players/".$_GET["char"].".xml"); echo("<script>alert(\"o personagem ".$_GET["char"]." foi apagado\");location=\"mostra_acc.php\";</script>"); atutalizamos o XML da conta e usamos a função unlink para apagar o XML do personagem. e juntando tudo no arquivo apaga_char.php temos: <?php session_start(); if(IsSet($_SESSION["nacc"])){ /* apaga o personagem da conta */ $acc = simplexml_load_file($serverdata."accounts/".$_SESSION["nacc"].".xml"); $i=0; foreach($acc->characters->character as $char){ if($char["name"] == $_GET["char"]){ unset($acc->characters->character[$i]); break; } $i++; } file_put_contents($serverdata."accounts/".$_SESSION["nacc"].".xml", $acc->asXML()); unlink($serverdata."players/".$_GET["char"].".xml"); echo("<script>alert(\"o personagem ".$_GET["char"]." foi apagado\");location=\"mostra_acc.php\";</script>"); } else{ echo("<script>location=\"formulario_login.html\";</script>"); } ?> e agora o arquivo mais simples de todos o sair.php <?php session_start(); session_destroy(); echo("<script>location=\"formulario_login.html\";</script>"); ?> onde iniciamos a seção, depois destrimos seu contedudo e mandomos o Jogador para a pagina do formulario de LOGIN. PARABENS agora você (teoricamente) SABE faser um saite para criar contas personagem e apagalos para um OT XML. A sim verifique se a pasta esta organisada da seguinte maneira: WWW/ -site_ot/ config.inc.php -formulario_acc.html -cria_acc.php -formulario_login.html -loga_acc.php -mostra_acc.php -Formulario_personagem.php -cria_char.php -apaga_char.php -sair.php -bases/ -Char_Base.XML -Acc_base.XML se não estiver organise ela sim para não dar erros e é só.
  5. Qual melhor ferramenta?

    Olá galera do forum tudo bom? eu estou com alguns projetos ativos e atuais para desenvolvimento em PHP ai vai uma lista: Shop Online - È um shop online, que será possivel comprar itens ou premmy accounts através do site, terá varias formas de pagamento para o player escolher ( PagSeguro, Pontos ) Pontos é a moeda virtual que terá no Shop, e Pagamentos por PagSeguro terá retorno automatico. Como Assim? ao player efetuar o pagamento o pagseguro irá retornar o pagamento ativando as moedas virtuais automaticamente na conta do player Rank OTNet - È um site que terá apenas Rank, Criar Conta. WOM - Web OTManager - Será um painel de administração global para o servidor, terá varias utilidade como editar arquivos, criar arquivos, kikar players, editar players, mover players, criar gm e etc's. TUDO PELO SITE. OTWeb - Site Exclusivo para Servidores Mysql, dara suporte a varias ferramentas como galeria, compra de casas etc's. Esses são alguns projetos ativos que com o tempo irei atualizar/disponibilizar para o forum, alguns como o Rank OTNet já esta disponibilizado a primeira versão que se pode ser encontrada aqui: [Hidden Content] o Rank irei liberar atualizações sempre que possivel e termina os outros projetos sempre que possivel tambem. Mais qual objetivo de criar este tópico? minha dúvida é... oque vocês players/donos de servidores desejam? qual seria uma ferramenta boa e indispensavel uma ferramenta que iria ajudar muito, qual é? Irei analizar suas sugestões e quem sabe um dia eu disponibilizar aqui? Talvez você venha dizer que são muitos projetos para se concluir, sim é claro... mais não diz que é para hoje, amanha, ou semana que vem... esses projetos podem ser concluidos daqui 1 ano quem sabe? OiaeuMae Só gostaria de ajudar a galera ai, já que quero aprender mais e quero ajudar, a melhor forma é que todos vejam meus serviços e deem opniões. Vai uma enquete ai para vocês votarem qual projeto é melhor, dependendo do resultado irei finalizar o mais rapido possivel o projeto vençedor. WOM Preview - [Hidden Content]
  6. Bem basicamente nesse tutorial pretendo ensinar um método diferente de se:criar uma conta, criar um personagem, apagar um personagem, fazer LogIn e LogOut em uma conta para quem tem um Sever baseado em XML PS: algumas ideias foram baseadas no tutorial do usuário Eltrus (Criando um Website para OT XML) Dificuldade: Intermediaria Requisitos: 1°Conhecer html 2°Saber um pouco de lógica de programação 3°php 5 (o seu servidor web tem quer o php 5 senão esse código não funciona, aconselho usar o Vertrigo pois a versão do easyphp com php não é muito estável...) 4°Um editor de teste (bloco de notas serve...) 5°Dedicação claro Inicio: Bem primeiro abra a pasta do seu www do seu servidor e crie uma pasta para podermos trabalhar.Ex: site_ot agora vamos fazer 2 arquivos XML que serão nossa base, o Acc_base.XML <?xml version="1.0" encoding="UTF-8"?> <account [b][color=Navy]pass="" premDays="0" premEnd="0"[/color][/b]> <characters> </characters> </account> Azul escuro: isto é chamado de parâmetro. e o Char_Base.XML <?xml version="1.0" encoding="UTF-8"?> <player name="" account="" sex="" lookdir="1" exp="4200" voc="" level="8" access="0" cap="380" maglevel="0" soul="0" maxdepotitems="1000" lastlogin="0" married="" stamina="1660"> <spawn x="" y="" z=""/> <temple x="" y="" z=""/> <health now="190" max="190" food="0"/> <mana now="40" max="40" spent="0"/> <skull redskulltime="0" redskull="0"/> <look type="128" head="0" body="94" legs="126" feet="81" addons="0"/> <skills> <skill skillid="0" level="10" tries="0"/> <skill skillid="1" level="10" tries="0"/> <skill skillid="2" level="10" tries="0"/> <skill skillid="3" level="10" tries="0"/> <skill skillid="4" level="10" tries="0"/> <skill skillid="5" level="10" tries="0"/> <skill skillid="6" level="10" tries="0"/> </skills> <addons/> <deaths/> <spells/> <blessings/> <inventory> <slot slotid="1"> <item id="2475"/> </slot> <slot slotid="2"> <item id="2173"/> </slot> <slot slotid="3"> <item id="1988"> <inside> <item id="2456"/> <item id="2190"/> <item id="2182"/> <item id="2160" count="2"/> <item id="2120"/> </inside> </item> </slot> <slot slotid="4"> <item id="2476"/> </slot> <slot slotid="5"> <item id="2516"/> </slot> <slot slotid="6"> <item id="2392"/> </slot> <slot slotid="7"> <item id="2477"/> </slot> <slot slotid="8"> <item id="2643"/> </slot> <slot slotid="10"> <item id="2544" count="1"/> </slot> </inventory> <depots> <depot depotid="1"> <item id="2590"> </item> </depot> </depots> <storage> </storage> </player> obs: o Char_Base.XML que esta acima é um exemplo se quiser que o personagem no inicio seja diferente mude o que quiser mas deixe os campos que estão em branco do jeito que estão. Agora devemos ter as pastas + ou - assim WWW/ -site_ot/ -bases/ -Char_Base.XML -Acc_base.XML certo agora vamos criar na pasta site_ot/ crie o arquivo config.inc.php ele guarda algumas configuração que iremos usar varias vezes por isso vamos guarda-los em um único arquivo:D config.inc.php <?php $bases = "./bases/"; //local onde estão as bases tanto das contas como dos personagens $serverdata = "./"; /*endereso da pasta data do seu servidor. ex: C:/ot/data/ */ /* Cordenadas de onde o jogador ira aparecer ao se logar */ $spawn["x"] = "793"; // X $spawn["y"] = "1014"; // Y $spawn["z"] = "7"; // Z /* Cordenadas do tenplo inicial */ $temple["x"] = "793"; // X $temple["y"] = "1014"; // Y $temple["z"] = "7"; // Z ?> Vermelho:onde estamos abrindo e fechando a Tag do php. Azul:As variaveis que usaremos varias vezes no próximos arquivos. Sublinhado :Os valores atribuídos as variáveis Verde:Os comentários que explicam para que cada variável será usada.(eles não surtem efeito nenhum no código) osb: na hora de colocar o caminho para a pasta data do seu servidor não esquece de que se você colocar C:\ot\data\ ocorrera um erro pois para o php / é diferente de \ Certo agora fazer o nosso primeiro formulário o pra criar a conta e o personagem junto (quase igual ao que o Eltrus fez no seu tutorial) com o nome: formulario_acc.html <html> <head> <title>Criar conta</title> </head> <body> <form[color=Blue] method="post" [/color]action="cria_acc.php"> Numero da conta<br/> <input type="text" name="acc"/><br/> Senha<br/> <input type="password" name="pass"/><br/> Nome(personagem)<br/> <input type="text" name="name"/><br/> Sexo<br/> <select name="sex"> <option value="0">Feminino</option> <option value="1">Masculino</option> </select><br/> Vocação<br/> <select name="voc"> <option value="1">Sorcerer</option> <option value="2">Druid</option> <option value="3">Paladin</option> <option value="4">Knight</option> </select><br/> <input type="submit" /><br/> </form> </body> <html> Azul:O jeito que o formulario será enviado o post é o mais segura pois o usuário não poderá muda-los depois. Vermelho:para onde esse formulario será enviado. agora veremos o grandioso(é grande mesmo) cria_acc.php ,iremos velo em partes pois ele é muito grande.... 1°parte include("config.inc.php"); a função include vai adicionar no inicio do nosso arquivo o conteúdo do arquivo config.inc.php assim não precisamos defini-las aqui de novo e se precisarmos mudar alguma mudamos no config.inc.phpif 2°parte: if que não acaba mais ^^ 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([email protected]($_POST["name"],"*/\[email protected]#$%")){ if(!file_exists($serverdata."players/".$_POST["name"].".xml")){ linha2: verifica se o numero da conta é numérico, mas por algum motivo ela a função is_nan diz SIM se acc$_POST["acc"](que é a variável que agora guarda o numero da conta) não for um numero, mas queremos que elas diga SIM se for um numero, por isso colocamos uma ! antes da função para que ela diga a respostas oposta ou seja se ela quiser dizer sim ela diz não ^^.(o mesmo vale para todas as vezes que o ! aparecer antes da função) linha3:verificamos se a senha tem um mínimo de digito e um maximo com a função strlen(obs: $_POST["pass"]e onde esta guardada a senha ) que nos diz quantos dígitos tem o que esta dentro daquela variável. obs: o || tem o mesmo significado que OR(ou). linha4: vamos ate a pasta do servidor ver se já tem uma conta com esse numero e 3 linha mais em baixo verificamos a mesma coisa só que com o Jogador. lembra da variável $serverdataque definimos antes olha onde estamos usando elas. linha1: aqui usamos a função IsSet pra ver se o numero da conta e a senha estão preenchidos ou não e na ante-penultima linha fazemos o mesmo com o nome do personagem($_POST["nome"]). linha5:estamos verificando se o nome do personagem não possui caracteres especiais, a @ esta manipulado a função strpbrkpois elas não serve par dizer verdade caso ache um daqueles caracteres ela apenas diz falso se não achar,por isso usamos a @ para fazer ela dizer verdade caso consiga. 3°criando o xml da conta(Para entender melhor essa parte tenha a vista o arquivo: Acc_base.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); agora sim conplica(nem tanto) linha1 :bem nessa linha nos pegamos o arquivo Acc_base.xml e gardamos de uma forma muito dinamica na variavel $AccBase Linha2:bem sabe a tag <account>que é a tag do XML da conta, agora ela esta na variavel $AccBase, então para colocarrmos a senha so presisamos atribuir um valor a um parametro basta faser como fisemos na linha 2 do codigo acima. linha3: na linha 3 nois adicionamos uma nova tag chamda <character>(é a que garda que personagem a conta tem) dentro da tag <characters> que esta dentro da tag <account>(representada agora por $AccBase) e gardamos isso em uma nova variavel (para facilitar). linha4 e 5: adicionamos a tag do personagem o atributo que garda seu nome e seu repectivo valor, asim como o atriboto que dis em qual mundo esta o personajem linha 6: bem aqui comesamos a gravar a conta do jogador.a função fopen abre o arquivo(no caso o xml cojo nome é o numero da conta) nesse caso ele cria o arquivo e o abre. linha 8: bem aqui gravamos dentro do arquvio da conta o seu conteudo. mas por que usar $AccBase->asXML() é não só $AccBase? simples a variavel $AccBase não é uma cadei de carcters que representa um arquivo xml + sim um objeto que representa um xml por isso temos que usar $AccBase->asXML() que o que seja gravado no aquivo da conta seja uma cadeia de caracters que representa um XML. linha9:fecha o arquivo e pronto o arquivo da conta foi criado con suseso. Bem irei ficar por aqui com o tutorial pois o Post ja esta muito grade na prosima parte do tutorial explicarei a parte que cria o XML do personagem.
  7. Antes de mais nada, essa é a parte 2 do tutorial se você não leu a parte 1 ela se encontra no seguinte link:[Hidden Content] 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: 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([email protected]($_POST["name"],"*/\[email protected]#$%")){ 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
×