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

Minha página valida.php está assim:

 

<?php
require("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 = ".(int)$_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) 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"]);
}
}

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");
}
}
?>

A página altera.php está 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>

O estranho é que não recebo nenhum aviso de erro, mas nenhum dado é alterado na página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê uma revisada nos posts anteriores...

 

Habilite todas as mensagens de erro, porque aparentemente esta parte do código foi tirada.

 

Tente imprimir as querys antes de executar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Array

(

[titulo] => 111

[autor] => 1111

[categorias] => 1

[conteudo] => 1111

[id] =>

)

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é amigo, está mostrando (já faz um tempo), que o problema é que o ID não está chegando na string.

vamos alterar esta parte:

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) or die(mysql_error());
//Verifico se o registro foi excluído com sucesso
para algo mais legível como:

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
echo $sql;//depois comente esta linha
$query = mysql_query($sql)or die(mysql_error());
//Verifico se o registro foi excluído com sucesso
Este loop é desnecessário:

<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"];
							
	}
?>
retire ele, e deixe assim:

<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, a.idconteudo, 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 guardo em variáveis desnecessariamente
	$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><input type="hidden" name="id" value="<?php echo $dados['idconteudo']; ?>" /></label>
            <label for="titulo">Título: <input type="text" name="titulo" value="<?php echo $dados['titulo']; ?>" /></label>
            <label for="titulo">Autor: <input type="text" name="autor" value="<?php echo $dados['autor']; ?>" /></label>
O 'maior erro', é que no SELECT, você não estava trazendo o id, por isso era impossível preencher o hidden, e ai você não consegue montar a string do UPDATE corretamente.

veja que eu alterei a linha 31

$sql = "SELECT a.titulo, a.autor, a.conteudo, a.idconteudo, 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";

Compartilhar este post


Link para o post
Compartilhar em outros sites

UPDATE `conteudo` SET `titulo` = 'titulo teste11', `autor` = 'autor teste11', `conteudo` = 'conteudo teste

11' 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 3

 

acho que nao deu certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua com o mesmo problema. Não está pegando o id corretamente. Faça o seguinte...

 

A página que tem o form... Troque isto...

 

$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'];

 

Por isto...

 

$dados = mysql_fetch_assoc($query);
echo '<pre>';
print_r($dados);

 

Execute o código. Pegue TODO o html gerado e cole aqui... estou achando que tem outro campo com o nome ID, que está sobrescrevendo o valor.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

<!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">

<h1>Gerenciamento de Conteúdo</h1> <ul id="menu">

<li><a href="insere.php">Inserir Conteúdo</a></li>

<li><a href="lista.php">Listar Conteúdo</a></li>

<li><a href="categoria.php">Inserir Categoria</a></li>

</ul> <h2>Atualiza Conteúdo</h2>

<form id="form" action="valida.php?acao=atualiza" method="post">

<pre>Array

(

[titulo] => titulo teste

[autor] => autor teste

[conteudo] => conteudo teste<BR>

[idconteudo] => 1

[data] => 14/09/2009

[hora] => 21:39:33

[idcategoria] => 2

[nome_categoria] => teste2

)

 

<label><input type="hidden" name="id" value="1" /></label>

<label for="titulo">Título: <input type="text" name="titulo" value="titulo teste" /></label>

<label for="titulo">Autor: <input type="text" name="autor" value="autor teste" /></label>

<label for="titulo">Categoria: <br>

 

<select name="categorias">

<option value="">SELECIONE</option>

<option value="1" > teste </option><option value="2" > teste2 </option></select>

<label for="conteudo">Conteúdo: <textarea name="conteudo"></textarea></label>

 

<input type="hidden" name="id" value="" />

<button type="submit">ALTERAR</button>

</form>

</div>

</body>

</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é rapaz.. retira o ultimo hidden ali!

<input type="hidden" name="id" value="" />
            <button type="submit">ALTERAR</button>
deve ficar somente:

<button type="submit">ALTERAR</button>

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando eu clico em atualizar, tudo atualiza na boa, menos as categorias que continuam as mesmas de antes

 

achei o problema!

 

$sql = "UPDATE `conteudo` SET

`titulo` = '{$_POST['titulo']}', `autor` = '{$_POST['autor']}', `conteudo` = '{$_POST['conteudo']}', `categoria` = '{$_POST['categorias']}'

WHERE `idconteudo` = {$_POST['id']} ";

 

falatava colocar a cvategoria no SQL tambem!! finalmente deu certo! depois de 5 dias intermináveis !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns rapaz! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei ontem a noite e parecia estar tudo certo, mas hoje depois de testar mais a fundo, descobri que não ta funcionando bem. Vamos aos fatos:

 

Eu adiciono 2 categorias: Categoria A e Categoria B

 

Insiro uma uma notícia: Título A, Autor A, seleciono Categoria A e Conteúdo A

 

Até aí tudo bem, ele exibe e altera tudo tranquilamente, o problema acontece quando insiro uma segunda notícia!

Quando vou para a página de edição da segunda notícia e edito os conteudos, os conteudos vao pra id da categoria que foi escolhida. Se eu escolho a categoria A no nos conteudos de id 2, o conteudo todo muda pra ID 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver, agora realmente está tudo funcionando, testei de todas maneiras possíveis. Vou postar a versão final dos arquivos. Abraço!

 

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 
        $idconteudo = $_GET['id'];
                //Conecto ao banco
                include "include/conexao.php";
                //Monto a query
                 $sql = "SELECT a.titulo, a.autor, a.conteudo, a.idconteudo, 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 AND a.idconteudo='$idconteudo'";
        //Executo a query 
        $query = mysql_query($sql); 
        //Converto o resource para um array, e guardo em variáveis desnecessariamente 
        $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><input type="hidden" name="id" value="<?php echo $dados['idconteudo']; ?>" /></label> 
            <label for="titulo">Título: <input type="text" name="titulo" value="<?php echo $dados['titulo']; ?>" /></label> 
            <label for="titulo">Autor: <input type="text" name="autor" value="<?php echo $dados['autor']; ?>" /></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>
            <button type="submit">ALTERAR</button>
        </form>
</div>
</body>
</html>

valida.php

<?php
require("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 = ".(int)$_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']}', `categoria` = '{$_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"]);
}
}

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

×

Informação importante

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