SQLSTATE error [HY093]: Invalid parameter number: parameter was not defined,

0

I have a problem some time with a registry made in ajax but when trying to register client user in the client table of a sql error stating that a missing

I have tried several ways. I understand that this parameter that the query wants is the id of the table, which is sent at index 0 of array $dados , how can I make index 0 not included in the query?

I am sending my entire code to see if anyone can help me the connection is ok, ajax is ok the problem is on the page crud.php.

$(function(){
    //GERAIS
    var errmsg  = $('.msg');
    var forms   = $('form');
    var botao   = $('.j_buttom');
    var urlpost = 'php/crud.php';

    botao.attr("type","submit");

    forms.submit(function(){
        errmsg.fadeOut("fast");
        return false;
    });

    function carregando(){
        errmsg.empty().html('<p class="load"><img src="img/load.gif" alt="Carregando..."> Aguarde, enviando requisição!</p>').fadeIn("fast");
    }

    function errosend(){
        errmsg.empty().html('<p class="erro"><strong>Erro inesperado,</strong> Favor contate o admin!</p>').fadeIn("fast");
    }

    //GENÉRICAS
    function errdados( mensagem ){
        errmsg.empty().html('<p class="erro">'+mensagem+'</p>').fadeIn("fast");
    }

    function sucesso( mensagem ){
        errmsg.empty().html('<p class="accept">'+mensagem+'</p>').fadeIn("fast");
    }

    $.ajaxSetup({
        url:    urlpost,
        type:   'POST',
        beforeSend: carregando,
        error:      errosend
    });

    //CADASTRO
    var cadastro = $('form[name="cadastro"');

    cadastro.submit(function(){
        var dados = $(this).serialize();
        var acao = "&acao=cadastro";
        var sender  = dados+acao;

        $.ajax({
            data:   sender,
            success: function( resposta ){
                    if(resposta == '1'){
                    errdados('<strong>Erro ao cadastrar:</strong> Existem campos em branco!');
                }else if(resposta == '2'){
                    errosend();
                }else{
                    sucesso( 'Parabéns <strong>'+resposta+'</strong>, seu cadastro foi realizado!' );
                }               
            },

        });
    });

}); 

Connecting to the database

function conectar() {
    define("HOST", "localhost");
    define("BD", "db_clientes");
    define("USER", "root");
    define("PASS", "");

    try {
        $dsn = "mysql:host=".HOST.";dbname=".BD;
        $pdo = new PDO($dsn, USER, PASS);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    } catch (PDOException $e) {
        echo "Erro: ".$e->getMessage();
    }

    return $pdo;
}
require 'conexao.php';

switch ($_POST['acao']) {
  case 'cadastro':

    $c['nome'] = strip_tags(trim($_POST['nome']));
    $c['sobrenome'] = strip_tags(trim($_POST['sobrenome']));
    $c['email'] = filter_var($_POST["email"], FILTER_VALIDATE_EMAIL);
    $c['telefone'] = filter_var($_POST["telefone"], FILTER_VALIDATE_INT);
    $c['senha'] = strip_tags(trim($_POST['senha']));
    $c['data_cadastro'] = date('Y-m-d H:i:s');
    if (in_array('', $c)) {
      echo '1';
    } else {

      $dados = array(
        1 => $c['nome'],
        2 => $c['sobrenome'],
        3 => $c['email'],
        4 => $c['telefone'],
        5 => $c['senha'],
        6 => $c['data_cadastro'],

      );

      $Fields = implode(',  ', array_keys($c));
      $values = ':'.implode(' , :', array_keys($c));
      try {

        $cadastra = conectar()->prepare("INSERT INTO clientes  ({$Fields})  VALUES ({$values})");
        $cadastra->execute($dados);

        if ($cadastrar->rowCount() == 1) {
          echo $c['nome'].' '.$c['sobrenome'];
        } else {
          echo '2';
        }
      } catch (PDOException $e) {
        echo $e->getMessage();
      }
    }
    break;
  default:
    echo 'Erro ao selecionar ação!';
}
    
asked by anonymous 12.07.2017 / 04:31

1 answer

0

Your error is in the data array pass:

$dados = array(
   1 => $c['nome'],
   2 => $c['sobrenome'],
   3 => $c['email'],
   4 => $c['telefone'],
   5 => $c['senha'],
   6 => $c['data_cadastro'],
);

Just change to:

$dados = array(
  ":nome" => $c['nome'],
  ":sobrenome" => $c['sobrenome'],
  ":email" => $c['email'],
  ":telefone" => $c['telefone'],
  ":senha" => $c['senha'],
  ":data_cadastro" => $c['data_cadastro'],
);

See working:

Note, be careful with the line

$cadastra->execute($dados);
if ($cadastrar->rowCount() == 1) {

$cadastra and not $cadastrar

    
12.07.2017 / 05:21