Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gilberto Jr

Erro no arquivo PHP.

Recommended Posts

Boa noite.

 

Esta dando o seguinte erro na minha página em php.

 

Na minha pagina index.php esta com o seguinte código e também o seguinte erro.

 

Primeiro aqui vai o código.

<?php
	session_start();
	include_once "config.php";
	require_once("classes/BD.classe.php");
	BD::conn();
	
	//conexão com o servidor
	$conect = mysql_connect("localhost", "root", "211613");
	
	// Caso a conexão seja reprovada, exibe na tela uma mensagem de erro
	if (!$conect) die ("<h1>Falha na coneco com o Banco de Dados!</h1>");
	
	// Caso a conexão seja aprovada, então conecta o Banco de Dados.	
	$db = mysql_select_db("chat");
	
	/*Configurando este arquivo, depois é só você dar um include em suas paginas php, isto facilita muito, pois caso haja necessidade de mudar seu Banco de Dados
	você altera somente um arquivo*/	
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Entre no Chat</title>
<style type="text/css">
	*{margin:0; padding:0;}
	body{background:#f4f4f4;}
	div#formulario{width:500px; padding:5px; height:100px; background:#fff; border:1px solid #333;
	position:absolute; left:50%; top:50%; margin-left:-250px; margin-top:-50px;}
	div#formulario span{font:18px "Trebuchet MS", tahoma, arial; color:#036; float:left; width:100%; margin-bottom:10px;}
	div#formulario input[type=text]{padding:5px; width:485px; border:1px solid #ccc; out-line:none; font:16px tahoma, arial; color:#666;}
	div#formulario input[type=text]:focus{border:1px solid #036;}
	div#formulario input[type=submit]{padding:4px 6px; background:#069; font: 15px tahoma, arial; color:#fff; boder:1px solid #036; float:left; margin-top:5px; text-align:center; width:95px; text-shadow:#000 0 1px;}
	div#formulario input[type=submit]:hover{cursor:pointer; background:#09f;}
</style>
</head>

<body>
<?php
	if(isset($_POST['acao']) && $_POST['acao'] == 'logar'):
		$email = strip_tags(filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING));
		
		if($email == ''){}
		else{
			$pegar_user = BD::conn()->prepare("SELECT id FROM 'usuario' WHERE email = ?");
			$pegar_user->execute(array($email));
			if($pegar_user->rowCount() == 0){
				echo '<script>alert("Usuário não encontrado")</script>';
			}else{
				$fetch = $pegar_user->fetchObject();
				$_SESSION['id_user'] = $fetch->id;
				echo '<script>alert("Logado com sucesso.");location.href="chat.php"</script>';
			}
		}
	endif;
?>
<div id="formulario">
	<span>Digite o seu E-mail</span>
	<form action="" method="post" enctype="multipart/form-data">
		<label>
			<input type="text" name="email" />
		</label>
		<input type="hidden" name="acao" value="logar" />
		<input type="submit" value="Logar" />
	</form>
</div>
</body>
</html>

Erro na hora que executa a página index.php

 

 

Strict Standards: Non-static method BD::conn() should not be called statically in D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\index.php on line 5 Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\classes\BD.classe.php:20 Stack trace: #0 D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\classes\BD.classe.php(20): PDO->__construct('mysql:host=loca...', 'root', '211613') #1 D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\index.php(5): BD::conn() #2 {main} thrown in D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\classes\BD.classe.php on line 20

 

E a página BD.classe.php esta com o seguinte código

 

<?php
	//conexão com o servidor
	$conect = mysql_connect("localhost", "root", "211613");
	
	// Caso a conexão seja reprovada, exibe na tela uma mensagem de erro
	if (!$conect) die ("<h1>Falha na coneco com o Banco de Dados!</h1>");
	
	// Caso a conexão seja aprovada, então conecta o Banco de Dados.	
	$db = mysql_select_db("chat");
	
	/*Configurando este arquivo, depois é só você dar um include em suas paginas php, isto facilita muito, pois caso haja necessidade de mudar seu Banco de Dados
	você altera somente um arquivo*/
	
class BD{
	private static $conn;
	public function __construct(){}
	
	public function conn(){
		if(is_null(self::$conn)){
			self::$conn = new PDO('mysql:host='.HOST.';dbname='.BD.'', ''.USER.'', ''.PASS.'');
		}
		
		return self::$conn;
	}
}
?>

erro na linha 20. O código da linha 20 é

 

self::$conn = new PDO('mysql:host='.HOST.';dbname='.BD.'', ''.USER.'', ''.PASS.'');

 

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

deixe o metodo conn como static.

 

public static function conn()

 

o driver do PDO para mysql esta ativo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei o código para static, ficou assim.

class BD{
	//private static conn;
	public function __construct(){}
	
	public static function conn(){
	if(is_null(self::conn)){
			self::conn = new PDO('mysql:host='.HOST.';dbname='.BD.'', ''.USER.'', ''.PASS.'');
		}
		
		return self::conn;
	}
}

Agora esta dando erro na linha com o seguinte código

self::conn = new PDO('mysql:host='.HOST.';dbname='.BD.'', ''.USER.'', ''.PASS.'');

O erro é "Parse error: syntax error, unexpected '=' in D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\classes\BD.classe.php on line 20"

 

Existe algum código que eu vejo se o PDO esta funcionando.

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é "Parse error: syntax error, unexpected '=' in D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\classes\BD.classe.php on line 20"

O que tem na linha 20 do arquivo BD.classe.php???

 

Existe algum código que eu vejo se o PDO esta funcionando.

echo 'driver do mysql está ' . (in_array('mysql', PDO::getAvailableDrivers())? 'presente', 'ausente');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem esse código na linha 20

 

self::conn = new PDO('mysql:host='.HOST.';dbname='.BD.'', ''.USER.'', ''.PASS.'');


Rodei o script que me mandou e deu o seguinte erro

 

Parse error: syntax error, unexpected ',' in D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\teste.php

Compartilhar este post


Link para o post
Compartilhar em outros sites
tente assim:

 

self::conn = new PDO('mysql:host='.HOST.';dbname='.BD, USER,PASS);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodei o script que me mandou e deu o seguinte erro

 

Parse error: syntax error, unexpected ',' in D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\teste.php

Fiz caca aqui. Era assim [inline]echo 'driver do mysql está ' . (in_array('mysql', PDO::getAvailableDrivers())? 'presente': 'ausente');[/inline]

 

Sugiro que não faça da conexão ao banco um Singleton. Se precisar compartilhar a conexão entre outras partes do sistema, sugiro que utilize um Registry ou algum outro método de compartilhamento global. Outra forma é tentar criar uma conexão persistente. Sempre que você tentar uma nova conexão, o driver retornará a ativa. É um pouco mais lento mas ainda assim é melhor.

 

O seu problema, acredito eu, está em não ter declarado a propriedade antes.

Há, ainda, a ausência do sinal de Dólar/Cifrão [inline]$[/inline] antes do nome da propriedade estática.

 

Quando nos referimos ao estáticos, há que se fazer essa diferenciação entre as propriedades e os métodos

$this->metodoDeInstancia();
$this->propriedadeDeInstancia;

self::metodoDeClasse();
self::$propriedadeDeClasse;

A implementação sem erros de sintaxe ficaria assim

class BD
{
    private static $conn;

    private function __construct()
    {}

    public static function conn() {
	if (is_null(self::$conn)) {
            self::$conn = new PDO('mysql:host='.HOST.';dbname='.BD.'', ''.USER.'', ''.PASS.'');
        }
        return self::$conn;
    }
}

Reforço que não é uma boa prática…

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa conexão seria melhor, correto?

//conexão com o servidor
$conect = mysql_connect("localhost", "root", "211613");
	
// Caso a conexão seja reprovada, exibe na tela uma mensagem de erro
if (!$conect) die ("<h1>Falha na coneco com o Banco de Dados!</h1>");
	
// Caso a conexão seja aprovada, então conecta o Banco de Dados.	
$db = mysql_select_db("chat");

Eu usando ela funciona normal.

 

Na minha linha de seleção de dados do banco de dados estava assim

$pegar_user = BD::conn()->prepare("SELECT id FROM usuario WHERE email = ?");

Eu mudei para

$pegar_user = conect()->prepare("SELECT id FROM usuario WHERE email = ?");

Fiz certo?

 

 

Att;



O PDO esta ausente na minha maquina.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa conexão seria melhor, correto?


//conexão com o servidor
$conect = mysql_connect("localhost", "root", "211613");
	
// Caso a conexão seja reprovada, exibe na tela uma mensagem de erro
if (!$conect) die ("<h1>Falha na coneco com o Banco de Dados!</h1>");
	
// Caso a conexão seja aprovada, então conecta o Banco de Dados.	
$db = mysql_select_db("chat");

 

 

Incorreto: http://php.net/mysql_connect#function.mysql-connect-refsynopsisdiv


$conn = new msyqli('localhost', 'root', '211613');
$conn->select_db('chat');

http://www.php.net/manual/en/book.mysqli.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui esta a minha conexão com o banco de dados, esta funcionando certinho.

$conn = mysql_connect('localhost', 'root', '211613');
$conn = mysql_select_db('chat');

Quando eu digito alguma coisa no campo email e mando conectar aparece o seguinte errp

Fatal error: Call to undefined function conn() in D:\Sites\PHP\EasyPHP-5.3.2\www\chat\web\index.php on line 47


O código é o seguinte.

<?php
	if(isset($_POST['acao']) && $_POST['acao'] == 'logar'):
		$email = strip_tags(filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING));
		
		if($email == ''){}
		else{
			$pegar_user = conn()->prepare("SELECT id FROM usuario WHERE email = ?");
			$pegar_user->execute(array($email));
			if($pegar_user->rowCount() == 0){
				echo '<script>alert("Usuário não encontrado")</script>';
			}else{
				$fetch = $pegar_user->fetchObject();
				$_SESSION['id_user'] = $fetch->id;
				echo '<script>alert("Logado com sucesso.");location.href="chat.php"</script>';
			}
		}
	endif;
?>

A linha 47 esta com o seguinte código

$pegar_user = conn()->prepare("SELECT id FROM usuario WHERE email = ?");

O que tem de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

deve ser

 

 

$this-> conn()->prepare
 
ou
 
self::conn()->preapre

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora esta funcionando, porem não esta fazendo a validação de javascript.

 

No caso se eu digitar alguma coisa errada no campo e-mail ele deveria ir no banco de dados e pesquisar se existe se esse e-mail não existe, se não existe aparece a mensagem que esta dentro do script javascript e se tiver da mensagem que foi logado com sucesso e também rediciona para a pagina chat.

 

<body>
<?php
	if(isset($_POST['acao']) && $_POST['acao'] == 'logar'):
		$email = strip_tags(filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING));
		
		if($email == ''){}
		else{
			$this-> conn()->prepare("SELECT id FROM usuario WHERE email = ?");
			$this-> conn()->execute(array($email));
			if($this-> conn()->rowCount() == 0){
				echo '<script>alert("Usuário não encontrado")</script>';
			}else{
				$fetch = $this-> conn()->fetchObject();
				$_SESSION['id_user'] = $fetch->id;
				echo '<script>alert("Logado com sucesso.");location.href="chat.php"</script>';
			}
		}
	endif;
?>
<div id="formulario">
	<span>Digite o seu E-mail</span>
	<form action="chat.php" method="post" enctype="multipart/form-data">
		<label>
			<input type="text" name="email" />
		</label>
		<input type="hidden" name="acao" value="logar" />
		<input type="submit" value="Logar" />
	</form>
</div>
</body>

No caso se eu digito qualquer coisa no campo e-mail e clico em logar ele já direcionado para a pagina chat.php sem fazer nenhum validação.

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - Você não deve confiar em rowCount.

 

2 - troque a consulta por [inline]select count(id) from usuario where email = ?[/inline]

 

3 - Você insiste em utilizar aquele singleton, mesmo conectando de outra forma. A essa altura do campeonato, eu não sei se [inline]$this->conn[/inline] retorna um PDO, um MySQLi ou um MySQL.

 

4 - PDO/MySQLi::prepare retorna um statement. É neste objeto retornado que deve ser trabalhado daqui pra frente

$statement = $this->conn()->prepare('consulta');
$statement->execute();
$statement->...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.