Ir para conteúdo

Arquivado

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

drx

UPDATE PDO - Não Atualiza

Recommended Posts

Olá pessoal !

Estou tentando atualizar o campo "video-1", porém sem sucesso. O que estou fazendo de errado ?

Desde já agradeço a atenção.

<?php
include("autenticar.php");
include("conexao.php");
$pdo=conectar();




try {


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


      $vid = $_POST["videos"]; // valor vem do select option
      $controle = $_POST["controle2"]; // valor vem do select option
      $cv = $vid.'-'.$controle;


      //Realizando a atualização no campo video-1.
      $atualizar=$pdo->prepare('UPDATE w_aconteceu SET  video-1= cv  WHERE controle=:controle2');
      $atualizar->execute();




$atualizar->closeCursor();
// Se os dados forem atualizados com sucesso...
if ($atualizar){
 echo '<script type="text/javascript">alert("Operação realizada com sucesso!")</script>';
         }
 header("refresh:0 ;painel.php");
     }
// Se houver mensagens de erro, exibe-as
if (count($error) != 0) {
foreach ($error as $erro) {
echo $erro . "";
}
}
} catch (Exception $e) {
  echo 'Error: '. $e->getMessage();   
}
 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa variável não existe:

$smts

Logo, nunca resultará em sucesso.


Outro detalhe, é que não há placeholder para video e nem atribuição de valores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa variável já corriji, porém os outros dados retornam os valores necessários

 

$vid = $_POST["videos"]; // <-------------valor vem do select option do html;
$controle = $_POST["controle2"]; //<-------------- valor vem do select option do html;
$cv = $vid.'-'.$controle; // <-------------variável criada por concatenação;

 

O Placeholder a que você se refere: "videos" o seu valor vem do select option.

 

$atualizar=$pdo->prepare('UPDATE w_aconteceu SET video-1= cv WHERE controle=:controle2');

 

O php não consegue visualizar "cv" ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O php não consegue visualizar "cv"?

Não, não consegue. O valor deve ser atribuido.

 

Para isso pode usar bindParam, bindValue ou o próprio método execute.

 

cv, naquele quesito não é uma variável e menos um placheholder. Existem os tipos named e positional. Positional também é conhecido como marked.

 

:controle2 é um named placeholder.

 

Veja os exemplos nos links abaixo:

http://php.net/manual/pt_BR/pdo.prepare.php#refsect1-pdo.prepare-examples

http://www.phpeveryday.com/articles/PDO-Positional-and-Named-Placeholders-P551.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito esquisito, pois tentei da forma estática:

 

$atualizar=$pdo->prepare('UPDATE w_aconteceu SET video-1= 'teste' WHERE controle=1');

 

E...nem assim gravou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso, post #5

 

use query() link: http://php.net/manual/pt_BR/pdo.query.php

 

Uma pergunta, você tem lidos os links passados do manual?

 

ou está ignorando e indo na boa, ou seja, na tentativa e erro.

 

Pois ainda comete o mesmo erro do outro post

 

http://forum.imasters.com.br/topic/537099-filtrar-dados-com-pdo/?p=2144920

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim meu amigo, eu tenho lido, e estudado muito os links que tendes me passado. Tem sido de grande valia.

Não estou indo na boa.

Tenho de aprender ou aprender, na marra ou raça. Web daquí prá frente terá de ser a minha praia. Não tem outro jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
include("autenticar.php");
include("conexao.php");
$pdo=conectar();




try {


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


      $vid = $_POST["videos"]; // valor vem do select option
      $controle = $_POST["controle2"]; // valor vem do select option
      $cv = $vid.'-'.$controle;


      //Realizando a atualização no campo video-1.
      $atualizar=$pdo->prepare('UPDATE w_aconteceu SET  video-1= cv  WHERE controle=:controle2');
      $atualizar->bindValue(':controle2', $controle); // AQUI ESTAVA SEU ERRO!
      $atualizar->execute();




$atualizar->closeCursor();
// Se os dados forem atualizados com sucesso...
if ($atualizar){
 echo '<script type="text/javascript">alert("Operação realizada com sucesso!")</script>';
         }
 header("refresh:0 ;painel.php");
     }
// Se houver mensagens de erro, exibe-as
if (count($error) != 0) {
foreach ($error as $erro) {
echo $erro . "";
}
}
} catch (Exception $e) {
  echo 'Error: '. $e->getMessage();   
}
 
?>

Você passou o ":controle" porém não usou statment nele ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, então se você leu os links, notou que, você tem que preparar as declarações, seja por espaços reservados ou posição, posição se passa por números nos binds ou array.

 

Na query abaixo, você declara na função prepare da PDO que os parâmetros passados seja do tipo :nomeado

$atualizar=$pdo->prepare('UPDATE `w_aconteceu` SET `video-1` = :cv WHERE `controle` = :controle2');

Que é diferente de posição ?

$atualizar=$pdo->prepare('UPDATE `w_aconteceu` SET `video-1` = ? WHERE `controle` = ?);

Posição é a sequencia numérica passados dentro dos binds ou array

Bind com espaço reservado nomeado, neste caso não importa a posição da variável, pois está nomeado os parâmetros.

$atualizar=$pdo->prepare('UPDATE `w_aconteceu` SET `video-1` = :cv WHERE `controle` = :controle2');
$prepara->bindValue(':controle2', $id, PDO::PARAM_INT); //int
$prepara->bindValue(':cv', $cv, PDO::PARAM_STR); //string
$atualizar->execute();

Bind com espaço reservado por posição, diferente da nomeado, lembrando passe na sequencia correta 1,2,3 etc, pois a ? e a sequencia no bind ou array

$atualizar=$pdo->prepare('UPDATE `w_aconteceu` SET `video-1` = ? WHERE `controle` = ?);
$prepara->bindValue(1, $cv, PDO::PARAM_STR); //int
$prepara->bindValue(2, $id, PDO::PARAM_INT); //string
$atualizar->execute();

Por array espaço reservado nomeado

$atualizar=$pdo->prepare('UPDATE `w_aconteceu` SET `video-1` = :cv WHERE `controle` = :controle2');
$prepara->execute(
	array(
		':controle2' => $id,
		':cv' => $cv
	)
);

Por array espaço reservado por posição,

$atualizar=$pdo->prepare('UPDATE `w_aconteceu` SET `video-1` = ? WHERE `controle` = ?);
$prepara->execute(
	array($cv, $id)
);

Espero que entenda o conceito passado.

 

Ps: Na se usa - traço em nomes de campos ou de tabelas

video-1

troque por video_1 ou video1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela aula amigo.

 

Já alterei a tabela. Onde era 'video-1', passou a ser 'video1'

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só um detalhe, eu coloquei $prepare ao invés de $atualizar, só corrigir! ;)

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.