Jump to content
Sign in to follow this  
Luisinhoc

php + mysql

Recommended Posts

Luisinhoc

<?php
$con = mysql_connect("localhost","user","pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("mydb", $con);
$term = $_POST['term'];
$result = mysql_query( "select * from ppasso where ass = '%$term%' " );
$res = mysql_fetch_array( $result );
if ( $res['term'] == " " ){
echo "Não existe no banco";
}else{
echo "existe no banco";
}

?>

<html>
<body bgcolor="#F0F0F0">

<table border="1">
<tr>
<th>Secção</th>
<th>Data</th>
</tr>
<tr>

<td rowspan="5"><?php
$con = mysql_connect("localhost","usert","pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("mydb", $con);
$term = $_POST['term'];

$sql = mysql_query("select a.secc from arquivado as a, ppasso as pp where pp.id=a.IDPP 
");
if(!$sql){
die('<p> error performing query: '. mysql_error() . '</p>');
}
while ($row = mysql_fetch_assoc($sql))
{
    printf("%s <br />", $row['secc']);
}
mysql_close($con);?></td>

<td rowspan="6"><?php
$con = mysql_connect("localhost","user","pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("mydb", $con);
$term = $_POST['term'];

$sql = mysql_query("select a.dat from arquivado as a, ppasso as pp where pp.ass like '%$term%'
");
if(!$sql){
die('<p> error performing query: '. mysql_error() . '</p>');
}
while ($row = mysql_fetch_assoc($sql))
{
    printf("%s <br />", $row['dat']);
}
mysql_close($con);?></td>

</tr></table>

alguem me pode ajudar nisto? os resultados nao aparecem :S

Share this post


Link to post
Share on other sites
KTachyon

Mete isso dentro das tags para ser mais legível.

O que é que aparece ao certo? Despeja printfs ao longo do código e vê por onde é que não passa.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Luisinhoc

como assim tags? :S

o código está assim mesmo.. só no fim é que falta o </body> e o </html>

copiei só a parte que não estava a dar que é essa, tenho uma tabela principal que é a ppasso, na arquivado está a referência da primary key da tabela ppasso...

por exemplo:

- insiro os dados na tabela ppasso, e depois tem uma coluna que é a 'fini' que selecciono ou 'enviado' ou 'arquivado', a partir dessa opção escolhida é que vou validar se é para inserir o resto dos dados ou na tabela enviado ou arquivado.

suponhamos que escolho a opção arquivar, o resto dos dados vão para a tabela arquivado.

table ppasso(

ID int primary key auto_increment unique,

ass varchar(100) not null,

fini varchar(30) not null

)

table arquivado(

IDarq int primary key auto_increment,

dat date not null,

secc varchar(50) not null,

IDPP int not null references ppasso(ID)

on update cascade

on delete cascade

)

depois para ver os dados que pertencem ao arquivo selecciono a tabela ppasso mais a tabela arquivado e faço um where para validar a opcao escolhida ou seja,

select * from ppasso as pp, arquivado as a where pp.fini like 'arquivado'

aqui tudo bem imprime os dados todos,

no entanto fiz uma form de pesquisa de dados que esteja disponiveis nas tabelas, esta form pesquisa somente arquivos,

inserindo o assunto que quero ver

<form action="searcharquivos.php" method="post">

<label STYLE="color: darkred; font-family: comic; font-weight: bold; font-size: 15px;">Procurar Arquivos:</label>

<input type="text" size="50"  name="term" required="required"></input><br/>

    <input type="submit" name="submit" value="Submit" ></input>

    </form>

agora através dessa pesquisa quero mostrar todos os dados que estejam na tabela ppasso e na tabela arquivado, referentes a esse assunto que inseri na form de pesquisa,

select * from ppasso as pp, arquivado as a where pp.ass like '$_POST[term]'

aí é que dá erro... desculpe o grande texto... mas se continuar a ser dificil perceber posso mandar-lhe os ficheiros em .zip ou .rar

Share this post


Link to post
Share on other sites
KTachyon

mysql_query( "select * from ppasso where ass = '%$term%' " );

Estás a utilizar um igual com wildcards nesta linha.

mysql_query("select a.dat from arquivado as a, ppasso as pp where pp.ass like '%$term%'");

Nesta linha não estabeleces a relação entre as tabelas a que estás a fazer join:

mysql_query("select a.dat from arquivado as a, ppasso as pp where pp.id = a.IDPP AND pp.ass like '%$term%'");


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Luisinhoc

já modifiquei isso tudo :S.... na form de pesquisa por arquivos insiro o assunto que quero ver, retorna-me vários dados, da tabela ppasso e da tabela arquivado, só que em vez de me mostrar só os dados referentes ao assunto que procuro, aparece-me todos os dados que foram inseridos na tabela arquivado.... fiz assim:

<td rowspan="6">
			<?php
				$con = mysql_connect("localhost","root","pass");
				if (!$con)
				{
				  die('Could not connect: ' . mysql_error());
				}

				mysql_select_db("mydb", $con);
				$term = $_POST['term'];

				$sql = "select secc from arquivado inner join ppasso on arquivado.idarq=ppasso.id
                                        where ppasso.ass like   '%$term%' ";


				$result = mysql_query($sql);
				if(!$result)
				{
					die('<p> error performing query: '. mysql_error() . '</p>');
				}
				while ($row = mysql_fetch_assoc($result))
				{
					printf("%s <br />", $row['secc']);
				}
				mysql_close($con);
			?>
</td>

Share this post


Link to post
Share on other sites
KTachyon

Tens "arquivado.idarq=ppasso.id", mas a chave da tabela 'arquivado' que referencia a 'ppasso' não é a IDarc, mas sim a IDPP.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Luisinhoc

pois mas quando meto IDPP no lugar de IDarq o resultados desaparecem :S

Share this post


Link to post
Share on other sites
KTachyon

Pah, só se a tua base de dados não está a ser bem construída. IDarq é a chave primária da tabela 'arquivado', não pode estar a referenciar um 'ppasso'. Na query de construção da tabela tens mesmo:

IDPP int not null references ppasso(ID)


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Luisinhoc

exato, eu antes fazia dessa maneira, igualava com a IDPP, mas não estava a dar nada e então experimentei fazer join com o idarq e deu :S e agora é isso que expus. as tabelas estão assim

create database mydb;
use mydb;

create table ppasso(
ID int primary key auto_increment unique,
ref varchar(100) not null,
dataen date not null,
datacorr date not null,
rem varchar(100) not null,
entaqm varchar(50) not null,
ass varchar(100) not null,
obs varchar(100) not null,
fini varchar(30) not null
);

create table enviado(
IDenv int primary key auto_increment,
datasai date not null,
destin varchar(100) not null,
modo varchar(50) not null,
IDPP int not null references ppasso(ID)
on update cascade
on delete cascade
);

create table arquivado(
IDarq int primary key auto_increment,
dat date not null,
porqm varchar(50) not null,
secc varchar(50) not null,
IDPP int not null references ppasso(ID)
on update cascade
on delete cascade
);

Share this post


Link to post
Share on other sites
KTachyon

Sim, mas o JOIN só funciona correctamente se ligares a variável que referencia à chave primária da outra tabela.

Por exemplo, imagina que tens 3 entradas na tabela ppassos (a coluna nome é só para servir de exemplo):

ID   nome
1    A
2    B
3    C

E três entradas na tabela arquivos, cuja 3ª coluna é o IDPP:

IDarq nome IDPP
1     X    2
2     Y    3
3     Z    1

Ou seja,

Z -> A
X -> B
Y -> C

Mas se fizeres essa query, o que vais obter é:

X -> A
Y -> B
Z -> C

Porque estás a associar as chaves primarias das tabelas e não a chave estrangeira.

EDIT:

Um exemplo melhor: http://www.w3schools.com/sql/sql_join_inner.asp


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Luisinhoc

Ou seja qual é o problema de não estar a aparecer os resultados certos? :S

Share this post


Link to post
Share on other sites
KTachyon

Isso, sim, é uma boa pergunta. Experimenta imprimir os resultados que tens nas tabelas e ver se as referências para a tabela 'ppassos' estão correctas. Podes sempre fazer um join para ver que entradas na tabela 'arquivados' estão ligadas às entradas da tabela 'ppassos':

SELECT ppassos.ID, arquivados.IDarq FROM ppassos, arquivados WHERE ppassos.ID = arquivados.IDPP;


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Luisinhoc

fiz esse código que mandaste no mysql.exe e apareceu...... empty set :S

Share this post


Link to post
Share on other sites
KTachyon

Pronto, aí tens a resposta. As entradas não estão a ser bem referenciadas :)

Imprime as duas tabelas e vê o que dá. Mais específicamente, vê o que é que está a ser colocado na coluna IDPP da tabela arquivos:

SELECT IDPP FROM arquivos


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Luisinhoc

fiz isso e apareceu as 5 rows que eu já inseri mas todas com o numero 0 :S

Share this post


Link to post
Share on other sites
KTachyon

Pronto, basicamente é esse o problema. Elas estão a ser inseridas sem referência para uma entrada na tabela ppassos, o que não pode acontecer.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Luisinhoc

Vamos ver se percebi lol,

as tabelas em si estão certas certo?

o que está mal é o código php quando peço para inserir nas tabelas é isso? :S

Share this post


Link to post
Share on other sites
Luisinhoc

e se eu fizesse uma tabela associativa para as 3 tabelas que tenho?

tipo

create table ppae(
idppasso int references ppasso(id),
idarquivado int references arquivado(idarq),
idenviado int references enviado(idenv),
primary key(idppasso,idarquivado,idenviado)
)

??

Share this post


Link to post
Share on other sites
KTachyon

Vamos ver se percebi lol,

as tabelas em si estão certas certo?

o que está mal é o código php quando peço para inserir nas tabelas é isso? :S

Sim.

e se eu fizesse uma tabela associativa para as 3 tabelas que tenho?

tipo

create table ppae(
idppasso int references ppasso(id),
idarquivado int references arquivado(idarq),
idenviado int references enviado(idenv),
primary key(idppasso,idarquivado,idenviado)
)

??

Se o objectivo é teres relações 1:N, é má prática utilizares uma tabela que permite criar relações N:N.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.