Jump to content

Problema com UPDATE devido ao PHP


Fil__
 Share

Recommended Posts

Bom dia pessoal. Nao sei bem se a minha questao tem a ver com PHP ou MySQL mas enfim, penso que seja php  😛

Bem, tenho o codigo abaixo que funciona perfeitamente, a mensagem de sucesso aparece so que na BD as alterações não são gravadas e nao entendo porque. Podem ajudar? O que estarei a fazer mal?

verartigo.php

<html>
<head>
<script type="text/javascript" src="../editor/jscripts/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript" src="../editor/jscripts/tiny_mce/tiny_mce_definitions.js"></script>
</head>
<body>
<?php
require_once('../includes/BDconector.php');
$conector = new BDconector();
$result = $conector->query('SELECT titulo,artigo FROM noticias WHERE ID = '.$_GET['id']);
$row = $conector->fetchArray($result);
?>
<form method="post" action="editar.php">
<p><input name="titulo" type="text" id="titulo" size="50" value="<?php echo $row['titulo']?>"></p>
<input type="hidden" name="ID" id="ID" value="<?php echo $row['ID']?>"> 
<textarea name="artigo" id="artigo" style="width:100%"><?php echo $row['artigo'];?></textarea>
<p class="submit"><input type="submit" name="Submit" value="GRAVAR"></p></form> 
</body>
</html>

editar.php

<?php
require_once('../includes/BDconector.php');
if ($_POST){
$conector = new BDconector();

$id=$_POST['ID'];
$titulo=$_POST['titulo'];
$artigo=$_POST['artigo'];

$insertQuery = ("UPDATE noticias SET titulo='".$_POST['titulo']."', artigo='".$_POST['artigo']."' WHERE ID='".$_POST['ID']."'");
if ($resultado = $conector->query($insertQuery)){
echo '<center><b>Artigo Actualizado</b></center><br>';
echo $titulo;
echo '<br>';
echo $artigo;
}
else
{
exit('<center>Erro, houve algum problema no processo</center>');
}
}
?>
Link to comment
Share on other sites

Sorry, mas esse código até me fez falhar umas batidas. Código de apresentação misturado com queries SQL, bugs tremendos de segurança... Já pensaste em usar uma framework como o CakePHP ou assim?

Bem, sobre o código em si:

Que ficheiro é esse, o BDconector.php? Não é preciso definir parâmetros de ligação à BD, como username e password?

Tens a certeza que a notícia que estás a actualizar já existe na BD?

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

Fez-te bater mal porque?

O BDconector é para ligar-se ao ficheiro onde estao definidas a base de dados, password, etc...

Este codigo funciona a inserir dados, a actualizar é que tá quieto...

Nao é seguro porque?

Link to comment
Share on other sites

Tu usas $_POST sem verificação. E se alguém inserir na caixa:

'; DROP TABLE noticias

Vai apagar-te a tabela toda. Não se pode confiar no input do cliente.

Na biblioteca de MySQL para PHP há funções como a mysql_real_escape_string(); que permite assegurar que a string é segura antes de a query ser executada.

Mais info em http://www.php.net/manual/en/security.database.sql-injection.php

Quanto ao problema específico, já experimentaste fazer um echo ao texto final da query e tentar corrê-lo manualmente? Será que o utilizador tem permissões para fazer UPDATEs?

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

$id= mysql_escape_string($_POST['ID']);

Algo assim ja funciona fixolas em ttermos de securitad?

Quanto ao echo sim, esta a bombar. Assumo que se funciona po insert tambem devia dar pAra o update.

Que cena marada esta  :wallbash:

Link to comment
Share on other sites

Esse

if ($resultado = $conector->query($insertQuery)){

no ficheiro editar.php vai dar sempre true, porque estás a testar a atribuição de um valor qualquer a uma variável, e isso acontece sempre (teoricamente). Experimenta uma das duas maneiras, são equivalentes:

if ($resultado = $conector->query($insertQuery)) {

$resultado = $conector->query($insertQuery);
if ($resultado) {

No entanto, depende de como essa função query está implementada. Que resultado ela devolve?

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

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
 Share

×
×
  • 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.