Jump to content
surfistacool

[Resolvido] Erros PHP

Recommended Posts

surfistacool

Boas,

Sou o Zé, inscrevi-me hoje porque necessito de ajuda. Já sigo alguns posts à bastanto tempo mas apenas hoje resolvi registar visto estar com problemas e ter pouco tempo de sobra!

Ora bem, estou a fazer um site em PHP, e estou com alguns erros, como no login.

No campo login, quando o utilizador insere dados que não constam na BD, o site rebenta...

"Notice: Undefined variable: cargo in C:\wamp\www\mst_site\mst_site\login1.php on line 26"
"Notice: Undefined variable: cargo in C:\wamp\www\mst_site\mst_site\login1.php on line 30"

Deixo o php c/Ligação à BD (login1.php), penso não ser necessário a colocação dos outros dois visto os erros indicarem esta página:

<?php
$a=$_POST["t1"];
$b=$_POST["t2"];
if($a!="" && $b!==""){
$site="localhost";
$user="root";
$pass="";
$bd="mst";
$liga=mysql_connect("$site","$user", "$pass");
if(!mysql_select_db("$bd")) {
echo "Base de Dados Indisponivel.";
}
$sql="select * from utilizador where email ='$a'";
$resultado=mysql_query($sql, $liga);
$num=mysql_num_rows($resultado);

if($resultado) {
while($registo=mysql_fetch_array($resultado)){
$cargo=$registo["id_cargo"];
$email=$registo["email"];
$password=$registo["password"];
$idu=$registo["id"];
}
}
if($cargo==1 && $b==$password) {
$_REQUEST['a']=$idu;
include("login_user.php");

} elseif($cargo==2 && $b==$password) {
$_REQUEST['a']=$idu;
include("login_admin.php");
} else{
include("index.php");
echo "<script>alert('Password errada!')</script>";
}
}else {
include("index.php");
echo "<script>alert('Insira os dados!')</script>";
}
?>

Ele nos erros queixa-se da linha 26 e 30, as quais onde menciono os cargos. O cargo 1 (cliente) e o cargo 2 (admin).

Já li e voltei a ler, mas nem sei se é das directas que tenho em cima, se é do código...

Cumprimentos,

José Simões

Edited by yoda

Share this post


Link to post
Share on other sites
yoda

Isso não é um erro, é um Notice, que apenas te Notifica que existe alguma incongruência no código que "pode" fazer com que ele apresente resultados inesperados. No teu caso está a avisar-te que a variável não existe. Experimenta imprimir o valor de $registo["id_cargo"] assim que entras no while()

Share this post


Link to post
Share on other sites
surfistacool

Boa tarde!

Obrigado pela ajuda pessoal, realmente simplesmente defini o cargo com valor 0 e bombou logo :cheesygrin:

Às vezes estas coisinhas pequeninas é que me dão cabo da cabeça ahah

Peço desculpa pelo tópico repetido, mas mal isso aconteceu eu enviei uma mensagem a um moderador para eliminar um dos posts.

Cumprimentos,

José Simões

Share this post


Link to post
Share on other sites
Devexz

Não percebo como é que atribuir um valor fixo a uma variável que supostamente era dinâmica resolve o problema.

Isso é porque dentro do while não recebia nada da query ficando a variável indefinida, logo no if íamos receber esse tal notice.

Mas agora como ele definiu a váriável em causa antes do ciclo, se a query não retornar nada, ele fica com o valor fixo :D , o default.

Agora em termos de lógica, alguma coisa há de correr mal, agora imaginemos que à segunda vez a query não retorna nada, o valor da variável ficaria o último que lhe foi atrubuído, se é que me fiz entender :D

Edited by Devexz

Contador de calorias: caloriaspordia.com

Share this post


Link to post
Share on other sites
HappyHippyHippo

Isso é porque dentro do while não recebia nada da query ficando a variável indefinida, logo no if íamos receber esse tal notice.

Mas agora como ele definiu a váriável em causa antes do ciclo, se a query não retornar nada, ele fica com o valor fixo :D , o default.

o que o @yoda quis dizer foi :

- "o que é que um penso rápido resolve uma perna fracturada ?"

ao primeiro uso da perna partida vais sentir a dor agoniante de não ter uma tala/gesso.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nelsonr

O problema estava que a variavel era definida dentro de um ciclo, o que faz com que ao sair do ciclo, seja destruida.

Ao definir lá em cima, o scope da variavel fica geral, ou seja, fica disponível quando entra no ciclo while e quando sai

Share this post


Link to post
Share on other sites
Devexz

o que o @yoda quis dizer foi :

- "o que é que um penso rápido resolve uma perna fracturada ?"

ao primeiro uso da perna partida vais sentir a dor agoniante de não ter uma tala/gesso.

ah lol, my fault. :D

O problema estava que a variavel era definida dentro de um ciclo, o que faz com que ao sair do ciclo, seja destruida.

Ao definir lá em cima, o scope da variavel fica geral, ou seja, fica disponível quando entra no ciclo while e quando sai

seja destruída? acho que não é isso que se está a passar... :confused:


Contador de calorias: caloriaspordia.com

Share this post


Link to post
Share on other sites
nelsonr
seja destruída? acho que não é isso que se está a passar... :confused:

É isso sim. As variaveis existem dentro do scope onde são definidas.

O que acontece é que a variavel deixava de existir mal saia do while.

Depois quando ias consultar, não tinha valor (porque não estava definida).

Ao definires lá em cima, o scope passou a ser geral do ficheiro

Share this post


Link to post
Share on other sites
HappyHippyHippo

O problema estava que a variavel era definida dentro de um ciclo, o que faz com que ao sair do ciclo, seja destruida.

Ao definir lá em cima, o scope da variavel fica geral, ou seja, fica disponível quando entra no ciclo while e quando sai

em PHP, um ciclo não cria um scope. o que quer dizer que uma variável instanciada dentro do ciclo não "morre" no fim deste.

o problema do código é muito simples:

if($resultado) {
 while($registo=mysql_fetch_array($resultado)){
   $cargo=$registo["id_cargo"];                 // <-- instanciação da variável "$cargo"
   $email=$registo["email"];
   $password=$registo["password"];
   $idu=$registo["id"];
 }
}
if($cargo==1 && $b==$password) {                 // <-- uso da variável "$cargo"
                                                // o que não faz sentido se $registo for avaliado como falso ou
                                                // o recordset "$resultado" não tiver registos

a solução é simples : se o SQL deu erro ou não devolveu registos é obvio que não se encontra autenticado o que deveria automaticamente ser redireccionado para o script de autenticação.

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nelsonr
Experimenta e depois diz o que aconteceu.

Não tenho o PHP instalado, não vou teimar.

Pela informação disponibilizada, parecia ser esse o problema.

Edited by nelsonr

Share this post


Link to post
Share on other sites
Devexz

Não tenho o PHP instalado, não vou teimar.

Pela informação disponibilizada, parecia ser esse o problema.

Esta lá o link, clica em "Experimenta" :D


Contador de calorias: caloriaspordia.com

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.