Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

JoaoVM

[Resolvido] Problema com Update da Tabela

Mensagens Recomendadas

JoaoVM

Boas pessoal, estava aqui a fazer a minha query para fazer um update a uma tabela mas esta a dar-me um erro..já pesquisei sobre o erro que me dá mas não percebi o porque isto acontecer na minha tabela.

O erro que me dá é o seguinte:

Cannot add or update a child row: a foreign key constraint fails (`kpilinhas`, CONSTRAINT `flexibilidade_ibfk_11` FOREIGN KEY (`id_avaliacao`) REFERENCES `avaliacao` (`id_avaliacao`))

r9d3.png

Podem ver as minhas tabelas que dizem respeito a este problema:

psw.png

if (isset($_POST['alter_aval'])){
 $avaliacao = $_POST["alter_aval"];
}
if (isset($_POST["alterar_avaliacao"]))
{
   echo "passei aqui";
   mysql_query("UPDATE `flexibilidade` SET `id_avaliacao`='$avaliacao' WHERE num_colab='890327' and id_linha='126' and id_posto='2937';") or die(mysql_error());
}

echo "<form action='altera_avaliacao.php' name='alterar_avaliacao' id='alterar_avaliacao' method='POST'>";
//SELECIONAR AVALIAÇAO/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
echo '<select id="alter_aval">';

$sql_alter_aval="SELECT id_avaliacao, avaliacao, descricao FROM avaliacao order by id_avaliacao asc";
$final_alter_aval = mysql_query($sql_alter_aval);
echo "<option onclick='return false'>Selecione Avaliação</option>";
while($aval = mysql_fetch_array($final_alter_aval))
{
echo '<option value="'. $aval['id_avaliacao'].'" id="alt_aval" name="alt_aval">'. $aval['id_avaliacao'] . " - " . $aval['avaliacao'] . " - " .$aval['descricao'].'</option>';
}
echo '</select>';
echo "<input type='submit' id='alterar_avaliacao' name='alterar_avaliacao' value='Alterar'>";
echo "</form>";

Alguém me sabe ajudar?

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
taviroquai

O erro de sql deve-se a atribuires um valor invalido ao campo id_avaliacao (chave externa).

Por algum motivo o formulario nao passa os valores que esperas. Tens 2 elementos html com o mesmo id.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoVM

mesmo assim se alterar o id não funciona. já tinha tentado antes.. se inserir o valor na select e fizer um echo da variável ele devolve o valor do id_avaliacao. Porque é que o valor é invalido?quando executo apenas a consulta com os valores que quero ele funciona.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

O ideal era mesmo teres colocado o texto. Não faz qualquer sentido colocar mensagens de erro textuais como imagem.

Quanto ao problema, a sugestão que te posso dar é imprimires a query e para a executares directamente no MySQL. Deve-te ajudar a isolar o problema. Mas isso aparenta ser um valor inválido da variável avaliacao.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoVM

já o fiz..e quando executo a query no mysql ela funciona..e se fizer um echo da variável inserida ele devolve o valor correto, não sei o que se passa..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
taviroquai

Em vez de:

mysql_query("UPDATE `flexibilidade` SET `id_avaliacao`='$avaliacao' WHERE num_colab='890327' and id_linha='126' and id_posto='2937';") or die(mysql_error());

Coloca isto e diz o que aparece:

$sql = "UPDATE `flexibilidade` SET `id_avaliacao`='$avaliacao' WHERE num_colab='890327' and id_linha='126' and id_posto='2937';";
var_dump($sql);
mysql_query($sql) or die(mysql_error());

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoVM

Taviroquai, não acontece nada, ou melhor, não acontece nada de novo, na select insiro o valor..e com um echo ele mostra o valor da variável como acontecia antes..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
taviroquai

$sql = "UPDATE `flexibilidade` SET `id_avaliacao`='$avaliacao' WHERE num_colab='890327' and id_linha='126' and id_posto='2937';";
var_dump($sql);
mysql_query($sql) or die(mysql_error());

Mostra aqui query SQL.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoVM

Este é o meu código no PHP:

if (isset($_POST["alterar_avaliacao"]))
{

   echo "passei aqui";
   echo "<br>";
   echo "$avaliacao";
$sql = "UPDATE `flexibilidade` SET `id_avaliacao`='$avaliacao' WHERE num_colab='890327' and id_linha='126' and id_posto='2937';";
echo "var_dump($sql)";
mysql_query($sql) or die(mysql_error());
}

Este é o que coloco no mysql para testar, funciona na perfeição:

UPDATE `flexibilidade` SET `id_avaliacao`=14 WHERE num_colab='890327' and id_linha='126' and id_posto='2937';

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoVM

Como é obvio já experimentei dessa forma também..já experimentei de tantas formas que já me perdi...alias acabei de o fazer como disseste e não funcionou a mesma..tudo igual..

Editado por JoaoVM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoVM

Bem, já estava a ficar farto deste problema e comecei a fazer tudo de inicio e testar tudo ao pormenor.. cheguei aqui e funcionou.

Obrigado Rui Carlos e Taviroquai ;)

Fica a solução:

if (isset($_POST['avaliar'])){
$avaliacao = $_POST["avaliar"];
}
if (isset($_POST["altera_avaliacao"]))
{

echo "passei aqui";

$sql = "UPDATE `flexibilidade` SET `id_avaliacao`=$avaliacao WHERE num_colab=890327 and id_linha=126 and id_posto=2937;";
mysql_query($sql) or die(mysql_error());
}
echo "<form action='altera_avaliacao.php' id='alterar_avaliacao' name='alterar_avaliacao' method='POST'>";
echo "<select name='avaliar' id='avaliar'>";
$sql_alter_aval="SELECT id_avaliacao, avaliacao, descricao FROM avaliacao";
$final_alter_aval = mysql_query($sql_alter_aval);
echo"<option onclick='return false'>Selecione Avaliação</option>";
while($aval = mysql_fetch_assoc($final_alter_aval))
{
echo '<option value="'.$aval['id_avaliacao'].'">'.$aval['id_avaliacao'] . " - " . $aval['avaliacao'] . " - " .$aval['descricao'].'</option>';
}
echo "<input type='submit' id='altera_avaliacao' name='altera_avaliacao' value='Alterar'>";
echo "</form>";

Agora e só alterar as variáveis e funciona.

Editado por JoaoVM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.