Update with foreingkey key

0

I'm having trouble editing a foreign key key. The code receives the id , but I can not pass the id from the foreign key to the value using inner join . I got this message:

  

Can not add or update a child row: a foreign key constraint fails ( impacto , pessoa , CONSTRAINT pessoa_ibfk_2 FOREIGN KEY ( id_tp_pessoa ) REFERENCES tp_pessoa \ AppServ \ www \ impact \ user \ Person \ action_person.php: 263 Stack trace: # 0 C: \ AppServ \ www \ impact \ user \ Person \ action_person.php (263): PDOStatement-> execute () # 1 {main} thrown in C: \ AppServ \ www \ impact \ user \ Person \ action_pessoa.p

// pagina edicao
<?php
require 'conexao.php';

// Recebe o id do cliente do cliente via GET
$id_cliente = (isset($_GET['id_pessoa'])) ? $_GET['id_pessoa'] : '';

// Valida se existe um id e se ele é numérico
if (!empty($id_cliente) && is_numeric($id_cliente)):

    // Captura os dados do cliente solicitado
    $conexao = conexao::getInstance();
    $sql = 'SELECT id_pessoa , ds_nome , ds_departamento FROM pessoa 
    as a inner join  departamento as b on a.id_departamento=b.id_departamento

    WHERE id_pessoa = :id_pessoa';
    $stm = $conexao->prepare($sql);
    $stm->bindValue(':id_pessoa', $id_cliente);
    $stm->execute();
    $cliente = $stm->fetch(PDO::FETCH_OBJ);


endif;

?>  
<form action="action.php" method="post" id='form-contato' enctype='multipart/form-data'>
  <!-- area de campos do form -->


    <div class="form-group col-md-5">
      <label for="name">Nome </label>
      <input type="text" class="form-control" value="<?=$cliente->ds_nome?>" name="ds_nome">
    </div>


          <div class="col-xs-2">
                 <label for="ex1"> Departamento</label>



                <?php
try{
     $conexao = new PDO('mysql:host=localhost;dbname=impacto', 'root', 'cons2000');
     $conexao ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }catch(PDOException $e){
            echo 'ERROR: ' . $e->getMessage();
        }
 ?>
<select name="id_departamento"  class="form-control">

// o problema é que nao consigo passar o id_departamento para  dentro do value
<option  value="<?=$cliente->id_departamento?>"><?=$cliente->ds_departamento?> </option>

<?php
     $sql_admins = $conexao->prepare("SELECT * FROM departamento where id_departamento=id_departamento order by id_departamento ");
     $sql_admins->execute();

     while($admins = $sql_admins->fetch(PDO::FETCH_ASSOC)){


    echo '<option value="'.$admins['id_departamento'].'">'.$admins['ds_departamento'].'</option>';
      }
   ?>
     </select>

                    </div>



                    <input type="hidden" name="acao" value="editar">
                    <input type="hidden" name="id_pessoa" value="<?=$cliente->id_pessoa?>">

                    <button type="submit" class="btn btn-primary" id='botao'> 
                      Alterar
                    </button>
                    <a href='listar_pessoa.php' class="btn btn-danger">Cancelar</a>
                </form>
            <?php endif; ?> 


////pagina action.php
<?
if ($acao == 'editar'):



            $sql = 'UPDATE pessoa SET ds_nome=:ds_nome id_departamento=:id_departamento
             ';
            $sql .= 'WHERE id_pessoa = :id_pessoa';

            $stm = $conexao->prepare($sql);
            $stm->bindValue(':ds_nome', $ds_nome);  
            $stm->bindValue(':id_departamento', $id_departamento);
            $stm->bindValue(':id_pessoa', $id_pessoa);
            $retorno = $stm->execute();

            if ($retorno):
                echo "<div class='alert alert-info' role='alert'>Registro editado com sucesso, aguarde você está sendo redirecionado ...</div> ";
            else:
                echo "<div class='alert alert-danger' role='alert'>Erro ao editar registro!</div> ";
            endif;

            echo "<meta http-equiv=refresh content='3;URL=listar_pessoa.php'>";
        endif;
    
asked by anonymous 11.09.2017 / 18:19

1 answer

0

You are not selected the department id in the query with Join so the value comes in blank, right?

$conexao = conexao::getInstance();
  $sql = 'SELECT 
  id_pessoa, 
  ds_nome, 
  ds_departamento,
  b.id_departamento
  FROM pessoa as a 
  inner join  departamento as b on (a.id_departamento=b.id_departamento)
  WHERE id_pessoa = :id_pessoa';
  $stm = $conexao->prepare($sql);
  $stm->bindValue(':id_pessoa', $id_cliente);
  $stm->execute();
  $cliente = $stm->fetch(PDO::FETCH_OBJ);'

After the line $cliente = $stm->fetch(PDO::FETCH_OBJ); of a var_dump($cliente); die(); and verifies that all the data you want to get is in the Obj $ client

    
15.09.2017 / 04:42