• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

deathseeker25

Passagem de parâmetros para a mesma página

36 mensagens neste tópico

Boas,

O título do tópico não está totalmente especificado, no entanto não sei que outro nome dar a este processo que estou a tentar executar.

Acontece que estou a desenvolver um painel de administração e pretendia que o código ficasse todo apenas numa página. Como sou um novato em php, só conseguiria fazer este painel de administração recorrendo a várias páginas.

Por exemplo, para fazer a função de editar um registo, teria de recorrer a três páginas: uma para mostrar os registos e selecionar o registo que se pretende editar, outra para mostrar o formulário com os dados do registo passíveis de serem editados e outro para finalmente actualizar a base de dados com o novo registo. Considero isto uma má prática, visto que envolve muitos ficheiros, o que dificulta a outros programadores a leitura e compreensão do código, portanto é preferível colocar tudo num ficheiro.

Tentei atingir o objectivo recorrendo a programação funcional (utilizando functions para determinadas tarefas). Já me deram uma ajuda num problema anterior, no qual recorri a uma função para inserir registos na BD através de um formulário, sendo que todo o código ficou colocado na mesma página.

Agora, o que pretendo realmente é editar um registo. Como já referi, poderia fazê-lo recorrendo a três ficheiros de código diferentes, passando parâmetros por url através da utilização do $_REQUEST. Mas pretendo continuar a utilizar programação recursiva e colocar o código todo no mesmo ficheiro, como já repeti.

Vou-vos mostrar o que já desenvolvi, para que percebam o que quero fazer:

function editcode()
{

$ligacao=mysql_connect("$localhost","$utilizador","$password") or die("Impossível ligar ao servidor: ".mysql_error());

$sql="SELECT *FROM codigo";

$resultado=mysql_query($sql,$ligacao);

if($resultado){

	print("<table width=\"90%\" align=center border=0>");
	print("<tr><td width=\"40%\" align=center>Id</td>
			   <td width=\"40%\">Título</td>
			   <td width=\"40%\">Utilizador</td>
			   <td width=\"40%\">Linguagem</td>
			   <td width=\"40%\">Data</td>
			   <td width=\"40%\">Hora</td>");

	while($registo=mysql_fetch_array($resultado)){

		$id=          $registo["id"];
		$codename=    $registo["codename"];
		$utilizador=  $registo["utilizador"];
		$linguagem=   $registo["linguagem"];
		$data=        $registo["data"];
		$hora=        $registo["hora"];

	print("<tr><td align=center><a href=\"editcode.php?id=$id&codename=$codename&utilizador=$utilizador&linguagem=$linguagem&data=$data&hora=$hora\">$id</a></td><td>$codename</td><td>$utilizador</td><td>$linguagem</td><td>$data</td><td>$hora</td>");
	}

	echo "</table>";
	}
	else{

	echo "Não há registos!";
	}

	mysql_close();


?>

Esta é a função que supostamente irá servir para visualizar os registos e escolher um para editar, no caso de querer disponibilizar o código em páginas diferentes. Depois teria de passar os parâmetros desta forma:

<form method="post" action="ficheiro_de_visualizaçao_ dos_registos.php">
Nº de id - <?php echo $_REQUEST['id'];?><br>
<table border=0 width=60%>
<tr><td width=30%>Título - </td>
       <td><input type="text" name="codename" value="<?php echo $_REQUEST['codename'];?>"
</td></tr>
<tr><td width=30%>Utilizador - </td><td><input type="text" name="utilizador" value="<?php echo $_REQUEST['utilizador'];?>>
</td></tr>

etc....
etc...
etc...

E por aí fora para cada um dos campos.

Acontece que pretendo fazer isto no mesmo ficheiro, isto é, passando os dados de outro modo que não por url e indo buscá-los por outro modo que não o $_REQUEST.

Como posso fazê-lo? De acordo com a vossa experiência, de que modo será mais viável fazê-lo? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque não passas uma variável action no url que diz o que queres fazer?

Ou se não queres passar os dados pelo url porque não fazer um form só com inputs do tipo hidden e passá-los por post? Com um bocadinho de javascript à mistura...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não existe nenhum problema em passar os dados pela url.

Eu sei que não. Mas, para o fazer, teria obrigatoriamente de ter mais de um ficheiro de código-fonte. O que eu quero é situar o código todo no mesmo ficheiro, sendo que a passagem de parâmetros teria de decorrer na mesma página.

Porque não passas uma variável action no url que diz o que queres fazer?

Ou se não queres passar os dados pelo url porque não fazer um form só com inputs do tipo hidden e passá-los por post? Com um bocadinho de javascript à mistura...

Podes exemplificar para que se compreenda melhor. Como é que vou buscar os dados de inputs hidden através do $_POST, sem passar os dados por algum lado? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não existe nenhum problema em passar os dados pela url.

Isso não é verdade.

Existe um limite máximo, de 4K creio eu (se estiver errado neste valor, por favor corrijam-me).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Creio que a solução para o teu problema está no uso de sessões.

Se não queres passar os valores por URL, podes guardá-los numa sessão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A maioria dos script passam dados pela url, não vai ser o script pequeno que ele está a criar que vai passar o limite de 4k que tu dizes.

Guardar em sessões os dados de um input não é uma boa alternativa para o que ele quer fazer e não é seguro colocar dados em sessões ou cookies.

A melhor alternativa para o que ele quer é passar pela url ou por hidden como disse o TheDark

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Creio que a solução para o teu problema está no uso de sessões.

Se não queres passar os valores por URL, podes guardá-los numa sessão.

Parece então que vou ter de aprender a trabalhar com sessões, para este caso. Já o teria de fazer para coisas que vou fazer a seguir neste mesmo script, pelo que me adianto já com o painel de administrador. ;)

Guardar em sessões os dados de um input não é uma boa alternativa para o que ele quer fazer e não é seguro colocar dados em sessões ou cookies.

Não é seguro como?! É mais seguro passar dados pelo url do que guardá-los em sessões? Porque razão?

A melhor alternativa para o que ele quer é passar pela url ou por hidden como disse o TheDark

A questão da passagem por hidden intrigou-me bastante, mas nunca fiz tal coisa pelo que gostava sinceramente de ver um exemplo do método. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A maioria dos script passam dados pela url, não vai ser o script pequeno que ele está a criar que vai passar o limite de 4k que tu dizes.

Não disse que neste caso particular não fosse uma boa solução, apenas referi que, ao contrário do que afirmavas, existe um problema/limitação técnica com a passagem de dados por URL.

Guardar em sessões os dados de um input não é uma boa alternativa para o que ele quer fazer e não é seguro colocar dados em sessões ou cookies.

Explica-me lá porque é que para o que o deathseeker25 quer fazer as sessões não são uma boa alterantiva.

Quanto à segurança, usar cookies ou sessões é mais seguro do que passar os dados no URL onde toda a gente os vê.

Mais, ainda nas sessões não tens de usar a sessão do browser, podes usar outras técnicas/implementações de sessões.

A melhor alternativa para o que ele quer é passar pela url ou por hidden como disse o TheDark

É uma boa alterantiva, se é a melhor, depende das necessidades do deathseeker25.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

[...]

A questão da passagem por hidden intrigou-me bastante, mas nunca fiz tal coisa pelo que gostava sinceramente de ver um exemplo do método. ;)

Não tem nada de mais, é como um campo de texto normal <input type="text" value="valor"...> mas que está escondido para o utilizador <input type="hidden" value="valor"...>.

De resto é igual a qualquer outro campo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele não quer usar na url porque ele acha que é menos seguro.  O metodo que ele está a usar na form é  "POST" por isso os dados não vão para a url e não é a mesma coisa... pela url o metodo "GET".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A questão da passagem por hidden intrigou-me bastante, mas nunca fiz tal coisa pelo que gostava sinceramente de ver um exemplo do método. ;)

a form é normal só muda o type no input exemplo:

<input type="hidden" name="exemplo" value=""> 

Em relação as sessões pensei que já soubesses que as sessões podem ser atacas pela url se não forem bem utilizadas, mas se quiseres utilizar podes uiliizar só dei a minha opinião.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele não quer usar na url porque ele acha que é menos seguro.

Se a questão é segurança, então o melhor será usar SSL.

O metodo que ele está a usar na form é  "POST" por isso os dados não vão para a url e não é a mesma coisa... pela url o metodo "GET".

Não consegui perceber o que querias dizer, em especial na última frase que não me parece fazer qualquer sentido...

O POST e o GET funcionam de forma distinta, isso é um facto, mas as suas diferenças vão bem mais além do simples facto dos parametros fazerem, ou não, parte do URL.

Além disso, parece que a solução vai acabar por passar pelo uso de sessões por outras razões que não este ponto em particula que aqui estamos a discutir...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não consegui perceber o que querias dizer, em especial na última frase que não me parece fazer qualquer sentido...

O POST e o GET funcionam de forma distinta, isso é um facto, mas as suas diferenças vão bem mais além do simples facto dos parametros fazerem, ou não, parte do URL.

Não vamos andar aqui a dizer todas as diferenças lol por isso só falei da url.

Além disso, parece que a solução vai acabar por passar pelo uso de sessões por outras razões que não este ponto em particula que aqui estamos a discutir...

Acho qeu também vai acabar em sessões... Mas eu preferia passar os dados pela url.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não consegui perceber o que querias dizer, em especial na última frase que não me parece fazer qualquer sentido...

O POST e o GET funcionam de forma distinta, isso é um facto, mas as suas diferenças vão bem mais além do simples facto dos parametros fazerem, ou não, parte do URL.

Não vamos andar aqui a dizer todas as diferenças lol por isso só falei da url.

Além disso, parece que a solução vai acabar por passar pelo uso de sessões por outras razões que não este ponto em particula que aqui estamos a discutir...

Acho qeu também vai acabar em sessões... Mas eu preferia passar os dados pela url.

Tipicamente opta-se por POST ou GET, mas nem sempre é a melhor solução.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Considero isto uma má prática, visto que envolve muitos ficheiros, o que dificulta a outros programadores a leitura e compreensão do código, portanto é preferível colocar tudo num ficheiro.

Isto é completamente errado!!!

Existem mesmo muitos utilitários que após um projecto acabado, imaginemos um programa em C, com 60 000 de code

permitem facilmente dividir por vários ficheiros para melhor percepção do que faz, depois é só escrever um pequeno relatorio a descrever o objectivo de cada ficheiro para se no futuro se pegar de novo no projecto.

Além de dividir em vários ficheiros também dividir o código em várias funções isto é de forma modular.

passando parâmetros por url através da utilização do $_REQUEST

usa o $_GET ao invés do $_REQUEST

o $_REQUEST é uma estupidez de todo o tamanho existir, visto que é um array com os dados de $_GET, $_POST e $_COOKIE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o $_REQUEST é uma estupidez de todo o tamanho existir, visto que é um array com os dados de $_GET, $_POST e $_COOKIE

Não entendi essa parte do  $_REQUEST ser um array com os dados de $_GET, $_POST e $_COOKIE.

Podes explicar melhor ? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o $_REQUEST permite aceder tanto a valores do $_GET, $_POST ou $_COOKIE

basicamente é uma grande açorda!

é uma estupidez usar e penso que foi mesmo descontinuado apartir de uma certa altura em algumas versões de PHP

existe um POST sobre o assunto no forum

http://www.portugal-a-programar.pt/index.php?showtopic=2911

basicamente se não tens a certeza se um dado valor é dado por preenchimento de uma form ou através da URL, basta usares o isset para verificar qual deves usar.

usar o $_REQUEST é muito mau também para a legibilidade do código fonte, pois a primeira vista não consegues perceber de "onde vêm as coisas".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Considero isto uma má prática, visto que envolve muitos ficheiros, o que dificulta a outros programadores a leitura e compreensão do código, portanto é preferível colocar tudo num ficheiro.

Isto é completamente errado!!!

Existem mesmo muitos utilitários que após um projecto acabado, imaginemos um programa em C, com 60 000 de code

permitem facilmente dividir por vários ficheiros para melhor percepção do que faz, depois é só escrever um pequeno relatorio a descrever o objectivo de cada ficheiro para se no futuro se pegar de novo no projecto.

Além de dividir em vários ficheiros também dividir o código em várias funções isto é de forma modular.

passando parâmetros por url através da utilização do $_REQUEST

usa o $_GET ao invés do $_REQUEST

o $_REQUEST é uma estupidez de todo o tamanho existir, visto que é um array com os dados de $_GET, $_POST e $_COOKIE

Portanto,  recomendas mesmo o uso de vários ficheiros para uma acção qualquer..

Sempre achei que muitos ficheiros só fariam com que o utilizador tivesse mais dificuldade em ler e compreender o código... :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só para esclarecer em relação ao hidden...

A ideia é criar algo deste genero:

<input name="accao1" type="button" value="acção:editar, nome:manel, apelido:papagaio" onclick="send('editar', 'manel', 'papagaio');">
<input name="accao2" type="button" value="acção:apagar, nome:josefino, apelido:rococó" onclick="send('apagar', 'josefino', 'rococó');">
<input name="accao3" type="button" value="acção:inventar, nome:martelo, apelido:farinha amparo" onclick="send('inventar', 'martelo', 'farinha amparo');">

<form enctype="text/plain" action="file.php" id="form1" method="post">
<input type="hidden" name="accao" value="">
<input type="hidden" name="nome" value="">
<input type="hidden" name="apelido" value="">
</form>

e um script deste:

<script type="text/javascript">

function send(accao, nome, apelido) {
form1=document.getElementById("form1");

form1.accao.value=accao;
form1.nome.value=nome;
form1.apelido.value=apelido;

form1.submit();

}

</script>

Não testei... mas isso deve funcionar... ou se não funcionar vai lá com algumas pequenas alterações... acho eu... 8-)

EDIT Acabei de testar e parece que acertei à 1ª :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o $_REQUEST permite aceder tanto a valores do $_GET, $_POST ou $_COOKIE

basicamente é uma grande açorda!

é uma estupidez usar e penso que foi mesmo descontinuado apartir de uma certa altura em algumas versões de PHP

existe um POST sobre o assunto no forum

http://www.portugal-a-programar.pt/index.php?showtopic=2911

basicamente se não tens a certeza se um dado valor é dado por preenchimento de uma form ou através da URL, basta usares o isset para verificar qual deves usar.

usar o $_REQUEST é muito mau também para a legibilidade do código fonte, pois a primeira vista não consegues perceber de "onde vêm as coisas".

Eu pensava que era só um array de $_GET ... Mas estava errado, eu aprendo algo todos os dias :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já me deram várias possibilidades.

Obrigado a todos pelas ajudas. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

kingless aprendemos todos :P

deathseeker25 normalmente o que faço é:

tenho um file index.php, que tem a estrutura do site e recebe por URL

?file=nome.php

se file for nulo (verifico com isset)

faço load da page por defeito

senão faço load da page file com require

a diferença entre estar tudo num file ou em muitos files

é por exemplo estas a analisar o code, é muito simples ter os ficheiros pequenos com nomes que explicitem o que fazem

(nao pode ser untitled1 untitled2 ...)

é mais facil corrigir as coisas, é mais facil readaptares pedaços de code para futuros projectos

imagina um sistema de login todos os ficheiros com o nome login-*.php

é simples usar noutro projecto, agora imagina td numa page! andar a copiar colar de um lado para o outro, além do mais fazer td num ficheiro é muito exigente a nivel de programação

eu no meu ultimo trabalho para uma empresa ( www.stains.pt ) tinha na area de revendedor estilo um carrinho de compras

constituido por 3 passos

1º form - selecionar os produtos dentro de uma lista (uso checkbox)

2º form - preencher quantidades (ao carregar no botao é calculado os preços por produto e total)

3º form - data de entrega pretendida

4º form - guia de remessa da encomenda e se pretende finalizar a encomenda

isto tudo ultrapassou as 1000 linhas, os files .PHP sao mais de 100 e mais de 1MB so de code

imagina isso tudo num file

andava a procura "horas" do que queria

simplesmente tenho um relatorio um printscreen dos ficheiros no explorador do w$

e umas setas a explikar o que cada um faz :P

resumindo e concluindo, se te queres gabar que perceber muito faz tudo num file, se queres uma coisa com pés e cabeça e para no futuro voltar a pegar faz de forma estruturada em vários ficheiros, funçoes que uses muito ao longo do site, poe numa dir estilo funcoes, em files a parte.

espero ter ajudado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

claro que nao dividir 20 linhas de code, por 20 ficheiros

têm que existir bom senso

já agora uma funçao deve ter um unico objectivo

ex: dado 2 numeros devolver a soma de ambos e a multiplicaçao

podes usar uma funçao que faz tudo, mas o ideal é usar 2

Funções:

- uma função (como o seu nome indica) deve realizar uma única tarefa bem definida;

- uma função acima de tudo deve devolver os resultado esperados;

- o código de uma função deve ser o mais independente possível do programa;

- uma função pode receber parametros de forma a adaptar-se a diferentes situações;

- uma função pode retornar um valor como resultado do seu trabalho.

Divisão de um projecto por ficheiros

Em vez de termos um ficheiro de 999999 linhas temos 8/9 ficheiros cada um com código especifica que resolve um determinado problema. O nome dos ficheiros devem dar a entender o que fazem. Devem possuir um cabeçalho com uma descrição do que fazem, data da última alteração e autor.

Vantagens:

Imaginemos uma aplicação de facturação, queremos fazer uma mudança pequena em vez de abrirmos um ficheiro enorme com NNNNN linhas abrimos o indicado localizamos a 'rotina' em questão e mudamos.

Em projectos em que várias pessoas estao a trabalhar permite dividir melhor o trabalho por todos.

Permite salvaguardar o código-fonte total do resto da equipa, cada pessoa só tem acesso a sua parte.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O entering tem razão... é preferivel colocar-se o código em mais ficheiros do que colocar em um só ficheiro, porque para além de poder ter muitas bugs e facilitar ataques quando precisares de modificar uma parte do código vais andar um monte tempo a procura do que tu queres.

Eu quando não sabia muito bem php eu colocava em um só ficheiro o código do script (para tentar evitar que me  modificassem o código) mas  nunca resultou, para dificultar a modificação do código é sempre melhor criar muitos ficheiros e fazer include e require entre eles.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora