Problemas no Cadastro PHP

12 respostas
Smokerox

Olá pessoal,

Faz um bom tempo que não desenvolvo sites em php e recentemente me apareceu uma rotina manual, queria tornar essa rotina automática e pra isso quero desenvolver um site pra agilizar ainda mais. A questão é que eu estou na parte do login e cadastro do usuário que vai executar a tarefa, porem, esse meu cadastro esta cadastrando certo só que quando consultado via sql a tabela aparece duas linha de cadastro, ou seja, uma é o cadastro que fiz a segunda linha aparece em branco.

apenas para conferência:
Database = project01;
Table = usuario;
colunas usuario = id(11)/nickname(10)/password(10) -> int/varchar/varchar

Segue código: Formulário - Cadastro de Usuários(simples)
<html>
<body>
<form action="cadastro.php" name="cadastro" method="post">
Nome: <input type="text" name="name"><br>
Senha: <input type="text" name="password"><br>
<input type="submit" value="enviar">
</form>
</body>
</html>
parte 2: Script cadastro
<?
include ("conectar.php");
$nome = $_POST['name'];
$senha = $_POST['password'];
$insere = mysql_query("INSERT INTO `usuario`( `nickname`, `password`) VALUES ('$nome','$senha')") or die(mysql_error());
if($insere)
echo "Cadastro realizado com sucesso!";
else
echo "Não foi possível fazer o cadastramento!";
?>
parte 3 Script login
<?
include ("conectar.php");
$nome= $_POST['name'];
$senha = $_POST['password'];
$logar = mysql_query("SELECT * FROM usuario WHERE name='$nome' AND password='$senha'") or die("erro ao selecionar");
if (strlen($senha)< 1)
echo '<p align="center">Senha ou apelido não conferem<BR><a href="javascript:history.back(1);">tente denovo</a></p>';
elseif (mysql_num_rows($logar)>0 ){
header("location:newpage.php");
} else {
echo '<p align="center">Senha ou apelido não conferem<BR><a href="javascript:history.back(1);">tente denovo</a></p>';
}
?>
parte 4 Formulário para login
<html>
<body>
<form action="login.php" name="cadastro" method="post">
Nome: <input type="text" name="nome"><br>
Senha: <input type="text" name="senha"><br>
<input type="submit" value="enviar">
</form>
</body>
</html>

Já aconteceu isso comigo algum tempo atrás mais não lembro como resolver o problema =/
obs: Por enguanto só pra teste, depois vou incluir javascript + css no final do desenvolvimento
Grato.

12 Respostas

Fexx

Porque que na clausula where está assim: where name = $name, sendo que o campo de sua tabela é nickname?
O correto não seria assim:

$logar = mysql_query("SELECT * FROM usuario WHERE nickname='$nome' AND password='$senha'") or die("erro ao selecionar");
Smokerox

Mal Fexx isso foi erro meu ao postar realmente é nickname, mas o cadastro funciona “certo”, a questão é o porque sempre que cadastro um usuario é adicionando uma linha a mais… =/

rsantik

posta o código do conectar.php

Vou fazer um ambiente de teste aqui.

E

provavelmente é algum redirect que você está fazendo e está enviando o form duas vezes.

antitribus

No script de cadastro tira os “`” do SQL, ficando assim:

$insere = mysql_query("INSERT INTO usuario (nickname , password) VALUES ('$nome','$senha')") or die(mysql_error());

Sendo que este tipo de script é inviável nas condições de desenvolvimento atuais.

Para uma melhor manuntenção sería interessante você estudar DAO em PHP e uso de PDO.

Smokerox

Conforme pedido, script conectar.php:

<? $host = "localhost"; $user = "root"; $senha = ""; $dbname = "project01"; mysql_connect($host, $user, $senha) or die("Não foi possível fazer a conexão"); mysql_select_db($dbname)or die("Não foi possível conectar-se com o banco de dados"); ?>

obs: o site vai ser desenvolvido localmente e usado também local, ou seja, segurança minima.

Referente as demais postagem, vou realizar os teste e depois comento o resultado!

Fexx

Cara fiz um teste e deu certo, veja ai e tenta implementar em seu código:

<?php 
include ("conexao.php");

$nome = $_POST['nome']; 
$senha = $_POST['senha']; 

$logar = mysql_query("SELECT * FROM usuario WHERE nickname= '$nome' AND password ='$senha'") or die("erro ao selecionar");  
while($linha =  mysql_fetch_array($logar)){
	
 $nickname = $linha['nickname'];
 $id = $linha['id'];

if (strlen($senha)< 1) {
echo '<p align="center">Senha ou apelido não conferem<BR><a href="javascript:history.back(1);">tente denovo</a></p>';  
}elseif (mysql_num_rows($logar)>0 ){  
	echo"$id $nickname";
} else {  
echo '<p align="center">Senha ou apelido não conferem<BR><a href="javascript:history.back(1);">tente denovo</a></p>';  
} 
}
?>
Fexx

Como disse o antitribus, a melhor pratica seria com PDO.

Smokerox

Certo, o problema do cadastro já esta resolvido.
Agora, minha atenção esta voltada no direcionamento para a pagina de configuração (ex: config.php).
Onde o usuário vai setar algumas informações(manual ou auto).
Bom a questão é que minha pagina login esta executando 'die' ...

Erro:
"Erro ao Selecionar"
------------------------------------------------------------

pagina login.php
<?php

include ("conectdb.php");

$nome = $_POST['nome'];
$senha = $_POST['senha'];

$logar = mysql_query("SELECT * FROM usuario WHERE nickname= '$nome' AND password ='$senha'") or die("erro ao selecionar");
while ($linha = mysql_fetch_array($logar)) {

    $nickname = $linha['nickname'];
    $id = $linha['id'];

    if (strlen($senha) < 1) {
        echo '<p align="center">Senha ou apelido não conferem<BR><a href="javascript:history.back(1);">tente denovo</a></p>';
    } elseif (mysql_num_rows($logar) > 0) {
        echo"$id $nickname";
    } else {
        echo '<p align="center">Senha ou apelido não conferem<BR><a href="javascript:history.back(1);">tente denovo</a></p>';
    }
}
?>
Smokerox

Problema resolvido, nome da tabela estava errado =)
Por enquanto, é só pessoal.
Obrigado aos que contribuirão :wink:

E

sobre o pdo, ao meu ver a melhor prática é usar um framework MVC. Quando pego algum trabalho em PHP costumo usar o Yii. Ele usa o PDO por baixo (e te permite montar as consultas) além de ter Criteria (também tem um framework interno ORM).

davidbuzatto

Não sou expert em PHP, mas da forma que o SQL está sendo gerado você não está correndo o risco de ter injeção de SQL?

Um exemplo correto, ao meu ver, seria:

$sql = sprintf( "SELECT * FROM usuario WHERE name = '%s' AND password = '%s'",
		mysql_real_escape_string( $nome ),
		mysql_real_escape_string( $senha ) );

$resultSet = mysql_query( $sql ) or die( mysql_error() );

[]'s

Criado 29 de dezembro de 2011
Ultima resposta 30 de dez. de 2011
Respostas 12
Participantes 6