Jump to content
Daniel Alves

Servidor Apache não interpreta código PHP

Recommended Posts

Daniel Alves

Boas pessoal.

Estou com um problema que não consigo resolver. O Código está bem penso eu. Pelo menos já o passei a pente fino umas 3 vezes...

Eu tenho o wamp instalado no PC. O que estou a fazer é o login. Tenho a BD feita atraves do phpmyadmin e tenho o ficheiro login.php (que funciona na perfeição), tenho o check_login.php (o ficheiro critico) e outro que é o login_success.php mas este tal como o nome indica, é apenas um ficheiro que caso o login seja efectuado com êxito é executado para avisar.

O grande problema está que eu abro na perfeição o login, preencho username e password MAS quando clico em entrar, ele invés de interpretar o código PHP do check_login, mostra-me no browser todo o codigo como sendo texto normal...

Epah eu sou um iniciante a programar em PHP talvez até seja algo muito basico mas não estou a conseguir chegar lá...

Alguem me pode ajudar??

Share this post


Link to post
Share on other sites
KTachyon

Ainda bem que o MySQL não interpreta o PHP. Não faz parte das suas funções ;)

Quem tem que interpretar o PHP é o Apache.

Imagino que a tua instalação do WAMP não deve ter corrido muito bem, porque provavelmente faltará a configuração do PHP ao Apache.


“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
fantasma

O PHP é que tem que interpretar o mySQL e não o contrário ;)

Mostra o código pf...

Share this post


Link to post
Share on other sites
Daniel Alves

Boa LOL

Ahahahaha A parte pior é que estou farto de saber isso LOL

Foi o que mais li quando comecei a aprender PHP.

Obrigado.

Mas já agora, no seguimento disto, eu tenho o Apache instalado. Ele está a correr assim como todos os serviços do wamp...

Qual será o problema então?!?!

Share this post


Link to post
Share on other sites
Daniel Alves

<?php
ob_start();
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="interim"; // Database name 
$tbl_name="users"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
header("location:login_success.php");
}
else {
echo "Username ou password errados.";
}

ob_end_flush();
?>

Aqui está o código.

Quando clico em submit. Ele aparece literalmente como aqui está... O servidor nao o interpreta  ;)

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá Daniel Alves,

Se possível mostra-nos o código do <form></form> (salvaguardando dados confidenciais ;) se tiveres) para podermos analisar.

De referir que a função session_register() está obsoleta....

O ideal seria onde tens:

session_register("myusername");
session_register("mypassword"); 

Mudares para:

$_SESSION["myusername"] = $myusername;
$_SESSION["mypassword"] = $mypassword; 

Share this post


Link to post
Share on other sites
KTachyon

O PHP é que tem que interpretar o mySQL e não o contrário ;)

O PHP não tem que interpretar o MySQL. MySQL é um DBMS, não é código, logo não pode ser interpretado. O PHP nem sequer tem que interpretar o SQL, visto que isso é tudo realizado pelo DBMS que está a ser utilizado. Apenas tem que organizar os resultados de forma a poderem ser utilizados.

Quanto ao tópico, antes de mais, faz o seguinte. Cria um ficheiro, tipo teste.php e escreve apenas a seguinte linha:

<?php echo phpinfo(); ?>

E confirma o que é que aparece.


“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
fantasma

O PHP não tem que interpretar o MySQL. MySQL é um DBMS, não é código, logo não pode ser interpretado. O PHP nem sequer tem que interpretar o SQL, visto que isso é tudo realizado pelo DBMS que está a ser utilizado. Apenas tem que organizar os resultados de forma a poderem ser utilizados.

Quanto ao tópico, antes de mais, faz o seguinte. Cria um ficheiro, tipo teste.php e escreve apenas a seguinte linha:

<?php echo phpinfo(); ?>

E confirma o que é que aparece.

Tens razão. Esqueci-me de por as aspas no "interpreta". ;)

Share this post


Link to post
Share on other sites
Daniel Alves

Muito Obrigado pessoal

O servidor ja funciona.

mAiN_iNfEcTiOn muito obrigado pela dica. De facto faz todo o sentido isso... Vou testar e já vos digo algo.

Porque estava a dar-me sempre password incorrecta... Visto que não estava a recorrer à bd para conseguir o user e pass ne?!

Se estiver errado corrijam-me. Como disse, sou um novato nisto ainda...

Abraços e muito obrigado

Share this post


Link to post
Share on other sites
Daniel Alves

Ja alterei aquilo. portanto o código agora é:

<?php
ob_start();
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="interim"; // Database name 
$tbl_name="users"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
$_SESSION["myusername"] = $myusername;
$_SESSION["mypassword"] = $mypassword; 
header("location:login_success.php");
}
else {
echo "Username ou password errados.";
}

ob_end_flush();
?>

Este é o código da form

 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Interim - Login</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="container">
  <div id="top">
    <h1>Interim LMSM</h1>
  </div>
  <div id="leftSide">
  <fieldset>
<legend>Iniciar Sessão</legend>
<form action="check_login.php" method="POST" class="form">
  <label for="username">Utilizador</label>
  <span class="div_texbox">
  <input name="username" type="text" class="username" id="username" value="" />
  </span><br />
  <br />
  <br />
  <label for="password">Password</label>
    <div class="div_texbox">
    <input name="password" type="password" class="password" id="password" value="" />
</div>
   

    <p> </p>
    <p> </p>
    
    <div class="button_div">
<input name="Submit" type="Submit" value="Entrar" class="buttons" />
</div>
</form>


</body>
</html>

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Corrijo com muito gosto...

O problema consiste em (e citando a php.net):

Cuidado

Se você quer que seu script funcione independentemente do uso de register_globals, você precisa usar a matriz $_SESSION já que $_SESSION é automaticamente registrada. Se o seu script usa session_register(), ele não irá funcionar em ambientes onde a diretiva de configuração register_globals esteja desabilitada.

e....

Nota: Nota importante sobre register_globals:

Desde o PHP 4.2.0, o valor padrão para a diretiva register_globals é off e foi completamente removida a partir do PHP 6.0.0. A comunidade do PHP desencoraja desenvolvedores a confiar nesta diretiva, e encoraja o uso de outros meios, como em superglobals.

o session_register() depende/dependia do register_globals activo para funcionar (que a partir do PHP 4.2.0 é off por defeito, por motivos de segurança).

Portanto, o session_register() dava erro porque o register_globals estava inactivo. ;)

Share this post


Link to post
Share on other sites
Daniel Alves

Humm penso que entendi.

Muito bom mesmo. Obrigado mesmo. Por toda a ajuda.

E se não for abusar, agora está a dar-me este erro

"Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\interim\check_login.php on line 27"

E não consegui entender  ;)

Desculpa tar a fazer-te perder tempo. Mas estou enrascado. E creio que estes sejam os meus primeiros problemas a programar php...

mas é com os erros que se aprende. Estou a esforçar-me para tirar o máximo partido deles

Share this post


Link to post
Share on other sites
Daniel Alves

o k posso fazer para alterar aquilo sa session?  ;)

eu tirei da net este codigo e alterei algumas partes.

Eu apenas quero algo do mais simples que vah à BD verifique se o registo esta la e faça logon

Alguma forma de fazer isto sem usar a matriz Session?!

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá Daniel Alves,

Onde tens:

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){

O erro que te dá mostra que estás a fazer mal a query ou que esta não está a executar bem...

Para fazermos debug, altera o código para o seguinte:

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

if( !is_resource( $result) )
    die("<br/><br/>FALHOU A QUERY :: $sql");

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){

Corre novamente e coloca aqui o que aparece.

Share this post


Link to post
Share on other sites
Daniel Alves

Aqui está...

FALHOU A QUERY :: SELECT * FROM users WHERE username='' and password=''

Que cena. Acabaste de fazer um debugger em poucas linhas de código LOL

Bem pelo que entendo ele não está a conseguir receber a informação de qual é o username e a pass né?

Muito obrigado

Share this post


Link to post
Share on other sites
Daniel Alves

Também dá erro nesta duas linhas de codigo:

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword'];

Diz isto:

Notice: Undefined index: myusername in C:\wamp\www\interim\check_login.php on line 14

Na linha 14 e 15 dá este erro . . .

Eu naõ entendo o porquê de usar o post aqui... O metodo post "guarda" as variaveis e transporta-as para a outra página?!

Share this post


Link to post
Share on other sites
KTachyon

<input name="username" type="text" class="username" id="username" value="" />

Logo

$myusername=$_POST['username'];


“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
mAiN_iNfEcTiOn

Yup...

Aqui está...

FALHOU A QUERY :: SELECT * FROM users WHERE username='' and password=''

Que cena. Acabaste de fazer um debugger em poucas linhas de código LOL

Bem pelo que entendo ele não está a conseguir receber a informação de qual é o username e a pass né?

Muito obrigado

Yup... e o problema é o seguinte... os teus objectos - no HTML - chamam-se username e password.... e os nomes que estás a meter no PHP estão errados:

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword'];

deveria ser:

// Define $myusername and $mypassword 
$myusername=$_POST['username']; 
$mypassword=$_POST['password'];

Gostaria de referir que o ideal seria:

// Define $myusername and $mypassword 
$myusername=mysql_real_escape_string(strip_tags($_POST['username'])); 
$mypassword=mysql_real_escape_string(strip_tags($_POST['password']));

Share this post


Link to post
Share on other sites
Daniel Alves

Eu ja tinha alterado aquilo e mesmo assim o erro continuou. Mas fazendo da forma como me disseste ficou a funcionar...

Já não dá os erros que dava.

Agora o resultado final é:

FALHOU A QUERY :: SELECT * FROM users WHERE username='daniel alves' and password='musica'

Não redireciona para a página que eu quero...

Creio que agora o problema se encontre aqui certo?

if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
$_SESSION["username"] = $myusername;
$_SESSION["password"] = $mypassword; 
header("location:login_success.php");
}
else {
echo "Username ou password errados.";
}

ob_end_flush();
?>

Podes só dar-me uma muito breve explicação deste fragmento de código que me mandas-te?

 mysql_real_escape_string(strip_tags($_POST['username'])); 

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá Daniel Alves,

onde tens:

if( !is_resource( $result) )
    die("<br/><br/>FALHOU A QUERY :: $sql");

Altera para:

if( !is_resource( $result) )
    die("<br/><br/>FALHOU A QUERY :: " . mysql_error());

E diz-me o que aparece sff.

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.