Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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();
}
?>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" ?
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
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.
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
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.
<?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 ;)
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
Obrigado pela aula amigo.
Já alterei a tabela. Onde era 'video-1', passou a ser 'video1'
Um abraço.
Só um detalhe, eu coloquei $prepare ao invés de $atualizar, só corrigir! ;)
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.