Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso criar um formulário para alterar os dados de uma tabela. Já tenho o formulário que passa a id da tabela que quero alterar. Preciso criar o formulário que receberá os dados a serem alterados. Estou tentando como abaixo, mas o título da galeria não aparece no input.
<div class="container formulario">
<?php
$id = (int)$_GET['id'];
$selecionar_galerias = $pdo->prepare("SELECT * FROM `galerias` WHERE id = ?");
$selecionar_galerias->execute(array($id));
?>
<form name="photo" enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
<ol>
<li>
<label for="titulo">Título da Galeria</label>
<input type="text" name="titulo" id="titulo" class="input-xxlarge" value="<?php echo $selecionar_galerias->titulo;?>" />
</li>
<li>
<label for="foto">Capa da galeria</label>
<input type="file" name="image" size="30" required/>
<input type="hidden" name="acao" value="enviar"/>
</li>
</ol>
<button type="submit" class="btn btn-primary pull-right" value="enviar" name="enviar">
<span class="glyphicon glyphicon-thumbs-up"> Enviar</span>
</button>
</form>Duro é saber que eu já havia feito isso meses atrás, estava funcionando corretamente mas em um backup da Hostinger mal-feito perdi os arquivos.paulinhosupriano,
Fiz como indicado, mas continua sem mostrar o título no input. Usei um print_r no $dadosRecuperado e também nada foi mostrado.
Usando print_r no $id veio como 0. O problema está aqui. Estou passando a url parameter dessa forma:
<a href="./editar_galeria.php?galeria_id=<?php echo $galeria->id;?>">Editar</a></td>
Quando aproximo o cursor desse link, ele mostra na barra de status o número da galeria corretamente.
Resolvido paulinhosupriano, graças à sua ajuda. O correto seria assim: $id = (int)$_GET['galeria_id'];
Muito obrigado!
Graças a você, =D. achou o error =D.
O importante e está solucionado para assim, outros com a solução solucionar com a mesma solução já resolvida.
Ate a próxima dúvida.
=D
Sua ajuda foi ótima. Eu estava me esquecendo de usar a linha que você acrescentou: $dadosRecuperado = $selecionar_galerias->fetchObject(); Valeu, abraços.
Paulo,
Você tinha razão, novas dúvidas surgiram. Criei o arquivo para atualizar efetivamente os dados, porém estou com problemas. Estou tentando assim:
<?php
include_once('../conexao/conexao.php');
$titulo = $_POST['titulo'];
$id = $_POST['id'];
$atualizar = $pdo->prepare("UPDATE `galerias` SET titulo = ? WHERE id = $id");
$atualizar->bindValue(':titulo', $titulo, PDO::PARAM_STR);
if($atualizar->execute()){
echo '<script>location.href="visualizar_admin.php"</script>';
}
?>
Onde estou errando?
Nota: $atualizar = $pdo->prepare("UPDATE `galerias` SET titulo = ? WHERE id = $id");
você está usando o bindvalue e não o bindparam então
seria:
$atualizar = $pdo->prepare("UPDATE `galerias` SET titulo = :titulo WHERE id = $id");
Em segundo você está usando a variavel $pdo porem não vejo a criação da mesma.
E incluindo um arquivo include_once('../conexao/conexao.php'); com uma volta de um diretório.
Então primeiramente precisa verificar se está corretamente incluindo o arquivo e depois postar o código de conexão para sabermos como está sendo usado =D e ajudar-mos caso seja a maneira que está chamando.
Nota: Recomendo que retire os dados reais de host, user pass e banco.
Para verificar se o arquivo existe poderia fazer.
<?php
if( file_exists('../conexao/conexao.php') ):
include_once('../conexao/conexao.php');
else:
echo utf8_decode("Ops, o arquivo conexão não existe");
exit(0);
endif;
?><?php
if( file_exists('../conexao/conexao.php') ):
include_once('../conexao/conexao.php');
else:
echo utf8_decode("Ops, o arquivo conexão não existe");
exit(0);
endif;
$titulo = strip_tags( trim($_POST['titulo']) );
$id = (int)$_POST['id']; // Verifique se o mesmo vem via POST caso contrario seria (int)$_GET['id'];
if( !empty($titulo) AND !empty($id) ):
$sqlUpdate = "UPDATE `galerias` SET titulo = :titulo WHERE id = :id ";
$pdo = conectar(); /* Precisa saber se e mesmo assim que chama a função que retorna a instancia do PDO */
$atualizar = $pdo->prepare($sqlUpdate);
$atualizar->bindValue(':titulo', $titulo);
$atualizar->bindValue(':id', $id);
$atualizar->execute();
if( $atualizar->execute() ):
echo '<script>location.href="visualizar_admin.php"</script>';
endif; echo utf8_decode("Ops, não foi possível atualizar com dados vazios.");
exit(0);
endif;Paulo, mais uma vez me ajudou muito. Fiz como abaixo, fazendo algumas adaptações ao seu código e resolveu 100%:
<?php
include_once('../conexao/conexao.php');
$titulo = strip_tags( trim($_POST['titulo']) );
$id = (int)$_POST['id'];
if( !empty($titulo) AND !empty($id) ):
$atualizar = $pdo->prepare("UPDATE `galerias` SET titulo = :titulo WHERE id = :id ");
$atualizar->bindValue(':titulo', $titulo);
$atualizar->bindValue(':id', $id);
$atualizar->execute();echo '<script>location.href="visualizar_admin.php"</script>';
endif;echo utf8_decode("Ops, não foi possível atualizar com dados vazios.");
exit(0);
endif;
?>
O arquivo de conexão eu sabia que estava ok pois o site está no ar faz muito tempo e funcionava perfeitamente.
Inclusive como disse no primeiro post eu havia feito os arquivos de edição mas devido a um problema de backup na Hostinger, os arquivos sumiram e deletei do meu computador diversos backups anteriores, confiando que os atuais estavam ok.
O arquivo de conexão é esse:
<?php
try{
$pdo = new PDO('mysql:host=ypslon;dbname=xuxa','usuario','senha');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}echo $e->getMessage();
exit('Erro ao conectar com o banco de dados!');
}?>
Essa linha ($atualizar->bindValue(':id', $id) eu posso retirar pois não preciso atualizar o id, correto?
O site é esse, para quem tiver curiosidade: http://www.cyber-foto.com/
Obrigado mais uma vez.
o id vem dia $_GET ou VIa $_POST, com o update e delete e sempre necessário usar uma condição WHERE caso não coloque vai atualizar tudo de uma determinada tabela.
Ex: UPDATE galeria set titulo = 'joao paulo'
sem o WHERE campoUnico = ValorQueroAtualizar
imaginemos que temos 1000 dados, todos os dados dessa tabela galeria vai está com o campo titulo chamado joao paulo...
Agora vamos fazer
ex2: UPDATE galeria set titulo = 'joao paulo' WHERE id = 3
então apenas o registro 3 dessa tabela vai receber esse titulo e não os 999 dados retirando o 3 para atualização.
Com certeza. A cláusula where é fundamental, mas minha dúvida foi nesse ponto do código em negrito:
$atualizar = $pdo->prepare("UPDATE `galerias` SET titulo = :titulo WHERE id = :id ");
$atualizar->bindValue(':titulo', $titulo);
$atualizar->bindValue(':id', $id);
Eu havia entendido que depois de passar via sql o campo relacionado ao id 100, por exemplo, nas linhas abaixo eu colocaria apenas o campo que realmente quero atualizar, ou seja "titulo". Eu não precisaria atualizar o id 100. Portanto, pensei que poderia retirar a linha $atualizar->bindValue(':id', $id);
Mas testei e vi que não posso retirá-la.
Pode sim e só passar direto, porem, por questão de segurança recomendo a utilização de como mandei.