Jump to content


Photo

[resolvido] - Problemas Com Variaveis Globais No Php5


  • Faça o login para participar
6 replies to this topic

#1 alexpfo

alexpfo

    Turista

  • Usuários
  • 41 posts
  • Sexo:Masculino
  • Localidade:Passo Fundo - RS
  • Interesses:Clientes para desenvolvimento de sites e parcerias.

Posted 18/08/2008, 16:22

gostaria de saber se existe uma forma de trabalhar com ambos sem dar algum problema ao receber a variavel da url. exemplo:


Antes com PHP 4 usava o codigo da seguinte maneira:

<?
switch($pg)
{
	case 'home'	 :	 include("home.php");
	break;

	case 'teste'	  :	include("teste.php");
	break;
}
?>


no PHP 5 tenho que usar assim:

<?
switch($_GET[pg])
{
	case 'home'	 :	 include("home.php");
	break;

	case 'teste'	  :	include("teste.php");
	break;
}
?>


O problema e que se eu receber um dado de um formulario a função que antigamente usava em php 4, não irá funcionar, pois teria que colocar $_POST usando os dois no script tbm não dá certo, pois ele se perde.


tem uma maneira de resolver isto.


Obrigado.

Edição feita por: alexpfo, 22/08/2008, 16:08.
Adicionado a tag [code]/[codebox] para melhor visualização do código-fonte.


#2 lwirkk

lwirkk

    Veterano

  • Usuários
  • 1314 posts
  • Sexo:Não informado

Posted 18/08/2008, 16:35

Ativando REGISTER GLOBALS?
Por que se pegar um dado post, somente com $nome_var além de talvez uma brecha na segurança, se alguém postar estes dados de outra forma seu script poderia não funcionar como você desejado...

E por que não usa mesmo $_POST? (Não entendi muito bem por que não...)
Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#3 alexpfo

alexpfo

    Turista

  • Usuários
  • 41 posts
  • Sexo:Masculino
  • Localidade:Passo Fundo - RS
  • Interesses:Clientes para desenvolvimento de sites e parcerias.

Posted 18/08/2008, 16:45

Ativando REGISTER GLOBALS?
Por que se pegar um dado post, somente com $nome_var além de talvez uma brecha na segurança, se alguém postar estes dados de outra forma seu script poderia não funcionar como você desejado...

E por que não usa mesmo $_POST? (Não entendi muito bem por que não...)



BOm seria assim se eu abrir usando um link assim: <a href="?pg=home">Link Home</a>, teria que usar $_GET[pg].

Agora se eu passar a variavel por um form usando: <input type="hidden" name="pg" value="home">, não daria certo.

isto acima é um exemplo, como meu servidor on-line não permite mudar o register global, tenho que usar as novas formas de programação.


Eu susava o sistema dos inputs hidden na programação do sistema de admin, assim depois de incluir ou editar uma informação automaticamente passava o switch que queria e chamava a página listar os dados que já estavam incluidos.


Abaixo postarei dos modelos de script que uso para incluir/editar e como funcionam no sistema antigo:

Script das ações acao.php
<?	if($acao == 'excluir')	{		$dbq=$db->execute("SELECT * FROM tab_secoes WHERE sec_id='$id'");		$cam = '$system_directory/images/secao/'.$dbq->fields["sec_image"];		if (file_exists($cam))			$delete = unlink($cam); 				$sql = "DELETE FROM tab_secoes WHERE sec_id='$id'";		$db->execute($sql);		if(!$db->errorMsg())		{			$db->execute("OPTIMIZE TABLE tab_secoes");			$db->execute("REPAIR TABLE tab_secoes");			?>			<script language="JavaScript">			alert("Registro foi Deletado!!")			</script>			<?		}		else		{			echo $db->errorMsg();			$db->execute("OPTIMIZE TABLE tab_secoes");			$db->execute("REPAIR TABLE tab_secoes");			include("secaolst.php");		}	}		$a = 0;	if($acao == 'incluir')	{		$copia = copy($file, "$system_directory/images/secao/$file_name");		if(!$copia)			$file_name='';				$dba = $db->execute("INSERT INTO tab_secoes (sec_nome,sec_image) VALUES ('$sec_nome','$file_name')");		if($dba)		{			$a = 1;		}		else		{			$a = 3;		}	}	if($acao == 'editar')	{		if($file)		{			$copia = copy($file, "$system_directory/images/secao/$file_name");			$sql = "UPDATE tab_secoes SET sec_image='$file_name' WHERE sec_id='$id'";   			$dbq = $db->execute($sql);		}				$dba = $db->execute("UPDATE tab_secoes SET sec_nome='$sec_nome' WHERE sec_id='$id'");		if($dba)		{			$a = 2;		}		else		{			$a = 3;		}	}			if((!$submenu) || ($submenu == 'listar'))		include("secaolst.php");	if($submenu == 'incluir')		include("secaoedt.php");	if($submenu == 'editar')		include("secaoedt.php");?>

Script de do form incluir/editar:
<table width="625" border="0" cellspacing="0" cellpadding="0">  <tr>    <td><table width="100%" border="0" cellspacing="0" cellpadding="0">      <tr>        <td width="5"><img src="../img/main_r14_c8.jpg" width="5" height="29"></td>        <td align="center" valign="middle" background="../img/main_r14_c11.jpg" class="admsubmenu">Cadastro das Se&ccedil;&otilde;es</td>        <td width="5"><img src="../img/main_r14_c15.jpg" width="5" height="29"></td>      </tr>    </table></td>  </tr>  <tr>    <td>&nbsp;</td>  </tr>  <tr>    <td>    <?	if($submenu == 'editar')		$dbx = $db->execute("SELECT * FROM tab_secoes WHERE sec_id='$id'");	?>    <form action="<? echo $PHP_SELF?>" method="post" enctype="multipart/form-data" name="form1">      <table width="100%" border="0" cellspacing="0" cellpadding="0">        <tr>          <td width="150" height="20" align="right" valign="middle" class="menusql">Nome da Se&ccedil;&atilde;o</td>          <td align="left" valign="middle"><label>            &nbsp;&nbsp;            <input name="sec_nome" type="text" class="box_edtadmin" id="sec_nome" value="<? echo $dbx->fields["sec_nome"];?>">          </label></td>        </tr>        <tr>          <td height="20" align="right" valign="middle" class="menusql">Imagem da Se&ccedil;&atilde;o</td>          <td align="left" valign="middle"><label>            &nbsp;&nbsp;            <input name="file" type="file" class="box_edtadmin" id="file">          </label></td>        </tr>        <tr>          <td colspan="2">&nbsp;</td>          </tr>        <tr>          <td colspan="2" align="center" valign="middle"><table width="300" border="0" cellspacing="0" cellpadding="0">            <tr>              <td width="125" align="center" valign="middle">              <input name="menu" type="hidden" value="<?echo $menu;?>">	          <input name="submenu" type="hidden" value="<?echo 'listar';?>">    	      <input name="acao" type="hidden" value="<?echo $submenu;?>">        	  <input name="id" type="hidden" value="<?echo $id;?>">              <input type="submit" name="sub" id="button" value="Gravar"></td>              <td width="50" align="center" valign="middle">&nbsp;</td>              <td width="125" align="center" valign="middle"><label>                <input type="reset" name="button2" id="button2" value="Limpar">              </label></td>            </tr>          </table></td>          </tr>      </table>        </form>    </td>  </tr></table>


Script do listar:
<table width="625" border="0" cellspacing="0" cellpadding="0">  <tr>    <td><table width="100%" border="0" cellspacing="0" cellpadding="0">      <tr>        <td width="5"><img src="../img/main_r14_c8.jpg" width="5" height="29"></td>        <td align="center" valign="middle" background="../img/main_r14_c11.jpg" class="admsubmenu"><table width="100%" border="0" cellspacing="0" cellpadding="0">            <tr>              <td align="center" valign="middle">Lista das Se&ccedil;&otilde;es </td>              <td width="50" align="center" valign="middle"><a href="?menu=<? echo $menu;?>&submenu=incluir"><img src="../img/new.png" width="16" height="16" border="0"></a></td>            </tr>          </table></td>        <td width="5"><img src="../img/main_r14_c15.jpg" width="5" height="29"></td>      </tr>    </table></td>  </tr>    <tr>    <td><table width="100%" border="0" cellspacing="0" cellpadding="0">      <tr>        <td width="35" align="center" valign="middle" bgcolor="#D4D0C8" class="logclass">C&oacute;d.</td>        <td width="60" align="center" valign="middle" bgcolor="#D4D0C8" class="logclass">Imagem</td>        <td align="center" valign="middle" bgcolor="#D4D0C8" class="logclass">Nome da Se&ccedil;&atilde;o</td>        <td width="30" align="center" valign="middle" bgcolor="#D4D0C8">&nbsp;</td>        <td width="30" height="20" align="center" valign="middle" bgcolor="#D4D0C8">&nbsp;</td>      </tr>      <?		$dbt = $db->execute("SELECT * FROM tab_secoes ORDER BY sec_nome ASC");		$linesx = $dbt->getNumOfRows();		if($linesx > 0)		{			while(!$dbt->EOF)			{	  ?>      <tr>        <td align="center" valign="middle" class="texto_main"><? echo $dbt->fields["sec_id"];?></td>        <td align="center" valign="middle"><img src="../gera_thumb.inc.php?imagem=images/secao/<? echo $dbt->fields["sec_image"];?>&x=25&y=25" vspace="5"></td>        <td align="left" valign="middle" class="texto_main"><? echo $dbt->fields["sec_nome"];?></td>        <td align="center" valign="middle"><a href="?menu=<? echo $menu;?>&submenu=editar&id=<? echo $dbt->fields["sec_id"];?>"><img src="../img/edit.png" alt="" width="18" height="18" border="0"></a></td>        <td align="center" valign="middle"><a href="?menu=<? echo $menu;?>&acao=excluir&id=<? echo $dbt->fields["sec_id"];?>"><img src="../img/delete.gif" alt="" width="16" height="16" border="0"></a></td>      </tr>      <?	$dbt->nextRow();			}		}		$dbt->close();	  ?>    </table></td>  </tr></table><?if($a==1){?><script language="JavaScript">  alert('Inclusão efetuada com Sucesso!');  </script><?}if($a==2){?><script language="JavaScript">  alert('Atualização efetuada com Sucesso!');  </script><?}if($a==3){?><script language="JavaScript">  alert('NÃO POSSÍVEL REALIZAR AS OPERAÇÕES!!\n CONTATE O ADMINISTRADOR!');  </script><?}?>
este é um modelo antigo que usava, ainda uso a mesma base, mas so que troquei os if's pelo switch, tanto pra chamar as páginas como pra receber as ações.


Aguardo. Obrigado.

#4 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 18/08/2008, 23:03

Pelo amor de deus, desde o PHP3 não se usa mais assim:
$_GET[pg];

pg é um indice de array e não uma constante. Experimente assim
$_GET['pg'];

Experimente separar a persistencia da visão da sua aplicação. Para ficar mais entendível e mais seguro (ok2)

[]'s

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#5 alexpfo

alexpfo

    Turista

  • Usuários
  • 41 posts
  • Sexo:Masculino
  • Localidade:Passo Fundo - RS
  • Interesses:Clientes para desenvolvimento de sites e parcerias.

Posted 22/08/2008, 16:07

Pelo amor de deus, desde o PHP3 não se usa mais assim:

$_GET[pg];

pg é um indice de array e não uma constante. Experimente assim
$_GET['pg'];

Experimente separar a persistencia da visão da sua aplicação. Para ficar mais entendível e mais seguro (ok2)

[]'s


Tanto um quanto outro funcionam da mesma maneira, experimente e verá, segundo resolvi o problema, simpelsmente esqueci do bendito $_REQUEST que pode substituir qualquer um dos dois.


Obrigado mesmo assim.

#6 lwirkk

lwirkk

    Veterano

  • Usuários
  • 1314 posts
  • Sexo:Não informado

Posted 22/08/2008, 17:22

Pelo amor de deus, desde o PHP3 não se usa mais assim:

$_GET[pg];

pg é um indice de array e não uma constante. Experimente assim
$_GET['pg'];

Experimente separar a persistencia da visão da sua aplicação. Para ficar mais entendível e mais seguro (ok2)

[]'s


Tanto um quanto outro funcionam da mesma maneira, experimente e verá, segundo resolvi o problema, simpelsmente esqueci do bendito $_REQUEST que pode substituir qualquer um dos dois.


Obrigado mesmo assim.

Sim, os dois funcionam, mas não sendo recomendado usar né '-'....

$_GET['pg'] no caso seria melhor para o PHP, se podemos dizer assim, por que mostra que o valor é uma string (nome...) e sem aspas, ele verifica se o valor é uma string ou número antes de fazer a chamada.... Por isso, em modo geral, com aspas ele "anda mais rápido" por saber o que é... =)

Edição feita por: lwirkk, 22/08/2008, 17:23.

Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#7 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 22/08/2008, 18:56

Tanto um quanto outro funcionam da mesma maneira, experimente e verá, segundo resolvi o problema, simpelsmente esqueci do bendito $_REQUEST que pode substituir qualquer um dos dois.

Ative o E_NOTICE pela função error_reporting() e veja que não é a mesma coisa:

Notice: Use of undefined constant pg - assumed 'pg' in {arquivo} on line {linha}

Isso quer dizer que...

<?php

define('pg', 'foo');
$_GET = array('pg' => 'bar', 'foo' => 'baz');

print $_GET[pg];

?>
Houston, we have a problem. ;-)

[]’s :DAté mais




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq