Forum Pplware

Versão Completa: INSERT PHP
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Boa tarde,criei um forum que mostra todos os posts do utilizador com sessao iniciada.
cada post tem um "editar" correspondente ao id da publicação o qual posso editar esse mesmo post num form fazendo um update (em que  se vier um id pelo url, mostra o botao "editar")... .

Caso eu queira inserir um novo post, basta clicar num botao para criar um novo post, o qual me mela para o mesmo form,onde verifico se nao vier nu«enhum id pela url, os campos desse form ficam vazios, a espera de serem preenchidos para eu fazer um insert......porem QUANDO TENTO FAZER O INSERT, NENHUM NOVO POST É INSERIDO.....SOMENTE O UPDATE FUNCIONA......ALGUEM PODE VER SE O MEU SCRIPT DE INSERT TEM ALGUMA FALHA POR FAVOR?

<?php
include 'base_dados/ligacao_bd.php';

session_start();

 //se nao houver nenhuma sessão...
 if(!isset($_SESSION['nome_utilizador']))
 {
include 'cabecalho.php';
 
echo '<div class="erro">  
nao tem autorização para ver esta pagina. <br> <br>
<a href="index.php">retroceder</a>
</div>';
 
include 'rodape.php';  

exit;//muito importante este EXIT; pois ja nao deixa executar nada mais abaixo
 }
//-----------------------------------------------------------------------

include 'cabecalho.php';

//apresentar o utilizador logado
$mostrar_utilizador = $ligacao->query("SELECT * FROM utilizadores WHERE nome_utilizador = '".$_SESSION['nome_utilizador']."' ");
$mostrar = mysqli_fetch_array($mostrar_utilizador);



echo '<div class="dados_utilizador">
<img src="imagens/avatares/'.$mostrar['avatar'].'"    title="foto de perfil de '.$_SESSION['nome_utilizador'].'"  ><span>'.$_SESSION['nome_utilizador'].'</span> | <a href="logout.php">sair</a>
</div> <hr>';

?>



<!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" />
<title>Editor publicação</title>
</head>

<body>

<?php

$id_publicacao = @$_GET['id_publicacao'];
$titulo = "";
$mensagem = "";

if(isset($_GET['id_publicacao']))//se vier um id pela url...
{
//vai buscar os dados da publicação á base dados correspondente a esse id_publicacao e mostra-os!
$buscar_dados = $ligacao->query("SELECT * FROM publicacoes WHERE id_publicacao = ".$id_publicacao." ");
$mostrar = mysqli_fetch_array($buscar_dados);


$titulo = $mostrar['titulo'];
$mensagem = $mostrar['mensagem'];
}

elseif (isset($_POST['botao_editar']))
{

$alterar = $ligacao->query("UPDATE publicacoes SET titulo = '".$_REQUEST['text_titulo']."' , mensagem = '".$_REQUEST['text_mensagem']."' WHERE id_publicacao = '".$id_publicacao."' ")or die(mysql_error());


elseif (isset($_POST['botao_gravar']))
{

$titulo = $_POST['text_titulo'];
$mensagem = $_POST['text_mensagem'];

$inserir = $ligacao->query("INSERT INTO publicacoes(id_utilizador,titulo,mensagem,data) VALUES('".$_SESSION['id_utilizador']."','$titulo','$mensagem','NOW()' ) WHERE id_utilizador = '".$_SESSION['id_utilizador']."'   ")or die(mysql_error());
}

?>


<!--formulario para criar/editar publicação-->
<form class="form_publicacao" method="post" action="?">

<h3>publicação</h3> <hr /> <br />

<label for="title">Titulo</label> <br />
<input type="text" id="title" name="text_titulo" size="50" value="<?php echo $titulo ?>"  /> <br /> <br />

<label for="msg">Mensagem</label> <br />
<textarea id="msg" name="text_mensagem" rows="10" cols="97"><?php echo $mensagem ?></textarea> <br /> <br />

<input type="hidden" name="id_utilizador" value="<?php echo $_SESSION['id_utilizador'] ?>" />
<input type="hidden" name="id_publicacao" value="<?php echo $id_publicacao ?>"  />

<?php
if(isset($_GET['id_publicacao']))
{
?> 
<input type="submit"  name="botao_editar" value="editar" />  
<?php
}
else
{
?>
<input type="submit"  name="botao_gravar" value="gravar" />
<?php
}
?>
 


</form>



</body>
</html>

BASE DADOS (PUBLICACOES):

ID_PUBLICACAO
ID_UTILIZADOR
TITULO
MENSAGEM
DATA
O teu problema parece estar no facto de no query de insert teres 

Código:
WHERE id_utilizador = '".$_SESSION['id_utilizador']."

Retira isso e já deve dar.
Concordo. 
Sem dúvida que passar por parametro o utilizador verdadeiro é sempre uma falha grave de segurança.
Nesse caso facilmente de descobre, vendo o código fonte HTML, que colocando o parametro id_utilizador é passado e facilmente podem tentar colocar por tentativas diferentes [font=Verdana, Arial, sans-serif]id_utilizador no endereço para descobrir acertar num e entar.[/font]
O que influencia o mau funcionamento, ou o NÃo funcionamento da query, não é o facto de estares a passar o parametro dentro da query(apesar de ser fortemente desaconselhado) não iria prejudicar a query, o que não funciona é teres a clausula WHERE num INSERT. Iria funcionar se estivesses a fazer  um UPDATE, mas como não é o caso, basta retirares essa última parte da Query.
URL's de Referência