View Full Version : O que há de errado neste código?


wrproject
18-07-2007, 14:36
Boas, eu tenho o seguinte problema neste código.
<?php
include "conecta.php";
$user=$_GET["user"];
$data=date("d/m/y");
$hora=date("H:m:s");
$tema=$_POST["titulo"];
$mensagem=$_POST["mensagem"];
echo $user;
$sql="insert into topico(autort,temat,datat,horat)
values('$user','$tema','$data','$hora')";
$r1=mysql_query($sql);

$sql3="select MAX(id) from topico";
$id=mysql_query($sql3);

$sql2="insert into mensagem(autorm,mensagem,idm,datam,horam)
values('$user','$mensagem',$id,'$data','$hora')";
$r2=mysql_query($sql2);



echo "topico inserido";
?>1º a variavel hora ao receber a data, recebe sempre 15:07:05, ou seja, só muda os segundos, 2º O meu objectivo é que depois de a sentença sql ser executada na variavel r1, queria que ele pegasse o ultimo id e a guardase na variavel $id, só que depis de ser executada todo o codigo, o campo idm da tabela mensagem aparece sempre o valor 0, enquanto o id do campo topico vai mudando.
o qué que posso fazer para que á variavel $id receba o ultimo id?
Cumps

p3dro
18-07-2007, 14:54
para saberes o ultimo id inserido podes usar o mysql_insert_id (http://pt2.php.net/mysql_insert_id)

no teu caso seria, algo deste tipo:

$sql="insert into topico(autort,temat,datat,horat) values('$user','$tema','$data','$hora')";
$r1=mysql_query($sql);
$id=mysql_insert_id($r1);

tu ao fazeres isto
$sql3="select MAX(id) from topico";
$id=mysql_query($sql3);

só estás a fazer a query à tabela, n estás a ir buscar o valor, tinha depois de fazer o mysq_fetch_array

$sql2="insert into mensagem(autorm,mensagem,idm,datam,horam)
values('$user','$mensagem',$id,'$data','$hora')";
$r2=mysql_query($sql2);

acho k tens de colocar o $id entre plicas (não tenho a certeza pk smp usei as plicas :-D)


$hora=date("H:m:s");
estás a obter mal os minutos, deveria ser:
$hora=date("H:i:s");

msdevweb
18-07-2007, 17:13
Bem, para receberes o ultimo id se o MAX insistir em nao funcionar, faz

$slq="SELECT * FROM `topico` ORDER BY `id` DESC LIMIT 1"; //para retrornar apenas o ultimo.

$res=mysql_query($sql) or die("ERRO");

$dados=mysql_fetch_array($res);

$id=dados['id'];

//feito :)

Quanto ao resto, deves ter reparado que uso sempre os caracteres `` quando me refiro a titulos da bd. e tb uso \"$dado_a_inserir\" quando insiro algo na BD. Acho que devias fazer o mesmo, poupa-te muitos erros e dores de cabeças e o codigo fica menos confuso.

Exmplo em parte do teu codigo:

£sql2="INSERT INTO `mensagem` (`autorm`, `mensagem`, `idm`, `datam`, `horam`)
VALUES(\"$user\", \"$mensagem\", \"$id\", \"$data\", \"$hora\")";



Assim fica tudo mais bonitinho, e poupa-te bastantes erros....

Refaz o teu codigo assim... e talvez funcione tudo à primeira :)