Eu estava tentando fazer um programa php de inscrição, login e logout sozinho já há algum tempo. Finalmente acho que consegui. Como sou um novato em codificação php, adoraria se vocês pudessem dar uma olhada e me dar críticas. Por exemplo, onde posso melhorar, quais são as ameaças à segurança que meu código pode resultar ou algo assim:P/>.

Isso é tudo que você precisa fazer:
1) Baixe todos os 7 arquivos php e html. (Quando apliquei minha lógica, obtive 7 arquivos!! :(/> Todos são pequenos códigos pequenos, provavelmente vocês podem transformá-los em um programa haha)
2) Execute primeiro ocreatedatabase.php para criar o banco de dados.
3) Use wamp ou xampp ou o que você tiver para compilar o php e abrir homepage.html.
4) Sim, é isso, você precisa se registrar antes de fazer login de qualquer maneira.
5) Pode ser necessário alterar os detalhes do mysql_connect em login.php e signup.php. Eu uso o localhost padrão, root, (sem senha) para conectar.

Ou se você não quiser baixar é só ver este código abaixo:

Criadodatabase.php

Este é o formulário que contém os formulários de login e inscrição.
SITE UBER LEGAL

SITE UBER LEGAL

inscrever-se

nome de usuário:
Senha:
Confirme sua senha:
 

Conecte-se

nome de usuário:
Senha:
 


"; else echo "Nome de usuário inválido
"; echo "Voltar à página de login"; ) /* 1) Não devemos permitir nomes de usuário semelhantes. (Y) 2) fazer com que voltar à página de login funcione. (Y) 3) Não devemos permitir nomes de usuário e senhas nulos.( S) */ ?>

Volte para a página de login "; ) else ( $_SESSION["access"]=1; $_SESSION["user"]=$_POST; header("Location: website.php"); ) mysql_close($con); / * 1) Atualmente, apenas uma mensagem é impressa quando você digita uma senha correta e outra, quando é uma senha errada. DE QUALQUER FORMA se for uma senha correta. Se o link para essa página for escrito diretamente sem fazer login, você será redirecionado para a página de login.) Forneça uma senha ao servidor. 3) A nova página para a qual o usuário acessa quando digita a senha correta é o perfil do usuário. 4) Deve haver uma opção para excluir o perfil na página de perfil . Você também pode fazer upload de uma foto de exibição, escrever sobre mim e outras coisas.*/ ?>

Acesso.php

Website.php (o site ao qual um usuário que faz login se conecta. Ele também contém o botão de logout.

SITE UBER LEGAL

Bem-vindo ao site super legal



Muito obrigado a todos que dizem olá neste tópico:D/>

Nos últimos anos, a hospedagem na web passou por uma mudança dramática. Os serviços de hospedagem na Web mudaram a forma como os sites funcionam. Existem vários tipos de serviços, mas hoje falaremos sobre as opções que estão disponíveis para revendedores de hospedagem. Eles são Revenda de Hospedagem Linux e Revenda de Hospedagem Windows. Antes de entendermos as diferenças fundamentais entre os dois, vamos descobrir o que é revenda de hospedagem.

Revenda de hospedagem

Em termos simples, revenda de hospedagem é uma forma de hospedagem na web em que o proprietário de uma conta pode usar seu espaço dedicado no disco rígido e largura de banda alocada para revender para sites de terceiros. Às vezes, um revendedor pode alugar um servidor dedicado de uma empresa de hospedagem (Linux ou Windows) e alugá-lo a terceiros.

A maioria dos usuários do site usa Linux ou Windows. Isso tem a ver com o tempo de atividade. Ambas as plataformas garantem que seu site fique ativo 99% do tempo.

1.Personalização

Uma das principais diferenças entre um plano de revenda de hospedagem Linux e aquele fornecido pelo Windows é a customização. Embora você possa experimentar ambos os players de várias maneiras, o Linux é muito mais personalizável que o Windows. Este último tem mais recursos do que seu equivalente e é por isso que muitos desenvolvedores e administradores consideram o Linux muito fácil de usar.

2. Aplicações

Diferentes serviços de revenda de hospedagem têm aplicações diferentes. Linux e Windows têm sua própria gama de aplicativos, mas o último tem uma vantagem quando se trata de números e versatilidade. Isso tem a ver com a natureza de código aberto do Linux. Qualquer desenvolvedor pode fazer upload de seu aplicativo na plataforma Linux e isso o torna um provedor de hospedagem atraente para milhões de proprietários de sites.

No entanto, observe que se você estiver usando Linux para hospedagem na web, mas ao mesmo tempo usar o sistema operacional Windows, alguns aplicativos podem simplesmente não funcionar.

3. Estabilidade

Embora ambas as plataformas sejam estáveis, o Linux Reseller Hosting é mais estável dos dois. Por ser uma plataforma de código aberto, pode funcionar em diversos ambientes. Esta plataforma pode ser modificada e desenvolvida de vez em quando.

Compatibilidade 4.NET

Não é que o Linux seja superior ao Windows em todos os aspectos possíveis. Quando se trata de compatibilidade com .NET, o Windows rouba os holofotes. Os aplicativos da Web podem ser facilmente desenvolvidos em uma plataforma de hospedagem Windows.

5. Vantagens de custo

Ambas as plataformas de hospedagem são acessíveis. Mas se você está com falta de dinheiro, então você deve optar pelo Linux. É gratuito e por isso é escolhido por tantos desenvolvedores e administradores de sistema em todo o mundo.

6. Facilidade de configuração

O Windows é mais fácil de configurar do que seu equivalente. Dito e feito, o Windows ainda mantém sua facilidade de uso todos esses anos.

7 Segurança

Opte pela revenda de hospedagem Linux porque é mais segura que o Windows. Isso vale especialmente para pessoas que administram seus negócios de comércio eletrônico.

Conclusão

Escolhendo entre os doisdependerá da sua necessidade e da flexibilidade de custos. Ambos os serviços de hospedagem apresentam vantagens únicas. Embora o Windows seja fácil de configurar, o Linux é econômico, seguro e mais versátil.



Em março deste ano, tive uma experiência muito ruim com uma empresa de mídia que se recusou a me pagar e a responder meus e-mails. Eles ainda me devem milhares de dólares e o sentimento de raiva que sinto permeia todos os dias. Acontece que não estou sozinho e centenas de outros proprietários de sites estão no mesmo barco. É uma espécie de paridade com a publicidade digital.

Com toda a honestidade, tenho este blog há muito tempo e já naveguei por diferentes redes de anúncios no passado. Depois de remover os blocos de anúncios daquela empresa que me enganou, voltei à estaca zero. Nunca gostei muito do produto AdSense do Google, apenas porque parece o "fundo do poço" dos anúncios gráficos. Não do ponto de vista da qualidade, mas do ponto de vista da receita.

Pelo que entendi, você deseja publicidade do Google em seu site, mas também deseja que outras grandes empresas e agências façam isso. Dessa forma, você maximiza a demanda e a receita.

Depois da minha experiência negativa, recomendei uma empresa chamada Newor Media. E, para ser honesto, não fui vendido no início, principalmente porque não consegui encontrar muitas informações sobre eles. Encontrei algumas avaliações decentes em outros sites e, depois de conversar com alguém lá, decidi tentar. Direi que eles são SUPER úteis. Todas as redes com as quais trabalhei foram muito curtas comigo em termos de respostas e andamento. Eles responderam a todas as perguntas e foi um processo realmente encorajador.

Estou exibindo os anúncios há alguns meses e os ganhos estão quase alinhados com o que eu estava ganhando com a outra empresa. Portanto, não posso realmente dizer se eles são muito melhores do que os outros, mas onde eles se destacam é um ponto que eu realmente quero enfatizar. A comunicação com eles é diferente de qualquer outra rede em que já trabalhei. Aqui está um caso em que eles realmente são diferentes:

Eles me enviaram o primeiro pagamento dentro do prazo com Paypal. Mas como não estou nos EUA (e acho que isso acontece com todos), recebi uma taxa do Paypal. Mandei um e-mail para meu representante sobre isso, perguntando se havia uma maneira de evitar isso no futuro.

Eles disseram que não poderiam evitar a taxa, mas que eles REEMBOLSARIAM TODAS AS TAXAS... INCLUINDO O PAGAMENTO MAIS RECENTE! Não só isso, mas o pagamento do reembolso foi recebido em 10 MINUTOS! Quando você conseguiu fazer uma solicitação dessas sem precisar ser encaminhado ao “departamento financeiro” para nunca mais ser atendido.

O resultado final é que adoro esta empresa. Talvez eu consiga ganhar mais em outro lugar, não tenho certeza, mas eles têm um editor vitalício comigo. Não sou um site grande e não gero muita receita, mas me sinto como um cliente muito importante quando falo com eles. É realmente uma lufada de ar fresco em uma indústria que está repleta de fraudes e falta de resposta.

Os microcomputadores criados pela Raspberry Pi Foundation em 2012 tiveram enorme sucesso em estimular níveis de criatividade em crianças pequenas e esta empresa sediada no Reino Unido começou a oferecer programas iniciais de aprendizagem de código, como o pi-top an Kano. Agora existe uma nova startup que está fazendo uso da eletrônica Pi, e o dispositivo é conhecido como Pip, um console portátil que oferece tela sensível ao toque, múltiplas portas, botões de controle e alto-falantes. A ideia por trás do dispositivo é envolver os jovens com um dispositivo de jogo retrô, mas que também oferecerá uma experiência de aprendizado de código por meio de uma plataforma baseada na web.

A incrível plataforma de software oferecida com Pip oferecerá a oportunidade de começar a codificar em Python, HTML/CSS, JavaScript, Lua e PHP. O dispositivo oferece tutoriais passo a passo para que as crianças comecem a codificar e permite até mesmo fazer LEDs piscarem. Embora o Pip ainda seja um protótipo, certamente será um grande sucesso na indústria e envolverá as crianças que têm interesse em codificação e fornecer-lhes-á a educação e os recursos necessários para começarem a programar desde tenra idade.

Futuro da codificação

A codificação tem um grande futuro e, mesmo que as crianças não utilizem a codificação como carreira, elas podem se beneficiar aprendendo a codificar com este novo dispositivo que torna tudo mais fácil do que nunca. Com o Pip, até os mais jovens entusiastas da codificação aprenderão diferentes linguagens e estarão no caminho certo para criar seus próprios códigos, seus próprios jogos, seus próprios aplicativos e muito mais. É o futuro da era eletrônica e o Pip permite que os blocos básicos de codificação sejam dominados.
A ciência da computação tornou-se uma parte importante da educação e com dispositivos como o novo Pip, as crianças podem começar a melhorar a sua educação em casa enquanto se divertem. A codificação vai muito além da simples criação de sites ou software. Ele pode ser usado para aumentar a segurança em uma cidade, para ajudar em pesquisas na área médica e muito mais. Dado que vivemos agora num mundo dominado pelo software, a codificação é o futuro e é importante que todas as crianças tenham pelo menos uma compreensão básica de como funciona, mesmo que nunca utilizem estas competências como carreira. Em termos de futuro, a codificação será um componente crítico da vida diária. Será a língua do mundo e não conhecer os computadores ou como funcionam pode representar desafios tão difíceis de superar como o analfabetismo.
A codificação também proporcionará grandes mudanças no mundo dos jogos, especialmente quando se trata de jogos online, incluindo o acesso aos casinos online. Para ver como a codificação já melhorou o mundo dos jogos, dê uma olhada em alguns sites de cassino bem avaliados que dependem de codificação. Dê uma olhada rápida para conferir e ver como a codificação pode apresentar ambientes online realistas.

Como Pip envolve as crianças

Quando se trata da oportunidade de aprender codificação, as crianças têm muitas opções. Existem vários dispositivos e dispositivos de hardware que podem ser adquiridos, mas Pip adota uma abordagem diferente com seus dispositivos. A portabilidade do dispositivo e a tela sensível ao toque oferecem uma vantagem em relação a outros dispositivos de codificação existentes no mercado. O Pip será totalmente compatível com componentes eletrônicos além do sistema Raspberry Pi HAT. O dispositivo usa linguagens padrão e possui ferramentas básicas e é um dispositivo perfeito para qualquer programador iniciante. O objetivo é remover quaisquer barreiras entre uma ideia e a criação e disponibilizar ferramentas imediatamente para uso. Uma das outras grandes vantagens do Pip é que ele utiliza um cartão SD, podendo ser usado também como computador desktop quando conectado a um monitor e mouse.
O dispositivo Pip ajudaria crianças e novatos em codificação interessados ​​​​com entusiasmo em aprender e praticar codificação. Ao oferecer uma combinação de conclusão de tarefas e ajustes para resolver problemas, o dispositivo certamente envolverá a geração mais jovem. O dispositivo permite então que esses jovens programadores passem para níveis mais avançados de codificação em diferentes linguagens, como JavaScript e HTML/CSS. Uma vez que o dispositivo reproduz uma consola de jogos, irá imediatamente captar a atenção das crianças e envolvê-las na aprendizagem de codificação desde tenra idade. Ele também vem com alguns jogos pré-carregados para chamar a atenção, como Pac-Man e Minecraft.

Inovações que virão

A inovação futura depende em grande parte da capacidade atual de codificação da criança e da sua compreensão geral do processo. À medida que as crianças aprendem a programar desde cedo usando dispositivos como o novo Pip, elas adquirirão as habilidades e o conhecimento para criar coisas incríveis no futuro. Esta poderia ser a introdução de novos jogos ou aplicativos ou mesmo ideias que podem ganhar vida para ajudar em pesquisas e tratamentos médicos. Existem infinitas possibilidades. Como o nosso futuro será controlado por software e computadores, começar jovem é o melhor caminho a seguir, por isso o novo Pip é voltado para o público jovem. Ao oferecer um dispositivo de console que pode jogar enquanto ensina habilidades de codificação, os jovens membros da sociedade estão no caminho certo para se tornarem criadores de software no futuro que mudará todas as nossas vidas. Isto é apenas o começo, mas é algo que milhões de crianças em todo o mundo estão começando a aprender e a dominar. Com o uso de dispositivos como o Pip, os conceitos básicos de codificação são abordados e as crianças aprenderão rapidamente as diferentes linguagens de codificação que podem levar a caminhos incríveis ao entrarem na idade adulta.

Neste tutorial, criaremos um formulário de inscrição de usuário que adiciona um usuário a um banco de dados e, em seguida, envia um e-mail de confirmação no qual o usuário deve clicar antes que sua conta seja ativada.

Precisa de alguma ajuda?

Este tutorial irá guiá-lo pelo processo do zero, mas se preferir, você pode usar um dos muitos formulários de inscrição por e-mail prontos no Envato Market. Aqui estão algumas das opções mais populares.

1.

O plug-in jQuery do formulário de inscrição simples coletará o endereço de e-mail do visitante em seu site de uma forma eficaz e atraente. Possui muitas opções de personalização opcionais que você pode configurar em minutos.

2. Hype: Formulário de inscrição SmartR

Hype é um formulário de inscrição SmartR, pré-configurado e adicionado a qualquer página com apenas um clique. Ele aproveita o poder de seus usuários e de suas redes para aumentar ativamente as inscrições e aumentar exponencialmente sua base de usuários.

3. Formulário de inscrição por e-mail da página inicial beta

Este é um formulário muito simples, mas elegante, para o seu site, onde os visitantes podem inserir seu endereço de e-mail (e nome, se desejarem) para serem adicionados a uma lista de contatos. Ele usa AJAX para enviar e validar emails e também funcionará se o usuário tiver o JavaScript desabilitado.

A instalação é rápida e indolor. Este formulário não requer um banco de dados para funcionar, pois criará e armazenará entradas em um arquivo CSV.

Então, limpamos nossas variáveis, agora vamos verificar se o usuário esqueceu algum campo.

If(empty($username))( //coloque o código em mim, por favor) if(empty($password))( //coloque o código em mim, por favor) if(empty($email))( //coloque o código em mim, por favor )

Agora temos três instruções if que verificam se cada campo está vazio. Se o campo estiver vazio iremos atribuir algumas variáveis.

Para deixar as coisas mais limpas, criaremos um array que conterá o status do processo de inscrição, bem como qualquer texto que precisarmos mostrar ao usuário.

Logo acima desse trecho de código, vamos criar um array e algumas variáveis.

$ação = array(); $ação["resultado"] = null; $texto = array();

Primeiro, estamos criando um array em branco chamado action e, em seguida, definindo um valor de array como resultado. O resultado terá um valor de sucesso ou erro. Em seguida, criamos outro array em branco chamado texto. Isso conterá qualquer texto que quisermos mostrar ao usuário durante a inscrição.

No momento, nossas instruções if que verificam nossas variáveis ​​não estão executando nenhum código, então vamos prosseguir e colocar algum código dentro da primeira instrução if.

Coloque este código dentro da instrução if do nome de usuário.

$action["resultado"] = "erro"; array_push($text,"Você esqueceu seu nome de usuário");

Digamos que o usuário envie o formulário sem um nome de usuário. Nossa instrução executará o código acima. Primeiro, definirá o campo de resultado de nossa matriz de ação como erro.

Então usaremos array_push() para colocar algum texto em nosso array de texto. Usaremos esse mesmo trecho de código para as duas instruções "if" finais, então copie e cole esse código nas duas últimas instruções if. Você provavelmente desejará alterar o texto para corresponder à instrução if atual.

Nota: Estamos usando array_push() caso tenhamos vários erros no envio do formulário. Se todas as instruções if forem executadas, a matriz de texto será semelhante a:

Array( => "Você esqueceu seu nome de usuário", => "Você esqueceu sua senha", => "Você esqueceu seu e-mail")

Agora precisamos verificar se temos algum erro para que possamos continuar com o processo de inscrição.

Etapa 6: sem erros, vamos cadastrar o usuário

Vamos verificar se o valor do resultado do nosso array de ações está definido como erro.

If($action["result"] != "error")( //sem erros, continue inscrição $password = md5($password); ) $action["text"] = $text;

Também estamos executando nossa senha por meio da função md5(). Isso pega a senha e retorna uma sequência de 32 caracteres parecida com esta: . É uma boa prática executar a senha por meio de algum tipo de função de hash antes de colocá-la no banco de dados. Isso evita que as pessoas vejam as senhas dos usuários se seu banco de dados for hackeado.

Uma verificação rápida do valor do resultado da nossa ação e podemos continuar com a inscrição. Se nosso resultado for um erro, pularemos todo esse código e enviaremos os erros ao nosso usuário para que ele possa fazer as alterações necessárias.

Na última parte deste código, estamos colocando os valores do seu array de texto em nosso array de ação.

Etapa 7: Adicionando o usuário ao banco de dados

Coloque este código dentro da nossa última instrução if.

Instrução If verificando se há erros ... //adiciona ao banco de dados $add = mysql_query("INSERT INTO `users` VALUES(NULL,"$username","$password","$email",0)"); if($add)( //o usuário foi adicionado ao banco de dados )else( $action["result"] = "error"; array_push($text,"O usuário não pôde ser adicionado ao banco de dados. Motivo: " . mysql_error ()); = )

Usamos mysql_query() e INSERT para inserir as informações dos usuários no banco de dados. A seguir, criamos outra instrução if verificando se o usuário foi adicionado ao banco de dados. Fazemos isso verificando se a variável $add é verdadeira ou falsa.

Se o usuário for adicionado podemos continuar com a inscrição; caso contrário, atribuiremos algumas variáveis ​​familiares e interromperemos a inscrição.

Ao trabalhar com consultas MySQL, usamos a função mysql_error() se houver erros, pois ajuda a depurar o que há de errado com suas consultas. Irá gerar erros de texto quando algo estiver errado. Isso é bom!

Etapa 8: a confirmação é necessária

O usuário enviou o formulário, tudo confere e agora está morando no banco de dados. Queremos que o usuário possa usar sua conta, então vamos configurar a confirmação.

Se adicionado, verifique ... //obtenha o novo ID do usuário $userid = mysql_insert_id(); //cria uma chave aleatória $key = $username . $e-mail. data("meu"); $chave = md5($chave); //adiciona linha de confirmação $confirm = mysql_query("INSERT INTO `confirm` VALUES(NULL,"$userid","$key","$email")"); if($confirm)( //vamos enviar o e-mail )else( $action["result"] = "error"; array_push($text,"Confirmar que a linha não foi adicionada ao banco de dados. Motivo: " . mysql_error( )); )

Para facilitar as coisas, vamos atribuir o novo ID do usuário a uma variável para que possamos usá-lo mais tarde. Fazemos isso usando m ysql_insert_id() . Isso definirá $userid para qualquer que seja o ID do novo usuário.

Em seguida, criamos a chave aleatória para esse usuário específico. Criamos uma variável chamada key e a preenchemos com um valor de nome de usuário, email e data. A string será semelhante [e-mail protegido]. Depois disso, usamos a função md5() para convertê-lo em uma string aleatória exclusiva para aquele usuário.

Usando mysql_query() e INSERT novamente, colocamos o novo ID do usuário, a chave e o email do usuário no banco de dados.

Etapa 9: Configurando os modelos de e-mail

Faremos uma pausa na codificação PHP e criaremos dois novos arquivos. Para ser rápido e fácil, usaremos dois modelos que incluí neste tutorial. Os dois arquivos que veremos são signup_template.html e signup_template.txt . Swift nos permite atribuir uma versão HTML e TXT do e-mail, caso o cliente de e-mail do usuário não suporte e-mails HTML.

Abra signup_template.html Observação: você pode ler HTML em e-mails em carsonified. Não vamos editar este arquivo, vou apenas explicar o que está acontecendo e então você poderá brincar com ele quando o tutorial for concluído. A parte mais importante deste arquivo são as tags que se parecem com (USERNAME) e confirm.php?email=(EMAIL)&key=(KEY) . Vamos escrever uma função que usa este modelo e substitui essas tags pelas variáveis ​​do nosso formulário.

Etapa 10: a função do modelo

Abra inc/php/functions.php e coloque este código dentro.

Função format_email($info, $format)( //definir a raiz $root = $_SERVER["DOCUMENT_ROOT"]."/dev/tutorials/email_signup"; //pegar o conteúdo do modelo $template = file_get_contents($root." /signup_template.".$format); //substitui todas as tags $template = ereg_replace("(USERNAME)", $info["username"], $template); $template = ereg_replace("(EMAIL)", $ info["email"], $template); $template = ereg_replace("(KEY)", $info["key"], $template); $template = ereg_replace("(SITEPATH)","http:// site-path.com", $template); //retorna o html do template return $template; )

format_email() está usando duas variáveis ​​que serão usadas em index.php. O primeiro é o nosso array de informações do formulário e o segundo é o formato. Temos uma variável de formato para que possamos reutilizar esse array para as versões HTML e TXT do modelo.

Primeiro definimos a raiz. Isso aponta para a pasta onde os modelos estão hospedados.

A seguir abrimos o conteúdo do nosso modelo e o atribuímos a uma variável.

Agora vamos usar ereg_replace() para substituir nossas tags (USERNAME) em nosso modelo pelo conteúdo do nosso formulário. É basicamente um sistema de templates super simples.

Por último, retornamos a variável template que contém todo o html.

Explicação: Resumindo, format_email() abre nossos arquivos de modelo, pega o HTML e o atribui à nossa variável. Esta é apenas uma maneira mais limpa de atribuir todo o HTML na própria função.

Etapa 11: Enviando o e-mail

Vamos escrever outra função para lidar com Swift e enviar e-mails.

Função send_email($info)( //formata cada e-mail $body = format_email($info,"html"); $body_plain_txt = format_email($info,"txt"); //configura o mailer $transport = Swift_MailTransport::newInstance (); $mailer = Swift_Mailer::newInstance($transport); $message = Swift_Message::newInstance(); $message ->setSubject("Bem-vindo ao nome do site"); $message ->setFrom(array(" [e-mail protegido]" => "Nome do site")); $message ->setTo(array($info["email"] => $info["nome de usuário"])); $message ->setBody($body_plain_txt); $message - >addPart($body, "text/html"); $resultado = $mailer->send($mensagem); return $resultado; )

Assim como format_email() , send_email() usa nosso array info como uma variável. A primeira parte da função atribuímos duas variáveis, $body e $body_plain_text . Estamos usando format_email() para atribuir os valores HTML do nosso modelo a cada variável. Agora vem a parte boa. Configuramos a instância rápida usando Swift_MailTransport:newInstance() e, em seguida, configuramos o mailer usando Swift_Mailer::newInstance($transport) ;

Criamos uma nova instância da mensagem Swift e começamos a atribuir algumas variáveis ​​a esta instância. Definimos o assunto do e-mail para o endereço de e-mail e então usamos setBody() para atribuir a versão em texto do e-mail à instância do mailer. Para adicionar a versão HTML usamos addPart() . A função send() cuida do envio do email e depois retornamos o resultado. Tudo bem, temos nossas funções de criação e envio de e-mail escritas, vamos voltar ao index.php e começar a finalizar a inscrição principal.

Etapa 12: Enviamos? Vamos confirmar?

Nossa última parte deveria ter sido a instrução if verificando se a linha de confirmação foi criada.

Vamos enviar o e-mail e verificar se deu tudo certo.

Se confirmar... //inclui a classe swift include_once "inc/php/swift/swift_required.php"; //coloca informações em um array para enviar para a função $info = array("username" => $username, "email" => $email, "key" => $key); //envia o e-mail if(send_email($info))( //e-mail enviado $action["result"] = "success"; array_push($text,"Obrigado por se inscrever. Verifique seu e-mail para confirmação!") ; )else( $action["resultado"] = "erro"; array_push($text,"Não foi possível enviar email de confirmação"); )

Sem a classe Swift não podemos enviar nenhum e-mail, então em nossa primeira linha incluímos a classe swift. Precisamos enviar nossas informações para ambas as nossas novas funções, então criamos um novo array e atribuímos nossas variáveis ​​a isso. Eu sei, eu sei, mais declarações if, mas precisamos verificar se há erros para tornar mais fácil para os usuários. Você sempre deve assumir que os usuários cometerão todos os erros possíveis imagináveis.

Envolvemos nossa função send_email() em outra instrução if, além de passar o array $info. Se o email for enviado atribuímos um valor de sucesso e agradecemos ao usuário pela inscrição. Se houver erros, usamos as variáveis ​​familiares. Agora que estamos quase terminando a inscrição, apenas uma última função precisa ser criada. Embora estejamos atribuindo todas essas variáveis ​​e textos de erro/sucesso, não exibimos essas informações ao usuário.

Volte para funções.php e cole este código.

//limpa os erros função show_errors($action)( $error = false; if(!empty($action["result"]))( $error = "

    "."\n"; if(is_array($action["text"]))( //retira cada erro foreach($action["text"] as $text)( $error .= ""."\ n"; ) )else( //erro único $error .= "

    $ação

    "; ) $ erro .= "
"."\n"; ) return $erro; )

Isso pode parecer confuso, mas na verdade apenas faz com que nossos sucessos/erros pareçam legais.

Primeiro, ele verifica se o array está vazio, para que não executemos o código quando ele não for necessário.

Em seguida, ele cria uma tag ul e aplica o resultado como uma classe. Isso será sucesso ou erro e é apenas estético.

Em seguida, verificamos se a variável de texto é um array ou simplesmente uma string. Se for uma string, nós a envolvemos em um li. Se for uma matriz, percorremos cada item da matriz e a envolvemos em um li.

Por último, fechamos o ul e retornamos a string inteira.

Se voltarmos para index.php e colocarmos este código logo após incluir header.php, podemos encerrar esta seção.

O cabeçalho inclui...

Uma pequena explicação rápida. Estamos pegando todos os valores do nosso array de ações e passando-os para a função show_errors(). Se houver algum conteúdo, ele retornará uma bela lista não ordenada.

Etapa 13: Confirmando o usuário

Devemos ter uma boa noção de como o script está funcionando; então, para o próximo script, darei a você todo o pedaço de código e depois o analisarei com você.

Abra confirm.php e cole-o entre o cabeçalho include e sua função show_errors().

//configura algumas variáveis ​​$action = array(); $ação["resultado"] = null; //validação rápida/simples if(empty($_GET["email"]) || vazia($_GET["key"]))( $action["result"] = "error"; $action["text" ] = "Estão faltando variáveis. Verifique seu e-mail."; ) if($action["result"] != "error")( //limpe as variáveis ​​$email = mysql_real_escape_string($_GET["email"] ); $key = mysql_real_escape_string($_GET["key"]); //verifica se a chave está no banco de dados $check_key = mysql_query("SELECT * FROM `confirm` WHERE `email` = "$email" AND `key ` = "$key" LIMIT 1") ou die(mysql_error()); if(mysql_num_rows($check_key) != 0)( //obtém as informações de confirmação $confirm_info = mysql_fetch_assoc($check_key); //confirma o email e atualize o banco de dados de usuários $update_users = mysql_query("UPDATE `users` SET `active` = 1 WHERE `id` = "$confirm_info" LIMIT 1") or die(mysql_error()); //deleta a linha de confirmação $delete = mysql_query("DELETE FROM `confirm` WHERE `id` = "$confirm_info" LIMIT 1") or die(mysql_error()); if($update_users)( $action["resultado"] = "sucesso"; $action ["text"] = "Usuário foi confirmado. Obrigado!"; )else( $action["result"] = "error"; $action["text"] = "O usuário não pôde ser atualizado Motivo: ".mysql_error();; ) )else( $ action["result"] = "error"; $action["text"] = "A chave e o email não estão em nosso banco de dados."; ) )

A maior parte disso deve parecer muito familiar; então vou avançar e verificar se a chave está na seção do banco de dados.

Novamente, usamos mysql_query() para obter quaisquer linhas no banco de dados onde o email e a chave são iguais às chaves fornecidas pelo email do usuário.

Usamos mysql_num_rows() para verificar se o número de linhas retornadas é maior que 0.

Se o email e a chave estiverem no banco de dados, pegamos todas as informações do banco de dados usando mysql_fetch_assoc() .

Agora que o usuário confirmou sua conta, precisamos atualizar o banco de dados e definir a linha ativa como 1.

Usamos mysql_query() novamente, mas em vez de INSERT usamos UPDATE para atualizar a linha ativa para 1, onde o ID do usuário é o mesmo do nosso ID de usuário atual.

Para limpar tudo usamos mysql_query() e DELETE para remover a linha de confirmação do banco de dados. Isso garante que o usuário não possa voltar a esta página e reconfirmar. Também mantém o banco de dados limpo e organizado.

Conclusão

Cobrimos muitas áreas diferentes neste tutorial. Baixamos e incluímos um script de terceiros para lidar com o envio de e-mails, implementamos a validação de formulário simples e também criamos um sistema de modelo super simples para estilizar nossos e-mails. MySQL, abordamos as três funções mais comuns do MySQL, então você não deverá ter problemas para concluir alguns tutoriais mais avançados.

notas finais

  • Usei o Swift Mailer como nosso script de implantação de e-mail, que pode ser baixado aqui: http://swiftmailer.org/
  • Também usei estilos de botão fornecidos pela Zurb. Não deixe de dar uma olhada e dar-lhes um pouco de amor. http://www.zurb.com/blog_uploads/0000/0485/buttons-02.html

Obrigado pela leitura e não deixe de me visitar no

Vamos criar nossa própria página de registro multisite em vez do wp-signup.php padrão.

Em uma instalação típica do WordPress, a página de registro (login, redefinição de senha) é exibida no arquivo wp-login.php.

  • /wp-login.php - autorização
  • /wp-login.php?action=register - registro
  • /wp-login.php?action=lostpassword - redefinição de senha

Existem condições separadas para multisite em wp-login.php. Portanto, quando você clica em /wp-login.php?action=register em um multisite, o WordPress irá redirecionar para a página /wp-signup.php. Em muitos temas a página não parece muito atrativa, então faremos a nossa própria.

Site principal da rede

Por padrão, o WordPress abre a página de inscrição (wp-signup.php) no domínio principal (site) da web. Porém, é possível fazer uma página de cadastro separada para cada site da rede, mesmo que tenham temas diferentes. Consideraremos o caso em que todos os sites da rede possuem sua própria página de cadastro, mas o mesmo tema é utilizado e os sites diferem apenas no idioma. Se forem usados ​​temas diferentes, será necessário mais código.

funções.php?

Não. O nome deste arquivo parece ser mencionado em todos os artigos do WordPress. No nosso caso, tendo em conta que a funcionalidade de registo está desenhada para vários sites, faz sentido movê-la para plugins MU que são carregados quando algum site é aberto.

Digressão lírica

É importante notar que os plug-ins MU são carregados antes dos plug-ins normais e antes do núcleo do WordPress ser totalmente carregado, portanto, chamar algumas funções pode levar a erros fatais no PHP. Esse carregamento “antecipado” tem suas vantagens. Digamos que dentro de qualquer tema você não possa se apegar a algumas ações que funcionam mesmo antes do arquivo functions.php ser carregado do tema. Um exemplo disso são as ações do plug-in Jetpack no formato jetpack_module_loaded_related-posts ( Related-posts é o nome do módulo) com as quais é possível rastrear a atividade dos módulos no Jetpack. Esta ação não pode ser "anexada" do arquivo do tema porque a ação já foi disparada antes do tema ser carregado - os plug-ins são carregados antes dos temas. Você pode dar uma olhada em uma imagem geral da ordem de carregamento do WordPress na página Action Reference no codex.

Ordem dos arquivos

Os plug-ins MU podem conter qualquer número de arquivos e qualquer estrutura que pareça lógica para você. Eu sigo uma hierarquia como esta:

|-mu-plugins |-|-load.php |-|-|-selena-network |-|-|-|-signup |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

No arquivo load.php estão conectados todos os "plugins" necessários para nossa rede:

// Carrega Traslates para todos os addons load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // A inscrição na rede requer WPMU_PLUGIN_DIR . "/selena-network/signup/plugin.php"; //Outros plugins // requerem WPMU_PLUGIN_DIR ...

As pastas de plugins são armazenadas dentro da pasta selena-network, cada uma tem seu próprio plugin.php , que incluímos em load.php . Isso dá flexibilidade e a capacidade de desabilitar e habilitar certas coisas rapidamente.

URL da página de registro

O filtro wp_signup_location é usado para especificar o endereço da página de inscrição. Ele pode ser encontrado dentro do arquivo wp-login.php e é responsável por redirecionar para wp-signup.php .

Caso "registrar": if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); exit;

Vamos adicionar nossa função a mu-plugins/selena-network/signup/plugin.php , que fornecerá o endereço da página de registro no site atual:

Função selena_network_signup_page ($url) ( return home_url () . "/signup/"; ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network é um prefixo que uso nos nomes de todas as funções dentro dos plugins MU no meu site para evitar colisões, ele deve ser substituído pelo seu próprio prefixo exclusivo. Adicione prioridade de filtro 99 porque alguns plugins como bbPress e BuddyPress podem substituir este endereço pelos seus próprios (os plugins MU são carregados antes dos plugins normais, veja acima). Observe que home_url() é usado em vez de network_site_url() para manter o visitante no mesmo domínio. Qualquer URL pode ser usado como endereço.

Criação de página

Agora vamos criar uma página com o endereço site.com/signup/ através da interface usual, e na pasta do tema filho, o modelo para nossa nova página é page-signup.php . Em vez da palavra “inscrição”, você pode usar um ID exclusivo.

Dentro do novo modelo, você precisa chamar a função selena_network_signup_main(), que exibirá o formulário de inscrição.

Vale ressaltar que todo o processo com templates é opcional e em vez disso você pode criar seu próprio shortcode, que também chamará a função selena_network_signup_main().

wp-signup.php e wp-activate.php

Agora vamos criar uma função que exibirá o formulário de cadastro. Para fazer isso, copie os arquivos wp-signup.php e wp-activate.php da raiz do WordPress para mu-plugings/selena-network/signup/ (e não se esqueça de incluí-los dentro de mu-plugins/selena-network /signup/plugin.php) . Outras manipulações de arquivos são extremamente difíceis e longas de descrever, então você mesmo terá que fazê-las. Vou apenas descrever o que exatamente precisa ser feito e publicar os arquivos fonte do meu projeto:

  1. No início do arquivo, remova todos os require , chamadas de função e outros códigos fora das funções.
  2. Renomeie todas as funções adicionando prefixos exclusivos aos nomes.
  3. Envolva a parte inferior do código wp-signup.php na função selena_network_signup_main e escreva global $active_signup bem no início; .
  4. Substitua o layout pelo seu próprio nos lugares certos.

Dentro do wp-activate.php você precisa fazer a mesma coisa:

  1. Remova todo o código fora das funções e envolva o layout em uma função separada.
  2. Altere o layout quando necessário.

O arquivo wp-activate.php é responsável pela página de ativação da conta. Tal como acontece com a página de registro, você precisa criar um modelo separado para ela, dentro do qual você precisa chamar a função do arquivo wp-activate.php.

Envio de e-mails de ativação

A página de cadastro envia um e-mail ao visitante com um link para ativar a conta. Por padrão, isso é tratado pela função wpmu_signup_user_notification() do arquivo ms-functions.php. Sua funcionalidade pode ser emprestada por sua função. O motivo pelo qual você precisa parar de usar esse recurso é que ele envia um link de ativação de conta de wp-activate.php . Você pode “desligar” esta função usando o filtro wpmu_signup_user_notification dando-lhe false (se isso não for feito, a carta de ativação será enviada duas vezes, ok, na verdade duas letras diferentes).

Função armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // Código da função wpmu_signup_user_notification() wp_mail($user_email, wp_specialchars_decode($subject), $message, $message_headers) ; retornar falso; ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

Como resultado, a página de registro no tema Selena ficou muito mais limpa e organizada.

Conclusão

Existem muitas outras maneiras não muito corretas na Internet de fazer o mesmo - redirecionamentos Apache, formulários AJAX que não funcionam sem Java Script, etc. possível em meu próprio site.

Observo que você deve editar os arquivos com cuidado e tentar não se desviar muito dos originais, para que no futuro, se o WordPress alterar os arquivos wp-signup.php e wp-activate.php, seja mais fácil comparar para encontrar mudanças.

Não se esqueça de olhar o código fonte de todas as funções descritas acima para entender completamente o que e como acontece dentro do código.

Bônus. Proteção contra spammers

Mesmo os menores sites WordPress são frequentemente bombardeados com registros de spam. Você pode escrever infinitas condições para filtrar bots, muitas vezes mais como uma tentativa de criar inteligência artificial 🙂 No caso de um multisite, o redirecionamento usual no Apache me ajudou muito, com o qual pedi para emitir 404 ao abrir /wp-signup. php e /wp-acitvate.php (não sou um especialista em configuração do Apache, então minhas regras podem não estar muito corretas).

RewriteEngine On RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # Regras padrão do WordPress :) # ... # END WordPress

P.S. Tento descrever algumas coisas de terceiros com o máximo de detalhes possível, porque quando comecei, às vezes não havia ninguém para avisar e explicar muitas coisas. Acredito também que essas pequenas dicas sobre outros materiais vão levar alguém a aprender algo novo e expandir sua área de conhecimento. As entradas RewriteRule usam expressões regulares, não são nada complicadas, por exemplo, o caractere ^ significa o início de uma linha.

Anúncios