Ir para conteúdo

POWERED BY:

Arquivado

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

Oskitz

[Resolvido] Actualizar campos em Bases de dados

Recommended Posts

Boa tarde Pessoal

 

É assim eu tenho um codigo para actualizar textos em bases de dados..

No form, existe uma lista que mostra todos os campos do "link" de uma tabela e depois em baixo tenho para alterar o Link, o Titulo, a Categoria e a Descrição.

 

O que acontece é que eu selecciono o link na lista em que quero fazer as alterações e consigo fazer a alteração a todos os campos, menos ao campo Link.

 

O codigo é este:

 

Ficheiro actualizar1.php

<HTML>
<HEAD>
<TITLE>Actualizar1.php</TITLE>
</HEAD>
<BODY>
<div align="center">
<h1>Actualizar um registo</h1><br>
<?
//Conexão à base
mysql_connect("localhost","******","******");
echo '<FORM METHOD="POST" ACTION="actualizar2.php">Link<br>';
//Criamos a sentença SQL e executamo-la
$sSQL="Select Link From link Order By Link";
$result=mysql_db_query("teste",$sSQL);
echo '<select name="Link">';
//Geramos o menu dinâmico
while ($row=mysql_fetch_array($result))
{
   echo '<option>'.$row["Link"];
}
?>
</select><br>Link<br><INPUT TYPE="TEXT" NAME="telefone">
<br>Titulo<br><INPUT TYPE="TEXT" NAME="Titulo">
<br>Categoria<br><INPUT TYPE="TEXT" NAME="Categoria">
<br>Descricao<br><INPUT TYPE="TEXT" NAME="Descricao">
<br>
<INPUT TYPE="SUBMIT" value="Actualizar!">
</FORM>
</div>
</BODY>
</HTML>

 

Ficheiro actualizar2.php

<HTML>
<HEAD>
<TITLE>Actualizar2.php</TITLE>
</HEAD>
<BODY>
<?

$Link = $_POST["Link"];
$Titulo = $_POST["Titulo"];
$Categoria = $_POST["Categoria"];
$Descricao = $_POST["Descricao"];

//Conexão com a base
mysql_connect("localhost","******","******");
//Criamos a sentença SQL e executamo-la
$sSQL="Update link Set Link='$Link',Titulo='$Titulo',Categoria='$Categoria',Descricao='$Descricao' Where Link='$Link'";
mysql_db_query("teste",$sSQL);
?>
<h1>
<div align="center">Registro Actualizado</div>
</h1><div align="center">
<a href="leitura.php">Visualizar o conteúdo da base</a></div>
</BODY>
</HTML>

Espero que me consigam ajudar pessoal

cumps http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

</select><br>Link<br><INPUT TYPE="TEXT" NAME="telefone">

Olhe pro nome do campo que supostamente seria o link... esta como "telefone"...

 

No PHP você tá pegando o $_POST["Link"], mas isso não existe no seu código... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas estranhamente, retirando o "telefone" ( que não está la a fazer nada) e acrescentando "Link"(que é como está certo), não consigo modificar nenhum dos campos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troca isso:

 

$sSQL="Update link Set Link='$Link',Titulo='$Titulo',Categoria='$Categoria',Descricao='$Descricao' Where Link='$Link'";
mysql_db_query("teste",$sSQL);

Por isso:

 

$sSQL = "UPDATE `link` SET Link = '{$Link}', Titulo = '{$Titulo}', Categoria = '{$Categoria}', Descricao = '{$Descricao}' WHERE Link = '{$Link}'";

mysql_query($sSQL);

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está na formatação do option.

echo '<select name="Link">';
//Geramos o menu dinâmico
while ($row=mysql_fetch_array($result))
{
   echo '<option>'.$row["Link"];// aqui.
}
?>

Teria que ficar mais ou menos assim

echo '<select name="Link">';
//Geramos o menu dinâmico
while ($row=mysql_fetch_array($result))
{
   echo '<option value="'.$row['Link'].'">'.$row["Link"].'</option>';
}
?>

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nenhuma das 2 opções resultou :mellow:

 

O campo Link continua a não ser modificado.. Ninguem tem mais soluções?

 

Eu na base de dados, tenho o ID_Link como chave primária e auto_increment.. Isso não poderá ter nada a ver? Nao tenho que fazer nada no campo Link?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim... No actualizar2.php, você inclui este código para efeitos de debug antes de tudo.

echo '<pre>';
print_r($_POST);

Vai exibir tudo que veio do formulário. Confira se os nomes estão corretos e se as informações que deveriam ser gravadas estão corretas também.

 

Se mesmo assim não achar o erro, faz assim:

 

$sSQL="Update link Set Link='$Link',Titulo='$Titulo',Categoria='$Categoria',Descricao='$Descricao' Where Link='$Link'";
echo $sSQL;
mysql_db_query("teste",$sSQL) or die(mysql_error());

Veja o que ocorre.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O resultado que deu foi o seguinte:

Array

(

[Link] => www.teste.ph

[link] => www.teste.com

[Titulo] => teste1

[Categoria] => teste2

[Descricao] => teste3

)

 

Ou seja, o "www.teste.ph" foi o que eu escolhi na lista, depois modifiquei o link para www.teste.com e o restante está certo.. Só que na base de dados, so fica guardado o Titulo, a Categoria e a Descrição http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

 

Tento adicionar o codigo que me deste?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficheiro actualizar1.php

 

<HTML>
<HEAD>
<TITLE>Actualizar1.php</TITLE>
</HEAD>
<BODY>
<div align="center">
<h1>Actualizar um registo</h1><br>
<?
//Conexão à base
mysql_connect("localhost","******","******");
echo '<FORM METHOD="POST" ACTION="actualizar2.php">Link<br>';

//Criamos a sentença SQL e executamo-la
$sSQL="Select Link From link Order By Link";
$result=mysql_db_query("teste",$sSQL);

echo '<select name="Link">';
//Geramos o menu dinâmico
while ($row=mysql_fetch_array($result))
{
   echo '<option>'.$row["Link"];
	  
	
   }
?>
</select>
<br>Link<br><INPUT TYPE="TEXT" NAME="link">
<br>Titulo<br><INPUT TYPE="TEXT" NAME="Titulo">
<br>Categoria<br><INPUT TYPE="TEXT" NAME="Categoria">
<br>Descricao<br><INPUT TYPE="TEXT" NAME="Descricao">
<br>
<INPUT TYPE="SUBMIT" value="Actualizar!">
</FORM>
</div>
</BODY>
</HTML>

Ficheiro actualizar2.php

 

<HTML>
<HEAD>
<TITLE>Actualizar2.php</TITLE>
</HEAD>
<BODY>
<?
//echo '<pre>';
//print_r($_POST);

$Link = $_POST["Link"];
$Titulo = $_POST["Titulo"];
$Categoria = $_POST["Categoria"];
$Descricao = $_POST["Descricao"];

//Conexão com a base
mysql_connect("localhost","******","******");
//Criamos a sentença SQL e executamo-la
$sSQL="Update link Set Link='$Link',Titulo='$Titulo',Categoria='$Categoria',Descricao='$Descricao' Where Link='$Link'";
mysql_db_query("teste",$sSQL);
?>
<h1>
<div align="center">Registro Actualizado</div>
</h1><div align="center">
<a href="leitura.php">Visualizar o conteúdo da base</a></div>
</BODY>
</HTML>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois.. E não tens mais nenhuma ideia do que possa ter que alterar para funcionar? É que consigo modificar todos os campos menos o campo link.. O problema tambem não será por a tabela chamar-se link e haver um campo Link?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além do problema que eu e o André já falamos, creio que existe um outro problema.

 

Veja que no seu UPDATE você usa como cláusula o campo link. Na minha visão o correto seria usar o ID na tabela. Mas assim como está vai funcionar...

 

Veja que você tem 2 links (ou pelo menos deveria ter)

 

(

[Link] => www.teste.ph

[link] => www.teste.com

[Titulo] => teste1

[Categoria] => teste2

[Descricao] => teste3

)

 

Qual deles é a cláusula?

 

Para resolver, sugiro fazer assim

$sSQL="Select id, Link From link Order By Link";// onde id é a chave primária auto-increment da sua tabela. Troque o nome para a forma correta.

echo '<select name="id">';
//Geramos o menu dinâmico
while ($row=mysql_fetch_array($result))
{
   echo '<option value="'.$row['id'].'">'.$row["Link"].'</option>';
}
?>

Na outra página você coloca assim

 

$id = $_POST['id']
$Link = $_POST["link"];
$Titulo = $_POST["Titulo"];
$Categoria = $_POST["Categoria"];
$Descricao = $_POST["Descricao"];

//Conexão com a base
mysql_connect("localhost","******","******");
//Criamos a sentença SQL e executamo-la
$sSQL="Update link Set Link='$Link',Titulo='$Titulo',Categoria='$Categoria',Descricao='$Descricao' Where id='$id'";

Não esqueça de verificar o nome do campo auto-increment. Coloquei como id. Troque para o seu.

 

Qualquer coisa, posta novamente.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa maneira não funciona, porque no forn, na lista onde deveria aparecer os links que tenho na base de dados, não aparece nada..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque isto e veja o que retorna.

<HTML>
<HEAD>
<TITLE>Actualizar1.php</TITLE>
</HEAD>
<BODY>
<div align="center">
<h1>Actualizar um registo</h1><br>
<?
//Conexão à base
mysql_connect("localhost","******","******");
echo '<FORM METHOD="POST" ACTION="actualizar2.php">Link<br>';

//Criamos a sentença SQL e executamo-la
$sSQL="Select id, Link From link Order By Link";// onde id é a chave primária auto-increment da sua tabela. Troque o nome para a forma correta.
$result=mysql_db_query("teste",$sSQL) or die(mysql_error());

echo '<select name="Link">';
//Geramos o menu dinâmico
while ($row=mysql_fetch_array($result))
{
	  echo '<option value="'.$row['id'].'">'.$row["Link"].'</option>';
	  
	
   }
?>
</select>
<br>Link<br><INPUT TYPE="TEXT" NAME="link">
<br>Titulo<br><INPUT TYPE="TEXT" NAME="Titulo">
<br>Categoria<br><INPUT TYPE="TEXT" NAME="Categoria">
<br>Descricao<br><INPUT TYPE="TEXT" NAME="Descricao">
<br>
<INPUT TYPE="SUBMIT" value="Actualizar!">
</FORM>
</div>
</BODY>
</HTML>

Veja se agora aparece.

 

Carlos Eduardo

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.