Changing data with PDO but does not update in the database

0

My form looks like this:

// pega o ID da URL
$id = isset($_GET['id']) ? (int) $_GET['id'] : null;

//Valida a variavel da URL
if (empty($id)){
    echo "ID para alteração não definido";
    exit;
}

$sql_selecao = "SELECT * FROM  veiculos WHERE id=:id";
$result_selecao = $pdo->prepare($sql_selecao);
$result_selecao->bindParam(':id', $id, PDO::PARAM_INT);

$result_selecao->execute();

$resultado = $result_selecao->fetch(PDO::FETCH_ASSOC);

if(!is_array($resultado)){
    echo "Nunhum id encontrado";
    exit;   
}

$marca = listaMarcas($pdo);
?>

<!-- os dois primeiros divs vêm do template-admin-->
<div id="page-wrapper">
    <div class="row">
        <body>                          
         <h1>Formulário de Alteração de Dados</h1>
            <form action="altera-veiculos.php" method="post" enctype="multipart/form-data">
                <!--o tipo hidden esconde o campo--> 

                <table class="table">
                    <tbody>
                        <tr>
                            <td>Modelo:</td>
                            <td><input  class="form-control" type="text" name="modelo" value="<?php echo $resultado['modelo']; ?>"></td>
                        </tr>
                        <tr>
                            <td>Ano:</td>
                            <td><input class="form-control" type="number" name="ano" value="<?php echo $resultado['ano']; ?>"></td>             
                        </tr>
                        <tr>
                            <td>Versão:</td>
                            <td><input  class="form-control" type="text" name="versao" value="<?php echo $resultado['versao']; ?>"></td>
                        </tr>
                        <tr>
                            <td>Cor:</td>
                            <td><input  class="form-control" type="text" name="cor" value="<?php echo $resultado['cor']; ?>"></td>
                        </tr>
                        <tr>
                            <td>Câmbio:</td>
                            <td><input  class="form-control" type="text" name="cambio" value="<?php echo $resultado['cambio']; ?>"></td>
                        </tr>
                        <tr>
                            <td>Portas:</td>
                            <td><input class="form-control" type="number" name="portas" value="<?php echo $resultado['portas']; ?>"></td>               
                        </tr>
                        <tr>
                            <td>Valor:</td>
                            <td><input class="form-control" type="number" name="valor" value="<?php echo $resultado['valor']; ?>"></td>             
                        </tr>
                        <tr>
                            <td>Descrição</td>
                            <td><textarea class="form-control" type="text" name="descricao">"<?php echo $resultado['descricao']; ?>"</textarea></td>
                        </tr>
                        <tr>
                            <td>Marca :</td>
                            <td>
                                <select name="marca_id" class="form-control">
                                    <?php
                                    foreach ($marca as $marcas) : 
                                        $essaEhAMarca = $resultado['marcas'] == $marcas['id'];
                                        $selecao = $essaEhAMarca ? "selected='selected'" : "";
                                        ?>
                                        <option value="<?= $marcas['id'] ?>" <?=$selecao?>>
                                            <?= $marcas['nome'] ?>                              
                                        </option>}
                                    <?php
                                        endforeach
                                    ?>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td>Imagem</td>
                             <td><input type="file" name="arquivo"></td>
                        </tr>
                        <tr>
                            <td><button action="veiculos_cadastrados.php" class="btn btn-primary" type="submit">Alterar</button></td>

I also have this function implemented in a data.php file:

function alteraVeiculo($pdo, $id, $modelo,$ano,$versao,$cor,$cambio,$portas,$valor,$descricao,$marcas,$tmp,$folder,$novoNome,$imagem){
            $sql_alteracao = " UPDATE veiculos set modelo='{$modelo}', ano={$ano}, versao='{$versao}', cor='{$cor}', cambio='{$cambio}', portas={$portas}, valor={$valor}, descricao='{$descricao}' where id='{$id}'";

            $insert_msg_alteracao = $pdo->prepare($sql_alteracao);
            if ($insert_msg_alteracao->execute()){
                echo "<script>location.href='veiculos_cadastrados.php?alterado=true';</script>";
            die();

            }else{
                echo "<script>location.href='veiculos_cadastrados.php?alterado=false';</script>";
            die();
            }
    
asked by anonymous 30.06.2017 / 15:03

1 answer

0

If the data is not being updated in the database, I imagine there are two possible reasons: the sql command has a syntax error or the condition returns nothing. This is assuming that the changeoverValue function is called. Then try putting the pdo to terminate the application when there is a syntax error in sql. In the change vehicle make:

function alteraVeiculo($pdo, $id, $modelo,$ano,$versao,$cor,$cambio,$portas,$valor,$descricao,$marcas,$tmp,$folder,$novoNome,$imagem){
            $sql_alteracao = " UPDATE veiculos set modelo='{$modelo}', ano={$ano}, versao='{$versao}', cor='{$cor}', cambio='{$cambio}', portas={$portas}, valor={$valor}, descricao='{$descricao}' where id='{$id}'";

            //exibir posiveis erros
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            $insert_msg_alteracao = $pdo->prepare($sql_alteracao);
            if ($insert_msg_alteracao->execute()){
                echo "<script>location.href='veiculos_cadastrados.php?alterado=true';</script>";
            die();

            }else{
                echo "<script>location.href='veiculos_cadastrados.php?alterado=false';</script>";
            die();
            }

Another possibility is to verify that the execution of the sql command has modified some rows in the database. This can be done like this:

function alteraVeiculo($pdo, $id, $modelo,$ano,$versao,$cor,$cambio,$portas,$valor,$descricao,$marcas,$tmp,$folder,$novoNome,$imagem){
            $sql_alteracao = " UPDATE veiculos set modelo='{$modelo}', ano={$ano}, versao='{$versao}', cor='{$cor}', cambio='{$cambio}', portas={$portas}, valor={$valor}, descricao='{$descricao}' where id='{$id}'";

            //exibir posiveis erros
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            $insert_msg_alteracao = $pdo->prepare($sql_alteracao);
            $status = $insert_msg_alteracao->execute();

            //conta quantas linhas foram alteradas coma execução do comando anterior
            var_dump($insert_msg_alteracao->rowCount());

            //é melhor evitar o redirecionamento para ver o resultado impresso
            die();

            if ($status){
                echo "<script>location.href='veiculos_cadastrados.php?alterado=true';</script>";
            die();

            }else{
                echo "<script>location.href='veiculos_cadastrados.php?alterado=false';</script>";
            die();
            }
    
01.07.2017 / 04:15