Jump to content

PDO - Forms com inserção de dados em mais do que uma tabela


Recommended Posts

Posted

Boa noite.

Estou a elaborar um projecto em que tenho uma parte de registo de utilizadores num pagina qeb e estou a utilizar o PDO para faze-lo, o meu problema é que tenho 3 tabelas onde preciso de inserir os dados.

Uma tabela é a tabela utilizador (utilizadorId - PK, nome, morada,localidade,codigoPostal, nomeUtilizador, password, nivelAcesso), a segunda tabela é a utilizadorContacto(UtilizadorId-PK, ContactoID - PK) e a terceira é a Contacto(ContactoId - PK, valor, tipo).

o Código do forms é o seguinte:

 <form name="regista_utilizador" method="post" action="index.php?pg=registo_ok" enctype="multipart/form-data">
      <fieldset>
       <table align="left" cellspacing="0" cellpadding="0" >
          <tr>
            <td colspan="150" >
             <label>
               <span>Nome</span>
               <input type="text" name="nome" class="nome"/>
             </label>
            </td>
          </tr>
          <tr>
            <td colspan="150">
              <label>
                <span>Morada</span>
                <input type="text" name="morada" class="morada"/>
              </label>
           </td>
         </tr>
         <tr >
          <td colspan="75">
            <label>
               <span>Localidade</span>
               <input type="text" name="localidade" class="localidade"/>
            </label>
         </td>
          <td  colspan="75">
            <label>
              <span>Código Postal</span>
              <input type="text" name="cp" class="cp"/>
            </label>
         </td>
         </tr>
         <tr>
           <td colspan="75"> 
             <label>
               <span>Telefone</span>
               <input type="text" name="telefone" class="telefone"/>
            </label>
         </td>
          <td colspan="75">
            <label>
               <span>Telemóvel</span>
               <input type="text" name="telemovel" class="telemovel"/>
            </label>
        </td>
        </tr>
        <tr>
           <td colspan="75">
             <label>
               <span>E-mail</span>
               <input type="text" name="email" class="email"/>
             </label>
          </td>
          <td colspan="75"> 
            <label>
               <span>Contribuinte</span>
               <input type="text" name="nif" class="nif"/>
            </label>
      </td>
       </tr>
       <tr>
         <td colspan="75"> 
           <label>
               <span>Nome Utilizador</span>
               <input type="text" name="nome_utilizador" class="utilizador"/>
           </label>
        </td>
         <td colspan="75"> 
           <label>
             <span>Palavra Passe</span>
             <input type="text" name="password" class="password"/>
           </label>
         </td>
      </tr>
       </table>
       <input type="submit" name="regista_utilizar" value="Registar" class="btn" />
        <input type="submit" name="regista_utilizar" value="Cancelar" class="btn" />
       
  
  
      </fieldset>
      </form>

O Código que tenho para inseir os dados na bd é o seguinte:

  <?php 
$clienteNivelAcesso  ='cliente';
$clienteNome         = strip_tags(trim($_POST['nome']));
$clienteMorada       = strip_tags(trim($_POST['morada']));
$clienteLocalidade   = strip_tags(trim($_POST['localidade']));
$clienteCp           = strip_tags(trim($_POST['cp']));
$clienteTelefone     = strip_tags(trim($_POST['telefone']));
$clienteCTelefone    ='telefone';
$clienteTelemovel    = strip_tags(trim($_POST['telemovel']));
$clienteCTelemovel   ='telemovel';
$clienteEmail        = strip_tags(trim($_POST['email']));
    $clienteCEmail       ='Email';
$clienteNif          = strip_tags(trim($_POST['nif']));
$clienteUtilizador   = strip_tags(trim($_POST['nome_utilizador']));
$clientePassword     = strip_tags(trim($_POST['password']));

$sql_registaCliente = 'INSERT INTO utilizador(nomeUtilizador,nome, morada,localidade, codigoPostal,nif,               password,nivelAcesso)';
$sql_registaCliente .='VALUES(:nomeUtilizador,:nome, :morada,:localidade,:codigoPostal,:nif, :password,:nivelAcesso)';

$sql_registaContacto ='INSERT INTO Contacto(valor;tipo)';
$sql_registaContacto .='VALUES(:valor,:tipo)';



try{
	$query_registaCliente = $conecta ->prepare($sql_registaCliente);
	$query_registaCliente -> bindValue(':nomeUtilizador',$clienteUtilizador,PDO::PARAM_STR);
	$query_registaCliente -> bindValue(':nome',$clienteNome,PDO::PARAM_STR);
	$query_registaCliente -> bindValue(':morada',$clienteMorada,PDO::PARAM_STR);
	$query_registaCliente -> bindValue(':localidade',$clienteLocalidade,PDO::PARAM_STR);
	$query_registaCliente -> bindValue(':codigoPostal',$clienteCp,PDO::PARAM_STR);
	$query_registaCliente -> bindValue(':nif',$clienteNif,PDO::PARAM_STR);
	$query_registaCliente -> bindValue(':password',$clientePassword,PDO::PARAM_STR);
	$query_registaCliente -> bindValue(':nivelAcesso',$clienteNivelAcesso,PDO::PARAM_STR);
	$query_registaCliente -> execute();

	$utilizadorId = $conecta -> lastInsertId();
	$sql_registaContacto = $conecta->prepare($sql_registaContacto);
	$sql_registaContacto -> bindValue(':valor',$clienteTelefone,PDO::PARAM_STR);
	$sql_registaContacto -> bindValue(':tipo',$clienteCTelefone,PDO::PARAM_STR);
	$sql_registaContacto -> execute();

A partir daqui já nao sei como fazer, so estou a inserir o telefone, ainda me faltam os valores para o telemovel, email e inseir os id's na tabela utilizadorContactos. Alguem me pode dar uma dica?

  • 3 weeks later...
Posted

Ja consegui contornar reduzir para duas tabelas onde devo de inserir os dados, mas agr aparece-me um erro . O código que tenho é o seguinte

<?php
include"Connections/config.php";

$clienteNivelAcesso  ='cliente';
$clienteNome		 = strip_tags(trim($_POST['nome']));
$clienteMorada	   = strip_tags(trim($_POST['morada']));
$clienteLocalidade   = strip_tags(trim($_POST['localidade']));
$clienteCp		   = strip_tags(trim($_POST['cp']));
$clienteTelefone	 = strip_tags(trim($_POST['telefone']));
$clienteTelemovel    = strip_tags(trim($_POST['telemovel']));
   $clienteEmail	    = strip_tags(trim($_POST['email']));
   $clienteNif		  = strip_tags(trim($_POST['nif']));
$clienteUtilizador   = strip_tags(trim($_POST['nome_utilizador']));
$clientePassword	 = strip_tags(trim(md5($_POST['password'])));
$clientePassword_Email	 = strip_tags(trim($_POST['password']));

$sql_registaCliente  = 'INSERT INTO utilizador(nomeUtilizador,nome, morada,localidade, codigoPostal,nif,										  password,nivelAcesso)';
$sql_registaCliente .='VALUES(:nomeUtilizador,:nome, :morada,:localidade,:codigoPostal,:nif, :password,:nivelAcesso)';

$sql_registaContacto ='INSERT INTO contacto(telefone,telemovel,email, Utilizador_utilizadorId)';
$sql_registaContacto .='VALUES(:telefone,:telemovel,:email,: Utilizador_utilizadorId)';

try{

 $query_registaCliente = $conecta ->prepare($sql_registaCliente);
 $query_registaCliente -> bindValue(':nomeUtilizador',$clienteUtilizador,PDO::PARAM_STR);
 $query_registaCliente -> bindValue(':nome',$clienteNome,PDO::PARAM_STR);
 $query_registaCliente -> bindValue(':morada',$clienteMorada,PDO::PARAM_STR);
 $query_registaCliente -> bindValue(':localidade',$clienteLocalidade,PDO::PARAM_STR);
 $query_registaCliente -> bindValue(':codigoPostal',$clienteCp,PDO::PARAM_STR);
 $query_registaCliente -> bindValue(':nif',$clienteNif,PDO::PARAM_STR);
 $query_registaCliente -> bindValue(':password',$clientePassword,PDO::PARAM_STR);
 $query_registaCliente -> bindValue(':nivelAcesso',$clienteNivelAcesso,PDO::PARAM_STR);
 $query_registaCliente ->execute('braguilectra');

 $utilizadorId = $conecta -> lastInsertId();
 $query_registaContacto = $conecta->prepare($sql_registaContacto);
 $query_registaContacto -> bindValue(':telefone',$clienteTelefone,PDO::PARAM_STR);
 $query_registaContacto -> bindValue(':telemovel',$clienteTelemovel,PDO::PARAM_STR);
 $query_registaContacto -> bindValue(':email',$clienteEmail,PDO::PARAM_STR);
 $query_registaContacto -> bindValue(':Utilizador_utilizadorId',$utilizadorId,PDO::PARAM_STR);

 $query_registaContacto -> execute();
echo'<h2>Registo efectuado com sucesso!</h2>';
 echo' <p>O seu registo foi efectuado com sucesso! Para aceder ao seu painel <a href="admin/index.php"> CLIQUE AQUI.</a><br/>
  Ou aceda ao seu painel através da area de Login</p><br/>';
  echo'<p>Por motivos de segurança enviamos uma copia do seu registo para o email <strong>'.$clienteEmail.'</strong></p>';
 }
 catch(PDOException $error_registo){
 echo/*<h2>Erro ao registar, por favor tente novamente ou informe-nos pelo email contacto@braguilectra.pt</h2>*/$error_registo;
 }

quando tento fazer o registo atraves dos formas aparece-me o seguinte erro:

exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in C:\wamp\www\Braguilectra\nav\registo_ok.php:59 Stack trace: #0 C:\wamp\www\Braguilectra\nav\registo_ok.php(59): PDOStatement->execute() #1 C:\wamp\www\Braguilectra\index.php(16): include('C:\wamp\www\Bra...') #2 {main}

Nao entendo, a conexão foi feita no arquivo config.php. e está indicada no inicio da declaração php.alguem me pode ajudar?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.