Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

TiagoMaker

[Resolvido] Recebendo e alterando dados de um SELECT/LIST

Recommended Posts

Dae galera, estou desenvolvendo um sistema de notícias em php como forma de exercício para aprender alguns conceitos. A parte de inserção, alteração e de deletar mensagens está funcionando perfeitamente, mas resolvi que quero também colocar um select/menu-list com as categorias que serão usadas.

 

Consegui chegar até o momento em que insiro uma notícia com: titulo, autor, categoria, data, hora e texto. Tudo é exbido corretamente!

 

Mas agora na parte de atualização, eu preciso recuperar os dados de uma notícia já inserida e colocá-las em seus devidos campos para alterar e salvar de novo. O que acontece é que eu não consigo recuperar o select e ao mesmo tempo exibir as outras categorias, podendo troca-la. Então peço o conselho de vocês para que possam me ajudar.

 

atualiza.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="include/nicedit/nicEdit.js" type="text/javascript"></script>
<script type="text/javascript">bkLib.onDomLoaded(nicEditors.allTextAreas);</script>
    <title>Atualiza Clientes</title>
    <link rel="stylesheet" type="text/css" href="css/estilo.css" />
</head>

<body>
	<div id="corpo">
        <?php
            include "include/topo.php";
            include "include/menu.php";
        ?>
        <h2>Atualiza Conteúdo</h2>
        <?php
            if ($_GET["msg"] == "sucesso") {
                echo "<h3>* Atualização realizada com sucesso</h3>";
            }
            else if ($_GET["msg"] == "erro") {
                echo "<h3>* Erro ao atualizar seu registro</h3>";
            }
        ?>
        <form id="form" action="valida.php?acao=atualiza" method="post">
            <?php
                //Conecto ao banco
                include "include/conexao.php";
                //Monto a query
                $sql = "SELECT a.titulo, a.autor, a.conteudo, DATE_FORMAT(data, '%d/%m/%Y') AS data, a.hora, b.idcategoria, b.nome_categoria FROM conteudo a, categoria b WHERE a.categoria=b.idcategoria";
                //Executo a query
                $query = mysql_query($sql);
                //Converto o resource para um array, e percorro esse array
                while($dados = mysql_fetch_assoc($query)) {
                    $id = $dados["idconteudo"];
                    $tit = $dados["titulo"];
                    $aut = $dados["autor"];
					$cont = $dados["conteudo"];
					$dat = $dados["data"];
					$hor = $dados["hora"];
					$idcat = $dados["idcategoria"];
					$cat = $dados["nome_categoria"];
					
                }
            ?>
            <label for="titulo">Título: <input type="text" name="titulo" value="<?php echo $tit; ?>" /></label>
            <label for="titulo">Autor: <input type="text" name="autor" value="<?php echo $aut; ?>" /></label>
            <label for="titulo">Categoria: <br>
            
<?php
$sql = "SELECT idcategoria, nome_categoria FROM categoria";
//Executo a query
$query = mysql_query($sql);
//Converto o resource para um array, e percorro esse array
?>
<select name="categorias">
<option value="">SELECIONE</option>
<?php
while($dados = mysql_fetch_array($query)){
$idcat = $dados["idcategoria"];
$cat = $dados["nome_categoria"];
echo '<option value="'.$idcat.'"> '.$cat.' </option>';
}
?>
</select>
            <label for="conteudo">Conteúdo: <textarea name="conteudo"><?php echo $cont; ?></textarea></label>
            <input type="hidden" name="id" value="<?php echo $id; ?>" />
            <button type="submit">ALTERAR</button>
        </form>
</div>
</body>
</html>

valida.php

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

$data = date('Y-m-d');
$hora = strftime("%H:%M:%S");
 
if ($_GET['acao'] && $_GET['acao'] == 'insere') {
//Monto minha query de inserção de dados - fizemos isso no primeiro tutorial
        $sql = "INSERT INTO conteudo(titulo, autor, conteudo, data, hora, categoria) VALUES('".$_POST["titulo"]."', '".$_POST["autor"]."', '".$_POST["conteudo"]."', '$data', '$hora','".$_POST["categorias"]."')";
//Executo a minha query
        $query = mysql_query($sql);
//Verifico se o registro foi inserido com sucesso
        if ($query == true) {
                header("Location: insere.php?msg=sucesso");
        }else{
                header("Location: insere.php?msg=erro");
        }
}
 
else if($_GET["acao"] == "deleta") {
//Monto minha query de exclusão de dados
$sql = "DELETE FROM conteudo WHERE idconteudo = ".$_GET["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    header("Location: lista.php?msg=sucesso");
}
else {
    header("Location: lista.php?msg=erro");
}
}
 
else if($_GET["acao"] == "atualiza") {
//Monto minha query de exclusão de dados
$sql = "UPDATE conteudo SET titulo = '".$_POST["titulo"]."', autor = '".$_POST["autor"]."', conteudo = '".$_POST["conteudo"]."' WHERE idconteudo = ".$_POST["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    header("Location: atualiza.php?msg=sucesso&id=".$_POST["id"]);
}
else {
    header("Location: atualiza.php?msg=erro&id=".$_POST["id"]);
}
}

if ($_GET["acao"] == "inserecat") {
//Monto minha query de inserção de dados - fizemos isso no primeiro tutorial
$sql = "INSERT INTO categoria(nome_categoria) VALUES('".$_POST["categoria"]."')";
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi inserido com sucesso
if ($query == true) {
    header("Location: insere.php?msg=sucesso");
}
else {
    header("Location: insere.php?msg=erro");
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que acontece é que eu não consigo recuperar o select e ao mesmo tempo exibir as outras categorias, podendo troca-la. Então peço o conselho de vocês para que possam me ajudar.

 

Okay.. oque você pode fazer, é dentro do loop, testar se o que está sendo preenchido é igual o que está no banco, e ai printar um 'selected="selected"', ou simplesmente criar mais um option acima, com os dados do que tá no banco.

 

 

<select name="categorias">
<?php
echo '<option value="',$idcat,'">',$cat,'</option>'."\n";
echo '<option value="">SELECIONE</option>'."\n";
while($dados = mysql_fetch_array($query)){
$idcat = $dados["idcategoria"];
$cat = $dados["nome_categoria"];
echo '<option value="'.$idcat.'"> '.$cat.' </option>';
}
?>
</select>
E a outra forma, eu deixo pra você implementar.. mas eu prefiro esta acima..

acredito que demanda menos processamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente agora apareceu a categoria que eu escolhi antes, mas, a categoria aparece no topo da lista e aparece novamente embaixo, como se ela tivesse sido duplicada!

 

vamos dizer que escolhi a categoria 2

 

antes: Categoria 1, Categoria 2

depois: Categoria 2, Categoria 1, Categoria 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Após desafiar todas as leis da física, cheguei ao seguinte código:

 

<select name="categorias">
<option value="">SELECIONE</option>
<?php
while($dados = mysql_fetch_array($query)){
$idcat = $dados["idcategoria"];
$cat2 = $dados["nome_categoria"]; // o 2 é pra não sobrescrever o $cat da primeira consulta, que será usado

if ($cat == $cat2) $selected = "selected='selected'"; else $selected = '';

echo '<option value="'.$idcat.'" '. $selected .'> '.$cat2.' </option>';
}
?>
</select>

Ele realmente recupera o a categoria anterior e preserva a lista igualmente, mas na hora de gravar isso no bd, não ta indo porque eu não entendi o mecanismo pra inseri de novo esse select

 

else if($_GET["acao"] == "atualiza") {
//Monto minha query de exclusão de dados
$sql = "UPDATE conteudo SET titulo = '".$_POST["titulo"]."', autor = '".$_POST["autor"]."', conteudo = '".$_POST["conteudo"]."' WHERE idconteudo = ".$_POST["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    header("Location: atualiza.php?msg=sucesso&id=".$_POST["id"]);
}
else {
    header("Location: atualiza.php?msg=erro&id=".$_POST["id"]);
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

é um update normal..

`idcategoria` = $_POST['categorias'];

 

como se fosse qualquer outro input..

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei a query assim:

 

$sql = "UPDATE conteudo SET titulo = '".$_POST["titulo"]."', autor = '".$_POST["autor"]."', conteudo = '".$_POST["conteudo"]."',  idcategoria = '".$_POST["categorias"]."' WHERE idconteudo = ".$_POST["id"];

e assim:

 

$sql = "UPDATE conteudo SET titulo = '".$_POST["titulo"]."', autor = '".$_POST["autor"]."', conteudo = '".$_POST["conteudo"]."',  categoria = '".$_POST["categorias"]."' WHERE idconteudo = ".$_POST["id"];

E ambas deram erro, será que não é porque "categoria" ta em outra tabela no BD? Na tabela "conteudo" tenho um campo "categoria" onde armazeno os id's

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual erro que deu?

se você armazena o ID, você não deve tratar como string.

$sql = "UPDATE conteudo 
SET titulo = '".$_POST["titulo"]."', autor = '".$_POST["autor"]."', conteudo = '".$_POST["conteudo"]."',  
categoria = ".$_POST["categorias"]." WHERE idconteudo = ".$_POST["id"];
echo $sql;

Compartilhar este post


Link para o post
Compartilhar em outros sites

UPDATE conteudo SET titulo = '111', autor = '111', conteudo = '11111

', categoria = 2 WHERE idconteudo =

Warning: Cannot modify header information - headers already sent by (output started at C:\VertrigoServ\www\noticias\valida.php:39) in C:\VertrigoServ\www\noticias\valida.php on line 47

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cria um campo hidden assim:

<input type="hidden" name="id" value="<?php echo $dados['idconteudo']; ?>" />
e ao executar a query:

$query = mysql_query($sql)or die(mysql_error());
depois que tiver tudo certo, retire o echo.. você notou o erro ?

 

Falo pra você colocar o hidden, pois não está chegando nenhum $_POST['id'].

Compartilhar este post


Link para o post
Compartilhar em outros sites

To recebendo esse erro:

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2

 

pelo que entendi tem um erro no comando do update, mas não consegui ve problema

 

else if($_GET["acao"] == "atualiza") {
//Monto minha query de exclusão de dados
$sql = "UPDATE conteudo SET titulo = '".$_POST["titulo"]."', autor = '".$_POST["autor"]."', conteudo = '".$_POST["conteudo"]."',   
idcategoria = ".$_POST["categorias"]." WHERE idconteudo = ".$_POST["id"];
//Executo a minha query
$query = mysql_query($sql) or die(mysql_error());
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    header("Location: atualiza.php?msg=sucesso&id=".$_POST["id"]);
}
else {
    header("Location: atualiza.php?msg=erro&id=".$_POST["id"]);
}
}

E a página atualiza.php ta assim:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="include/nicedit/nicEdit.js" type="text/javascript"></script>
<script type="text/javascript">bkLib.onDomLoaded(nicEditors.allTextAreas);</script>
    <title>Atualiza Clientes</title>
    <link rel="stylesheet" type="text/css" href="css/estilo.css" />
</head>

<body>
	<div id="corpo">
        <?php
            include "include/topo.php";
            include "include/menu.php";
        ?>
        <h2>Atualiza Conteúdo</h2>
        <?php
            if ($_GET["msg"] == "sucesso") {
                echo "<h3>* Atualização realizada com sucesso</h3>";
            }
            else if ($_GET["msg"] == "erro") {
                echo "<h3>* Erro ao atualizar seu registro</h3>";
            }
        ?>
        <form id="form" action="valida.php?acao=atualiza" method="post">
            <?php
                //Conecto ao banco
                include "include/conexao.php";
                //Monto a query
                $sql = "SELECT a.titulo, a.autor, a.conteudo, DATE_FORMAT(data, '%d/%m/%Y') AS data, a.hora, b.idcategoria, b.nome_categoria FROM conteudo a, categoria b WHERE a.categoria=b.idcategoria";
                //Executo a query
                $query = mysql_query($sql);
                //Converto o resource para um array, e percorro esse array
                while($dados = mysql_fetch_assoc($query)) {
                    $id = $dados["idconteudo"];
                    $tit = $dados["titulo"];
                    $aut = $dados["autor"];
					$cont = $dados["conteudo"];
					$dat = $dados["data"];
					$hor = $dados["hora"];
					$idcat = $dados["idcategoria"];
					$cat = $dados["nome_categoria"];
					
                }
            ?>
            <label for="titulo">Título: <input type="text" name="titulo" value="<?php echo $tit; ?>" /></label>
            <label for="titulo">Autor: <input type="text" name="autor" value="<?php echo $aut; ?>" /></label>
            <label for="titulo">Categoria: <br>
            
<?php
$sql = "SELECT idcategoria, nome_categoria FROM categoria";
//Executo a query
$query = mysql_query($sql);
//Converto o resource para um array, e percorro esse array
?>
<select name="categorias">
<option value="">SELECIONE</option>
<?php
while($dados = mysql_fetch_array($query)){
$idcat = $dados["idcategoria"];
$cat2 = $dados["nome_categoria"]; // o 2 é pra não sobrescrever o $cat da primeira consulta, que será usado

if ($cat == $cat2) $selected = "selected='selected'"; else $selected = '';

echo '<option value="'.$idcat.'" '. $selected .'> '.$cat2.' </option>';
}
?>
</select>
            <label for="conteudo">Conteúdo: <textarea name="conteudo"><?php echo $cont; ?></textarea></label>
            <input type="hidden" name="id" value="<?php echo $id; ?>" />
            <input type="hidden" name="id" value="<?php echo $dados['idconteudo']; ?>" />
            <button type="submit">ALTERAR</button>
        </form>
</div>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A query enviada é UPDATE conteudo SET titulo = 'QQQQQQQQQQ', autor = 'QQQQQQQQQQQ', conteudo = 'QQQQQQQQQQQQQQQQQ

', idcategoria = 1 WHERE idconteudo = You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desta forma não aparece erro, mas a categoria não é atualizada

 

$sql = "UPDATE conteudo SET titulo = '".$_POST["titulo"]."', autor = '".$_POST["autor"]."', conteudo = '".$_POST["conteudo"]."',   
categoria = '".$_POST["categorias"]."' WHERE idconteudo = '".$_POST["id"]."'";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está vindo o ID para atualizar... Você adicionou um campo hidden, certo? E este campo hidden está recebendo o valor corretamente?

 

Habilite todas as mensagens de erro...

 

ini_set('display_errors', 1); 
error_reporting(E_ALL);

 

Execute novamente e veja se aparece algum outro erro.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Notice: Use of undefined constant noticias - assumed 'noticias' in C:\VertrigoServ\www\noticias\include\conexao.php on line 6

 

Notice: Undefined index: idconteudo in C:\VertrigoServ\www\noticias\atualiza.php on line 39

 

Notice: Undefined index: idconteudo in C:\VertrigoServ\www\noticias\atualiza.php on line 39

 

Notice: Undefined index: idconteudo in C:\VertrigoServ\www\noticias\atualiza.php on line 39

 

Notice: Undefined index: idconteudo in C:\VertrigoServ\www\noticias\atualiza.php on line 39

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora olhe nestas linhas que estão acusando erros.

 

Notice: Use of undefined constant noticias - assumed 'noticias' in C:\VertrigoServ\www\noticias\include\conexao.php on line 6

 

Provavelmente está escrito noticias ao invés de $noticias na linha 6 da página conexao.php

 

Notice: Undefined index: idconteudo in C:\VertrigoServ\www\noticias\atualiza.php on line 39

 

Você está usando um índice que não existe... Na linha 39 da página atualiza.php deve ter algo assim...

 

$id = $_POST['idconteudo'];

Só que não existe este $_POST['idconteudo']. Para ver o que está vindo do $POST, coloque este código no início da página.

 

echo '<pre>';
print_r($_POST);

Vai imprimir tudo que vem do $_POST. Use isto somente para debug. Depois tire.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Após pesquisar em vários sites e pedir ajuda em vários fóruns, acabei danificando totalmente a capacidade edição da página altera.php , agora nem mesmo os outros dados podem ser alterados não sei mais o que fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.