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
, CONSTRAINTpessoa_ibfk_2
FOREIGN KEY (id_tp_pessoa
) REFERENCEStp_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;