Jump to content
fantasma

Retornar string com If clauses

Recommended Posts

fantasma

Boas

surgiu-me o seguinte problema:

Preciso de ter uns if's que, consante a variável que passa por GET, me retorne uma string. Preciso de comparar essa variável com outra string antes disso, e é por isso que uso os if's, no entanto, diz-me que a variavel $db não está definida.

Alguem me pode ajudar?

Aqui vai o código

	$db = mysql_real_escape_string($_GET['mod']);

echo $db;

function knowPath ()
{

		if($db === 'content_empresa')
		{
			return "../img/empresa/";


		}
		if($db === 'noticias')
		{
			return "../img/noticias";
		}




}

echo knowPath();

Share this post


Link to post
Share on other sites
ruimcosta

Essa variavel $_GET['db'] existe na barra de endereços?

Corrige isto:

 
if( isset($_GET['mod']) ){
       $db = mysql_real_escape_string($_GET['mod']);
        
        echo $db;
        
        function knowPath ()
        {
                
                        if($db === 'content_empresa')
                        {
                                return "../img/empresa/";
                                
                
                        }
                        if($db === 'noticias')
                        {
                                return "../img/noticias";
                        }
                        
                
                
                
        }
        
        echo knowPath();
}else{
echo 'a variavel nao existe!';
}

depois diz o que aparece no ecra.


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
fantasma

Sim existe. Neste momento para testar estou a mete-la "à lá pata" mas existe

No ecrã:

content_empresa
Notice: Undefined variable: db in C:\wamp\www\ArtZende\upload\upload.php on line 19

Notice: Undefined variable: db in C:\wamp\www\ArtZende\upload\upload.php on line 25

Share this post


Link to post
Share on other sites
fantasma

Sim, se está as passar o 2 como argumento, ele tendo o echo $db retorna isso...

eu quero é que passando uma string, "noticias" por exemplo, ele me de isso, e neste momento so esta a dar o if do "content_empresa" para qualquer argumento

Share this post


Link to post
Share on other sites
ruimcosta

A questão é que dentro da function, a variavel $db não é conhecida. Para isso terás de a passar quando chamas a função. Fiz umas alterações:

<?php
if( isset($_GET['mod']) ){
       $db = ($_GET['mod']);
        
        function knowPath ($db){
            
            switch ( $db ){
                case 'content_empresa';
                    return "../img/empresa/";
                    break;
                case 'noticias';
                    return "../img/noticias";
                    break;
            }
        }
        
        echo knowPath($db);
}else{
    echo 'a variavel nao existe!';
}
?>

Gosto mais do switch para estas situações, ou então se for para ficar muito grande, passar por array os valores a comparar com a $db


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
fantasma

Confesso que não tinha pensado na hipótese do switch, que de facto é a melhor e mais "bonita"

Está a funcionar, muito obrigado pela paciência  ;)

Apenas uma questão:

Não é aconselhável fazer o escape dos caracteres perigosos com o mysql_real_escape_string() por causa do SQL Injection??

Anyway, tópico resolvido. Obrigado

Share this post


Link to post
Share on other sites
ruimcosta

Nesse caso específico, se não fazes utilização da base de dados, não precisas, pois o sql injection, tal como diz o nome é perigoso para o sql (base de dados) mas deves fazer o escape de outros caracteres para nao permitires ataques de outro tipo (ex: XSS )

Mais uma forma de resolveres isso

function limpeza( $str ){
    $str = preg_replace( '/[^a-zA-Z_]/', '', trim($str) ); // So permite letras maiusculas, minusculas e o underscore
    return $str;
}

if( isset($_GET['mod']) ){
    $db = limpeza( $_GET['mod'] );
    
    $permissoes = array( 
                        'content_empresa' => '../img/empresa/', 
                        'noticias' => '../img/noticias'
                        ) ;
    
    if( array_key_exists($db,$permissoes) ){
        echo '<meta http-equiv="refresh" content="0; url='.$permissoes[$db].'">';
    }
        
}else{
    echo 'a variavel nao existe!';
}


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
fantasma

A ligação  não esta feita, mas pretendo que o path da imagem seja escrito na BD, por isso, vou fazer.

Obrigado pela resposta...

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

×
×
  • 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.