Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pablo Costa

como realizar uma gravação num banco.

Recommended Posts

Olá amigos, boa noite.

Eu tentei seguir o exemplo do manual do php, sobre mysqli::multiple_query , mas não consegui. Por isso venho aqui pedir ajuda.

 

Criei uma página simples, para que o usuário cadastrasse uma senha para ter acesso a internet.

O primeiro modelo dela,funciona OK, tudo é gravado perfeitamente.

 

Hoje percebi a necessidade de, caso seja o primeiro acesso do usuário, ele terá de digitar o nome de usuário que deseja ter, juntamente com a senha.

 

Até aí tudo bem...mas como farei para gravar a senha dele também ?

 

Exemplo, é meu primeiro acesso, cadastro o usuário pablo , senha 12345678.

Tenho a tabela "users", na qual armazeno os usuários. Essa tabela tem duas colunas:

id(pk , ai) e login

 

Inserir o usuário pablo nela, não é a dificuldade...afinal é um insert simples. O ID será gerado automaticamente, e o nome será gravado no login.

 

Porém, tenho também a tabela "senhas", onde armazeno as senhas.

Essa tabela tem duas colunas:

id_usr (chave estrangeira, referencia a coluna ID da tabela "users").

senha(armazena a senha).

 

O que não entendo é: Como farei agora, para armazenar a senha dele também ? O método que tentei via mysqli::multiple_query não deu certo. E também, preciso ter uma "alternativa", para caso não seja o primeiro acesso dele, prosseguir com o cadastro normal.

 

Estou enviando meu código comentado aqui HTML e PHP. Quem puder ajudar eu agradeço.

 

Atenciosamente,

 

Pablo Costa.

 

Código PHP:

<?php
$senha = $_POST['senhanova'];
$id_usr = $_POST['nomeusuario'];
$nomeusuario = $_POST['nomeusuario_2'];
// connect to the "tests" database
	$conn = new mysqli('localhost', 'intrapharma', 'mceugg5', 'intrapharma');

// check connection
	if (mysqli_connect_errno()) {
	  exit('Erro na conexão com o banco de dados: '. mysqli_connect_error());
	}
if(($nomeusuario) != "") //Minha idéia: Se a variável nomeusuario_2(que é o nome de usuario digitado) for setada, é realizada uma multiple_query. Caso contrário, é realizado uma query comum.
	{
		$sql = "INSERT INTO users(login) VALUES($nomeusuario)";
		$last = $conn->insert_id; // Tentando pegar o último ID inserido. Também tentei fazer um insert com SELECT MAX no lugar de $last, não consegui.
					$sql .= "INSERT INTO senhas(id_usr,senha) VALUES($last,'$senha')";
		if($conn->multi_query($sql)) //Deveria rodar as queries ?
		{
			echo "Cadastro realizado com sucesso2";
		}
		else {
			// sql query for INSERT INTO users (seguindo o padrão)
	$sql="INSERT INTO senhas(id_usr,senha) VALUES($id_usr,'$senha')";

	// Performs the $sql query and get the auto ID
	if ($conn->query($sql) == TRUE) {
	  echo "Cadastro realizado com sucesso";	   
	}	else {
	 echo "Erro ao gravar no banco de dados";
	 echo "$conn->error";
	 echo $nomeusuario;

			}		
			}


	}


$conn->close();
?>

 

Código HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<style type="text/css">
* { font-family: Verdana; font-size: 96%; }
label { display: block; margin-top: 10px; }
label.error { float: none; color: red; margin: 0 .5em 0 0; vertical-align: top; font-size: 10px }
p { clear: both; }
.submit { margin-top: 1em; }
em { font-weight: bold; padding-right: 1em; vertical-align: top; }
</style>
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
<script type="text/javascript" src="js/jquery.validate.js"></script>
<link rel="stylesheet" type="text/css" href="css/formalize.css" />
<link rel="stylesheet" type="text/css" href="css/style.css" />

<script type="text/javascript">
$(document).ready( function() {



$('#digitausuario').hide();

  $('#1st_sim').click(function() {
	 $('#usuario_select').hide('fast');
	$('#digitausuario').show('slow');
    return false;
  });

  $('#1st_nao').click(function() {
	  $('#usuario_select').show('fast');
    $('#digitausuario').hide('fast');
    return false;
  });		



$("#form1").validate({

// Define as regras
rules:{
nomeusuario: {
required: function(){
	if($('#1st_sim').is(':checked'))
	{    			        	
       	required: false
	}    			        											  
		else
		{
		required: true;
		}		
					}
		},
nomeusuario_2: {
	required: function(){
	if($('#1st_sim').is(':checked')) {

       	required: true;
      		minlength: 5;	       	
										}    			        											  
		else
		{
		required: false;
		}		
							}
					},
	senhanova:{
	required: true, minlength: 6
	},
	senhanova_2:{
		required: true, equalTo: "#senhanova", minlength: 6
				}
},
// Define as mensagens de erro para cada regra
messages:{
	nomeusuario:{
	required: "Selecione o seu usuário"
				},
	nomeusuario_2:{
					required: "Digite o seu nome de usuário",
					minlength: "Mínimo de cinco caracteres"
				},
	senhanova:{
	required: "Digite a sua nova senha",
	minlength: "A sua nova senha deve conter no mínimo sete caracteres"
 				},
	senhanova_2:{
		required: "Repita a sua nova senha",
		equalTo: "Os campos de senha e confirmação estão diferentes."
				}
}
});
});
</script>
<meta http-equiv="Content-Type" content="text/html" charset="iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
Cadastro de usuários / senhas para internet - PHARMASCIENCE
<form id="form1" name="form1" method="post" action="cadastra.php">
Primeiro acesso ? <input type="radio" value="yes" name="primeiro_acesso" id="1st_sim" />Sim<input type="radio" value="no" name="primeiro_acesso" id="1st_nao" />Não
 <p>
<div class="secret" id="digitausuario">
<p>Digite o nome de usuário a ser utilizado</p>
<p><input type="text" name="nomeusuario_2" /></p>
<p><font color=red>
	 <label for="nomeusuario" class="error" style="display: none;">Digite o nome do usuário</label></font></p>
</div>	    
 <div id="usuario_select">
 Selecione o seu usuário:

 <p>
       <?php
/****Conexão***/
mysql_connect('localhost','intrapharma','mceugg5');
mysql_select_db('intrapharma');

//clausula sql
$sql = "SELECT * FROM `users`";

//executa a clausula sql
$result = mysql_query($sql)or die(mysql_error());

//imprimir um campo select
echo "<select name=\"nomeusuario\" id=\"nomeusuario\">";

//faz o loop para preencher o campo criado com os valores retornados na consulta

while($dados = mysql_fetch_array($result))
{
echo "<option value='".$dados['id']."'>".$dados['login']."</option>";
}

//fecha o campo select
echo "</select>";
?>
<font color=red>
	 <label for="nomeusuario" class="error" style="display: none;">Selecione o nome do usuário</label></font>
  </div>
 <p>Nova Senha:<br />
   <input name="senhanova" type="password" id="senhanova" size="20" maxlength="35" />
 </p>
 <p>Confirmar Nova senha:</p>
 <p>
   <input name="senhanova_2" type="password" id="senhanova_2" size="20" maxlength="35" />
 </p>
 <p><input type="submit" value="Cadastra senha" action="cadastra.php" /> </p>
</form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq isso esta sendo feito assim? o usuario só pode ter uma senha, e acredito que o historico nao seja importante.

É muito mais lógico colocar login e senha na mesma tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O sistema não será somente isso ; eu pretendo expandilo para outras coisas, e dentro dos meus planos, esse esquema de uma tabela com usuários e outra com senhas, foi o que melhor serviu ; essa é a questão.

 

Por exemplo, ainda vai ter senhas para vários sistemas, usuários associados ao nome completo...estou organizando desde o começo para não ter trabalheira depois :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.