drx 0 Denunciar post Postado Maio 29, 2015 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
Gabriel Heming 766 Denunciar post Postado Maio 29, 2015 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
drx 0 Denunciar post Postado Maio 29, 2015 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
Gabriel Heming 766 Denunciar post Postado Maio 29, 2015 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
drx 0 Denunciar post Postado Maio 29, 2015 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
Williams Duarte 431 Denunciar post Postado Maio 29, 2015 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
drx 0 Denunciar post Postado Maio 30, 2015 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
Mateus Silva 64 Denunciar post Postado Maio 30, 2015 <?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
Williams Duarte 431 Denunciar post Postado Maio 30, 2015 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 tabelasvideo-1troque por video_1 ou video1 Compartilhar este post Link para o post Compartilhar em outros sites
drx 0 Denunciar post Postado Maio 30, 2015 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
Williams Duarte 431 Denunciar post Postado Maio 30, 2015 Só um detalhe, eu coloquei $prepare ao invés de $atualizar, só corrigir! ;) Compartilhar este post Link para o post Compartilhar em outros sites