analisar erro no código

Enviada por Neto Sales 
Neto Sales
analisar erro no código
24 de June de 2018 às 08:57PM
Gostaria que alguém me ajudasse a encontrar erro num código. Estou fazendo um curso na net, e tentando adaptar o código que funciona para ir aprimorando a aprendizagem. Então vou colocar dois códigos aqui, onde um funciona o outro não. O que funciona é o do curso com mais campos. O que fiz foi apenas adaptar esse código que funciona para uma quantidade bem menor, e ver se funciona. Os dois códigos abre o formulário, aparentemente consultam o banco com sucesso, porém só o original está alterando, certamente por algum erro meu. Mas já olhei trocentas vezes, postei dúvida lá no curso, e o cara não responde, então tô parado na aprendizagem por conta disso. Basicamente é um formulário de cadastro de transportadoras onde o usuário altera os dados de uma transportadora através desse formulário. Esse tá funcionando tudo certinho. Tentei reproduzir esse mesmo formulário, porém apenas com dois campos (cidade e estado), e mesmo assim não funciona. Lista certinho, mas não altera, por isso acho que é um erro simples. Segue os dois códigos pra que comparem:

CÓDIGO QUE FUNCIONA:

<?php require_once("conexao/conexao.php"); ?>
<?php
if (isset($_POST["nometransportadora"])){
$nome = utf8_decode($_POST["nometransportadora"]);
$endereco = utf8_decode($_POST["endereco"]);
$cidade = utf8_decode($_POST["cidade"]);
$estado = $_POST["estados"];
$cep = $_POST["cep"];
$cnpj = $_POST["cnpj"];
$telefone = $_POST["telefone"];
$tID = $_POST["transportadoraID"];
// CRIAR O OBJETO PARA ALTERAR
$alterar = "UPDATE transportadoras ";
$alterar .= "SET ";
$alterar .= "nometransportadora = '{$nome}', ";
$alterar .= "endereco = '{$endereco}', ";
$alterar .= "cidade = '{$cidade}', ";
$alterar .= "estadoID = {$estado}, ";
$alterar .= "cep = '{$cep}', ";
$alterar .= "cnpj = '{$cnpj}', ";
$alterar .= "telefone = '{$telefone}' ";
$alterar .= "WHERE transportadoraID = {$tID}";
$operacao_alterar = mysqli_query($conecta, $alterar);
if (!$operacao_alterar){
die("Erro na alteração!");
}else {
header("location: listagem2.php");
}
}


// Consulta a tabela de transportadoras.
$tr = "SELECT * ";
$tr .= "FROM transportadoras ";
if (isset($_GET["codigo"])){
$id = $_GET["codigo"];
$tr .= "WHERE transportadoraID = {$id} ";
}else {
$tr .= "WHERE transportadoraID = 1 ";
}
$con_transportadora = mysqli_query($conecta, $tr);
if (!$con_transportadora){
die("Erro na consulta");
}
$info_transportadora = mysqli_fetch_assoc($con_transportadora);

// Consulta aos estados
$estados = "SELECT * ";
$estados .= "FROM estados ";
$lista_estados = mysqli_query($conecta, $estados);
if (!$lista_estados){
die("erro no banco");
}

?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Curso PHP INTEGRACAO</title>

<!-- estilo -->
<link href="_css/estilo.css" rel="stylesheet">
<link href="_css/alteracao.css" rel="stylesheet">
</head>

<body>
<?php include_once("_incluir/topo.php"); ?>

<main>
<div id="janela_formulario">
<form action="alteracao.php" method = "post">
<h2>Alteração de Transportadoras</h2>
<label for="nometransportadora">Nome da Transportadora</label>
<input type = "text" value = "<?php echo utf8_encode( $info_transportadora["nometransportadora"]) ?>" name = "nometransportadora" id = "nometransportadora">
<label for="endereco">Endereço</label>
<input type = "text" value = "<?php echo utf8_encode( $info_transportadora["endereco"]) ?>" name = "endereco" id = "endereco">
<label for="cidade">Cidade</label>
<input type = "text" value = "<?php echo utf8_encode( $info_transportadora["cidade"]) ?>" name = "cidade" id = "cidade">
<label for="estados">Estados</label>
<select id = "estados" name = "estados">
<?php
$meuestado = $info_transportadora["estadoID"];
while ($linha = mysqli_fetch_assoc($lista_estados)){
$estado_principal = $linha["estadoID"];
if ($meuestado == $estado_principal){
?>
<option value="<?php echo $linha["estadoID"] ?>" selected>
<?php echo utf8_encode($linha ["nome"]) ?>
</option>
<?php
} else {
?>
<option value="<?php echo $linha["estadoID"] ?>">
<?php echo utf8_encode($linha ["nome"]) ?>
</option>
<?php
}
}
?>

</select>
<label for="cep">CEP</label>
<input type = "text" value = "<?php echo ( $info_transportadora["cep"]) ?>" name = "cep" id = "cep">
<label for="telefone">Telefone</label>
<input type = "text" value = "<?php echo utf8_encode( $info_transportadora["telefone"]) ?>" name = "telefone" id = "telefone">
<label for="cnpj">CNPJ</label>
<input type = "text" value = "<?php echo utf8_encode( $info_transportadora["cnpj"]) ?>" name = "cnpj" id = "cnpj">
<input type = "hidden" name = "transportadoraID" value = "<?php echo $info_transportadora["transportadoraID"] ?>">
<input type = "submit" value="Confirmar Alteração">
</form>
</div>
</main>

<?php include_once("_incluir/rodape.php"); ?>
</body>
</html>


CÓDIGO QUE NÃO FUNCIONA. (Lista tudo certinho, mas não altera, nem traz o estádo pré-checado).

<?php require_once("conexao/conexao.php"); ?>
<?php
if( isset($_POST["nomeCidade"]) ) {
$nomeCidade = utf8_decode($_POST["nomeCidade"]);
$estado = $_POST["estados"];
$cID = $_POST["cidadeID"];

// Objeto para alterar
$alterar = "UPDATE cidades ";
$alterar .= "SET ";
$alterar .= "nomeCidade = '{$nomeCidade}', ";
$alterar .= "estadoID = {$estado} ";
$alterar .= "WHERE cidadeID = {$cID} ";
$operacao_alterar = mysqli_query($conecta, $alterar);
if(!$operacao_alterar) {
die("Erro na alteracao");
} else {
header("location:alterarCidades.php");
}

}

// Consulta a tabela de cidades
$tr = "SELECT * ";
$tr .= "FROM cidades ";
if(isset($_GET["codigo"]) ) {
$id = $_GET["codigo"];
$tr .= "WHERE cidadeID = {$id} ";
} else {
$tr .= "WHERE cidadeID = 1 ";
}

$con_cidade = mysqli_query($conecta,$tr);
if(!$con_cidade) {
die("Erro na consulta");
}

$info_cidade = mysqli_fetch_assoc($con_cidade);


// consulta aos estados
$estados = "SELECT * ";
$estados .= "FROM estados ";
$lista_estados = mysqli_query($conecta, $estados);
if(!$lista_estados) {
die("erro no banco");
}


?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Alteração Cidades</title>
<!-- estilo -->
<link href="_css/estilo.css" rel="stylesheet">
<link href="_css/alteracao.css" rel="stylesheet">

</head>

<body>
<?php include_once("_incluir/topo.php"); ?>


<main>
<div id="janela_formulario">
<form action="alteracaoCidades.php" method="post">
<h2>Alteração de Cidades</h2>

<label for="nomeCidade">Nome da Cidade</label>
<input type="text" value="<?php echo utf8_encode($info_cidade["nomeCidade"]) ?>" name="nomeCidade" id="nomeCidade">
<label for="estados">Estados</label>
<select id="estados" name="estados">
<?php
$meuestado = $info_cidade["estadoID"];
while($linha = mysqli_fetch_assoc($lista_estados)) {
$estado_principal = $linha["estadoID"];
if($meuestado == $estado_principal) {
?>
<option value="<?php echo $linha["estadoID"] ?>" selected>
<?php echo utf8_encode($linha["nome"]) ?>
</option>
<?php
} else {
?>
<option value="<?php echo $linha["estadoID"] ?>" >
<?php echo utf8_encode($linha["nome"]) ?>
</option>
<?php
}
}
?>
</select>
<input type="hidden" name="cidadeID" value="<?php echo $info_cidade["cidadeID"] ?>">
<input type="submit" value="Confirmar alteração">
</form>
</div>
</main>

<?php include_once("_incluir/rodape.php"); ?>
</body>
</html>
Trambulhao
Re: analisar erro no código
25 de June de 2018 às 04:34PM
Como forma da aprendizado, e caso o erro não apareça na tela, aconselho que vá fazendo depurações no código até descobrir onde se encontra o erro. Repara no exemplo..

Você sabe usar PDO?

<?php
require_once "conexao/conexao.php";

// DEBUG (verificar connexão)
var_dump($conecta); // apagar ou comenta essa linha depois
exit; // essa também

// Verifica se a requisição foi pelo mêtodo POST
if (($_SERVER['REQUEST_METHOD'] ?? null) == 'POST') {

// DEBUG (verificar se os dados chegaram)
print_r($_POST); // apagar essa linha depois

// Use o filter por questão de segurança
$idCidade = filter_input(INPUT_POST, 'cidadeID', FILTER_VALIDATE_INT);
$nomeCidade = utf8_decode(filter_input(INPUT_POST, 'nomeCidade'));
$idEstado = filter_input(INPUT_POST, 'estados', FILTER_VALIDATE_INT);

// Objeto para alterar
$updSqlCidade = "UPDATE cidades SET ";
$updSqlCidade .= "nomeCidade = '{$nomeCidade}', ";
$updSqlCidade .= "estadoID = {$idEstado} ";
$updSqlCidade .= "WHERE cidadeID = {$idCidade} ";

$updQueryCidade = mysqli_query($conecta, $updSqlCidade);

// DEBUG (verifica se retorma false ou true/objeto)
var_dump($updQueryCidade); // apagar essa linha depois

if (!$updQueryCidade) {
die("Erro na alteracao");
} else {
header("location:alterarCidades.php");
}
}

$id = filter_input(INPUT_GET, 'codigo', FILTER_VALIDATE_INT);

// DEBUG (verificar se o ID passou)
var_dump($id); // apagar essa linha depois
exit; // essa também

// Consulta a tabela de cidades
$sqlCidade = "SELECT * FROM cidades WHERE cidadeID = ";
$sqlCidade .= (!empty($id)) ? $id : 1;

$queryCidade = mysqli_query($conecta, $sqlCidade);

// DEBUG (verificar se a consulta foi realizada. retorna false ou true/objeto
var_dump($queryCidade); // apagar essa linha depois
exit; // essa também

if (!$queryCidade) {
die("Erro na consulta");
}

$cidade = mysqli_fetch_assoc($queryCidade);
$meuEstado = $cidade["estadoID"];

// consulta aos estados
$sqlEstados = "SELECT * FROM estados";
$estados = mysqli_query($conecta, $sqlEstados);

if (!$estados) {
die("Erro no banco");
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Alteração Cidades</title>
<!-- estilo -->
<link href="_css/estilo.css" rel="stylesheet">
<link href="_css/alteracao.css" rel="stylesheet">
</head>

<body>
<?php include_once "_incluir/topo.php";?>

<main>
<div id="janela_formulario">
<form action="alteracaoCidades.php" method="post">
<h2>Alteração de Cidades</h2>
<label for="nomeCidade">Nome da Cidade</label>
<input type="text" value="<?php echo utf8_encode($cidade["nomeCidade"]) ?>" name="nomeCidade" id="nomeCidade">
<label for="estados">Estados</label>
<select id="estados" name="estados">
<?php
while ($estado = mysqli_fetch_assoc($estados)):
$selected = ($meuEstado == $estado["estadoID"]) ? ' selected' : '';
?>
<option value="<?php echo $estado["estadoID"] ?>"<?php echo $selected; ?>>
<?php echo utf8_encode($estado["nome"]) ?>
</option>
<?php
endwhile;
?>
</select>
<input type="hidden" name="cidadeID" value="<?php echo $cidade["cidadeID"] ?>">
<input type="submit" value="Confirmar alteração">
</form>
</div>
</main>

<?php include_once "_incluir/rodape.php";?>
</body>
</html>
Trambulhao
Re: analisar erro no código
25 de June de 2018 às 05:43PM
Aprenda e dê preferência ao PDO. Pode ser que o mysqli fique obsoleto no futuro.

Exemplo usado PDO..

connection.php

<?php
// conetar com um banco MySQL
$dbUser = ''; // usuario
$dbPass = ''; // senha
$dbName = ''; // nome do banco de dados
$dbHost = 'localhost'; // ou usar 127.0.0.1

$dbDsn = "mysql:dbname={$dbName};host={$dbHost}";

try {
$pdo = new PDO($dbDsn, $dbUser, $dbPass);
}
catch (PDOException $e) {
echo 'Conexão com o banco de dados falhou: ' . $e->getMessage();
}


alterarCidades.php

<?php
require_once "connection.php";

// REQUISIÇÃO POST
if (($_SERVER['REQUEST_METHOD'] ?? null) == 'POST') {

// RESGATAR OS DADOS DO FORMULÁRIO
$idCidade = filter_input(INPUT_POST, 'cidadeID', FILTER_VALIDATE_INT);
$nomeCidade = filter_input(INPUT_POST, 'nomeCidade');
$idEstado = filter_input(INPUT_POST, 'estados', FILTER_VALIDATE_INT);

// EDITAR CIDADE
$sqlUpdCidade = "UPDATE cidades SET nomeCidade = ?, estadoID = ? WHERE cidadeID = ?";

$updCidade = $pdo->prepare($sqlUpdCidade);
$updReturn = $updCidade->execute([$nomeCidade, $idEstado, $idCidade]);

if ($updReturn) {
// Sucesso
// O Correto é header("Location: alterarCidades.php"); "L" mauisculo e espaco entre Location e o endereço
}
else {
// Erro
// die(..)
}
}

// CONSULTAR CIDADE
$id = filter_input(INPUT_GET, 'codigo', FILTER_VALIDATE_INT) ?? 1;

$sqlCidade = "SELECT * FROM cidades WHERE cidadeID = ?";

$getCidade = $pdo->prepare($sqlCidade);
$getCidade->execute([$id]);

$cidade = $getCidade->fetch(PDO::FETCH_ASSOC);

if (empty($cidade)) {
die("Nenhuma cidade retornada");
}

// consulta aos estados
$sqlEstados = "SELECT * FROM estados";

$getEstados = $pdo->prepare($sqlEstados);
$getEstados->execute();

$estados = $getEstados->fetchAll(PDO::FETCH_ASSOC);

if (empty($estados)) {
die("Nenhum Estado retornado");
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Alteração Cidades</title>
<link href="_css/estilo.css" rel="stylesheet">
<link href="_css/alteracao.css" rel="stylesheet">
</head>

<body>
<?php include_once "_incluir/topo.php";?>

<main>
<div id="janela_formulario">
<form action="alteracaoCidades.php" method="post">
<h2>Alteração de Cidades</h2>
<label for="nomeCidade">Nome da Cidade</label>
<input type="text" value="<?php echo utf8_encode($cidade["nomeCidade"]) ?>" name="nomeCidade" id="nomeCidade">
<label for="estados">Estados</label>
<select id="estados" name="estados">
<?php
foreach ($estados as $row => $estado):
$selected = ($cidade["estadoID"] == $estado["estadoID"]) ? ' selected' : '';
?>
<option value="<?php echo $estado["estadoID"] ?>"<?php echo $selected; ?>>
<?php echo utf8_encode($estado["nome"]) ?>
</option>
<?php
endforeach;
?>
</select>
<input type="hidden" name="cidadeID" value="<?php echo $cidade["cidadeID"] ?>">
<input type="submit" value="Confirmar alteração">
</form>
</div>
</main>

<?php include_once "_incluir/rodape.php";?>
</body>
</html>
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.