Changing data with PDO but does not update in the database

Asked

Viewed 230 times

0

My form is 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.php data 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();
            }
  • This tag[id] is what you pass in Where in PHP after?

  • Checks your query with SQL return, UPDATE veiculos... RETURNING *; ;)

  • Because in set model='{$model}', {$model} is between single quotes and in year={$year}, ports={$ports}, value={$value} are not?

  • So, tag is another table. I saw so on Alura.

  • Why I saw in video that should only have simple quotes where string

  • okay, that’s true

  • The thing is ugly in HTML. Tag body after div tags. Of course this does not generate any error

  • i made a simple test in my bank with only one field (Description) and could only update so $sql_change = "UPDATE vehicles set Description='$Description' Where id='$id'";

  • these variables $id, $model, $year, $version, $color ..... are being created as?

Show 4 more comments

1 answer

0

If the data is not being updated in the database I imagine there are two possible reasons: the sql command has syntax error or the condition (Where) returns nothing (finds Matches). That supposing the function alterVeiculo this call snedo. Then try to put Pdo to close the application when any syntax error occurs in sql. In function change vehicle do:

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 check if the execution of the sql command has modified any lines 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();
            }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.