Jump to content
  • 0
MarceloJesus

Update PHP + MySQL apresentando erros

Question

Editei um CRUD onde as pessoas realizam o cadastro, encaminhando os dados para um DB. Criei o formulário para que eu possa ler as informações. Até aí, sem problemas.

Estou apanhando justamente  na parte onde eu possa realizar as modificações dos dados gravados na DB. Utilizo isto para outras DBs e nunca apresentou erros. Recebo a seguinte mensagem ao tentar fazer o UPDATE:

 

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /home/guard714/public_html/marcelojesus/menu/action_voluntarios.php:83 Stack trace: #0 /home/guard714/public_html/marcelojesus/menu/action_voluntarios.php(83): PDOStatement->execute() #1 {main} thrown in /home/guard714/public_html/marcelojesus/menu/action_voluntarios.php on line 83

 

Abaixo, segue os códigos:

OBS: a linha em vermelho ($retorno = $stm->execute();) é a line 83 informada no erro acima.

 

// Verifica se foi solicitada a edição de dados
        if ($acao == 'editar'):

            $sql = 'UPDATE preferencia SET nome=:nome, belo_horizonte=:belo_horizonte, evangelico=:evangelico , paulo_tarso=:paulo_tarso, abc=:abc, nossa_senhora=:nossa_senhora, alberto_cavalcanti=:alberto_cavalcanti, indisponivel=:indisponivel, motivo=:motivo';

            $sql .= 'WHERE id = :id';

            $stm = $conexao->prepare($sql);
            $stm->bindValue(':id', $id);
            $stm->bindValue(':nome', $nome);
            $stm->bindValue(':belo_horizonte', $belo_horizonte);
            $stm->bindValue(':evangelico', $evangelico);
            $stm->bindValue(':paulo_tarso', $paulo_tarso);
            $stm->bindValue(':abc', $abc);
            $stm->bindValue(':nossa_senhora', $nossa_senhora);
            $stm->bindValue(':alberto_cavalcanti', $alberto_cavalcanti);
            $stm->bindValue(':indisponivel', $indisponivel);
            $stm->bindValue(':motivo', $motivo);
             $retorno = $stm->execute();

 

            if ($retorno):
                echo "<div class='alert alert-success' role='alert'>Registro modificado com sucesso. Aguarde, voce esta sendo redirecionado ...</div> ";
            else:
                echo "<div class='alert alert-danger' role='alert'>Erro ao editar registro!</div> ";
            endif;

            echo "<meta http-equiv=refresh content='3;URL=voluntarios.php'>";
        endif;

 

Lembrando que utilizo isto normalmente e nunca deu erro.

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 1

Tenta jogar o bindValue do ID por ultimo (   $sql .= 'WHERE id = :id';  ). Em baixo do  $stm->bindValue(':motivo', $motivo);

 

O erro diz que o parâmetro numérico esta indefinido... talvez seja porque você colocou o ID por ultimo na query, e na hora do bindValue ele coloca por ultimo o ':motivo' . Ai ele entende que este ultimo bindValue deve ser numerico, visto que no banco o ID deve estar como tipo INT.

 

Tenta aí e qualquer coisa da um grito aqui man!

  • +1 1

Share this post


Link to post
Share on other sites
  • 1

Gabrielvt14  Aproveitei sua sugestão e acrescentei    $stm->bindValue(':id', $id);  , mantendo o $sql .= 'WHERE id = :id';  lá na parte superior. Pelo PhpMyAdmin, verifiquei que algumas colunas estavam desmarcadas como "nulo" sendo que os campos podem sim ser nulos. Com estas mudanças e passando tudo para utf8_unicode_ci, agora sim consigo editar conforme planejado. Agradeço a todos vcs pelas orientações. Ainda sou iniciante no assunto. Ficou assim:

 

$sql .= ' WHERE id = :id ';

            $stm = $conexao->prepare($sql);
            $stm->bindValue(':id', $id);
            $stm->bindValue(':nome', $nome);
            $stm->bindValue(':belo_horizonte', $belo_horizonte);
            $stm->bindValue(':evangelico', $evangelico);
            $stm->bindValue(':paulo_tarso', $paulo_tarso);
            $stm->bindValue(':abc', $abc);
            $stm->bindValue(':nossa_senhora', $nossa_senhora);
            $stm->bindValue(':alberto_cavalcanti', $alberto_cavalcanti);
            $stm->bindValue(':indisponivel', $indisponivel);
            $stm->bindValue(':motivo', $motivo);
            $retorno = $stm->execute();

 

Erro resolvido!

  • +1 1

Share this post


Link to post
Share on other sites
  • 0
6 minutos atrás, Arcanck disse:

 

Tente colocar um espaço antes da cláusula WHERE. Deixando assim:

 


$sql .= ' WHERE id = :id';

 

Tentei fazer conforme sua orientação, porém continuou retornado o mesmo erro. O mais estranho é que eu utilizo isto em outros diretórios utilizando outros bancos de dado.

Share this post


Link to post
Share on other sites
  • 0

Segue os códigos:

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Sistema de Cadastro</title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min2.css">
    <link rel="stylesheet" type="text/css" href="css/custom.css">
</head>
<body>
    <div class='container box-mensagem-crud'>
        <?php
        require 'conexao.php';

        // Atribui uma conexao PDO
        $conexao = conexao::getInstance();

        // Recebe os dados enviados pela submissao
        $acao  = (isset($_POST['acao'])) ? $_POST['acao'] : '';
        $id    = (isset($_POST['id'])) ? $_POST['id'] : '';
        $nome  = (isset($_POST['nome'])) ? $_POST['nome'] : '';
        $belo_horizonte  = (isset($_POST['belo_horizonte'])) ? $_POST['belo_horizonte'] : '';
        $evangelico  = (isset($_POST['evangelico'])) ? $_POST['evangelico'] : '';
        $paulo_tarso  = (isset($_POST['paulo_tarso'])) ? $_POST['paulo_tarso'] : '';
        $abc  = (isset($_POST['abc'])) ? $_POST['abc'] : '';
        $nossa_senhora  = (isset($_POST['nossa_senhora'])) ? $_POST['nossa_senhora'] : '';
        $alberto_cavalcanti  = (isset($_POST['alberto_cavalcanti'])) ? $_POST['alberto_cavalcanti'] : '';
        $indisponivel  = (isset($_POST['indisponivel'])) ? $_POST['indisponivel'] : '';
        $motivo  = (isset($_POST['motivo'])) ? $_POST['motivo'] : '';

 


        // Verifica se foi solicitada a edição de dados
        if ($acao == 'editar'):

            $sql = ' UPDATE preferencia SET nome=:nome, belo_horizonte=:belo_horizonte, evangelico=:evangelico , paulo_tarso=:paulo_tarso, abc=:abc, nossa_senhora=:nossa_senhora, alberto_cavalcanti=:alberto_cavalcanti, indisponivel=:indisponivel, motivo=:motivo';

            $sql .= ' WHERE id = :id ';

            $stm = $conexao->prepare($sql);
            $stm->bindValue(':id', $id);
            $stm->bindValue(':nome', $nome);
            $stm->bindValue(':belo_horizonte', $belo_horizonte);
            $stm->bindValue(':evangelico', $evangelico);
            $stm->bindValue(':paulo_tarso', $paulo_tarso);
            $stm->bindValue(':abc', $abc);
            $stm->bindValue(':nossa_senhora', $nossa_senhora);
            $stm->bindValue(':alberto_cavalcanti', $alberto_cavalcanti);
            $stm->bindValue(':indisponivel', $indisponivel);
            $stm->bindValue(':motivo', $motivo);
            $retorno = $stm->execute();

 


            if ($retorno):
                echo "<div class='alert alert-success' role='alert'>Registro modificado com sucesso. Aguarde, voce esta sendo redirecionado ...</div> ";
            else:
                echo "<div class='alert alert-danger' role='alert'>Erro ao editar registro!</div> ";
            endif;

            echo "<meta http-equiv=refresh content='3;URL=voluntarios.php'>";
        endif;


        // Verifica se foi solicitada a exclusao dos dados
        if ($acao == 'excluir'):


            // Exclui o registro do banco de dados
            $sql = 'DELETE FROM preferencia WHERE id = :id';
            $stm = $conexao->prepare($sql);
            $stm->bindValue(':id', $id);
            $retorno = $stm->execute();

            if ($retorno):
                echo "<div class='alert alert-success' role='alert'>Registro excluido com sucesso. Aguarde, voce esta sendo redirecionado ...</div> ";
            else:
                echo "<div class='alert alert-danger' role='alert'>Erro ao excluir registro!</div> ";
            endif;

            echo "<meta http-equiv=refresh content='3;URL=index.php'>";
        endif;
        ?>

    </div>
</body>
</html>

Share this post


Link to post
Share on other sites
  • 0

Aff... e o erro persiste...

 

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /home/guard714/public_html/marcelojesus/menu/action_voluntarios.php:83 Stack trace: #0 /home/guard714/public_html/marcelojesus/menu/action_voluntarios.php(83): PDOStatement->execute() #1 {main} thrown in /home/guard714/public_html/marcelojesus/menu/action_voluntarios.php on line 83

Share this post


Link to post
Share on other sites
  • 0
11 horas atrás, Gabrielvt14 disse:

Tenta jogar o bindValue do ID por ultimo (   $sql .= 'WHERE id = :id';  ). Em baixo do  $stm->bindValue(':motivo', $motivo);

 

O erro diz que o parâmetro numérico esta indefinido... talvez seja porque você colocou o ID por ultimo na query, e na hora do bindValue ele coloca por ultimo o ':motivo' . Ai ele entende que este ultimo bindValue deve ser numerico, visto que no banco o ID deve estar como tipo INT.

 

Tenta aí e qualquer coisa da um grito aqui man!

 

Ele pegou os dados do primeiro cadastro e copiou por cima de todos os outros. Tipo, tenho 45 pessoas cadastradas. Ele copiou os dados do primeiro ID e subsistiu as outras 44. O mais engraçado é que utilizo estes códigos normalmente para outros DB.

Share this post


Link to post
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

  • Similar Content

    • By mamotinho
      Olá, gostaria de sabe como posso fazer uma contagem regressiva apartir de um registro em meu banco de dados eu tentei montar um código da seguinte forma:

       
      <? $DateGET = date('m/d/Y H:i A', strtotime($result->DateDiscount)); ?> <script> var valueDate = <?=$DateGET?>; var end = new Date(valueDate); var _second = 1000; var _minute = _second * 60; var _hour = _minute * 60; var _day = _hour * 24; var timer; function showRemaining() { var now = new Date(); var distance = end - now; if (distance < 0) { clearInterval(timer); document.getElementById("countdown").innerHTML = "EXPIRED!"; return; } var days = Math.floor(distance / _day); var hours = Math.floor((distance % _day) / _hour); var minutes = Math.floor((distance % _hour) / _minute); var seconds = Math.floor((distance % _minute) / _second); document.getElementById("countdown").innerHTML = "<span class='n_date day' id='days'>" + days + "</span><span class='date'>일</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time hour' id='hrs'>" + hours + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time minute' id='minus'>" + minutes + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time second' id='secs'>" + seconds + "</span>"; } timer = setInterval(showRemaining, 1000); </script> Mais infelizmente não passou a data registrada no banco de dados, alguém teria ideia de como posso ta fazendo.
    • By emmanuelsiqueira30
      Pessoal preciso de uma ajudinha aqui se alguém puder me ajudar fico muito agradecido.
      O problema é o seguinte gostaria de editar dados de um formulário com checkbox usando html e php.
      Desde já agradeço por toda ajuda.
    • By liniker.o
      Boa tarde pessoal!
      Estou com um problema em meu código quando coloco uma referencia de fonte a mesma não carrega, quando faça o mesmo procedimento local colocando os caminhos de pasta funciona normalmente.
      Será que alguém poderia me ajudar?
      Segue o código.
      <html> <head> <title>Minha pagina</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <!-- Se não declarar charset por meta, envie um header de igual valor --> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <?php //Carregar imagem tamanho da imagen = 515x76 $img = ImageCreateFromJPEG("base.jpg"); //Definir cor $cor1 = imagecolorallocate($img, 0, 0, 0); $cor2 = imagecolorallocate($img, 0, 0, 0); // carregar fonte... $fonte1 = 'https://ff.static.1001fonts.net/r/o/roboto-condensed.light.ttf'; $fonte2 = 'https://ff.static.1001fonts.net/r/o/roboto-condensed.light.ttf'; //Escrever nome $txtNome = $_POST['nome']; $txtFuncao = $_POST['func']; $txtEmail = $_POST['email']; $txtDDD = "+55 ".$_POST['telefone']; // IMAGEM, TAMANHO_FONTE, 0, POSICAO X, posicao Y, TEXTO_COR, ARQ_FONTE, TEXTO imagettftext($img, 32, 0, 250, 100, $cor1, $fonte1, $txtNome); imagettftext($img, 18, 0, 250, 125, $cor1, $fonte2, $txtFuncao); imagettftext($img, 18, 0, 250, 150, $cor1, $fonte2, $txtEmail); imagettftext($img, 18, 0, 250, 180, $cor1, $fonte2, $txtDDD); //Header e output header('Content-type: image/jpeg'); imagejpeg($img,"Assinatura - ".$txtNome.".jpg"); imagedestroy($img); header('Location: Assinatura - '.$txtNome.'.jpg'); ?>  
    • By gersonab
      Boa tarde a todos, tenho um sistema de upload de arquivos que funciona perfeitamente, agora eu gostaria que estes arquivos fossem armazenados em nuvem, não no servidor, poderiam indicar um tutorial ou como proceder.
    • By Diego-SLP
      Bom dia,
       
      Teria como eu fazer um UPDATE na minha base colocando através de um FORM o VALOR_UNITARIO sendo que a QUANTIDADE já tenho na base de dados, e assim, atualizar o campo VALOR FINAL já? 
       
      Vou atualizar varios registros de uma vez.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.