Jump to content


flavianog

Member Since 03/07/2010
Offline Last Active 03/08/2010, 16:36
-----

Posts I've Made

In Topic: Class.Conexaopdo.Php

06/07/2010, 15:32

Opa... me perdoe.
Realmente eu não tinha notado os prepared statements no código.
Realmente eles ajudam a previnir SQLInjection... mas mesmo assim não é bom confiar somente neles.
Faça a 'limpeza' dos dados no envio dos formulários com javascript e a 'limpeza' na página PHP que vc utiliza para receber os dados... e segurança é a base de um sistema bom, então se previnir nunca é demais.

Sobre o Singleton existem diversas formas de se usar e aplicar ... você pode aplicar em um método ... ou em uma instância da classe que seria o objeto.

Neste caso você está usando em um objeto que ficará com a conexão ... agora você evita o excesso de conexões desnecessárias e usará somente uma o que irá te dar uma performance maior.

^_^

(y)

Espero ter ajudado.

Hunrrum ok André vlw ajudou basto obg

In Topic: Class.Conexaopdo.Php

05/07/2010, 22:17

Ok andre muito obrigado pelas suas dicas vou criar um metodo para tratar essas questoes do SQL Injection e vou pesquisar sobre esse padrão Singleton vlw.

[quote name='André Manoel' date='05/07/2010, 10:55' timestamp='1278338141' post='1001044']
Bem ...

Em relação a desempenho ela influencia na seguinte questão...

Ela não tem um tratamento para a criação de vários objetos.
Ou seja, se você chamar a função conexao diversas vezes... ele criará diversas conexões diferentes com o banco.
Existe um padrão de projeto chamado Singleton que trata esse problema.

E em questão de SQLInjection esta classe não realiza nenhum tratamento.
Então se alguém tentar realizar a invasão utilizando essa técnica ele pode conseguir acesso a todos os dados do banco... e isso não é legal...

Então você pode fazer o seguinte... tratar as entradas de SQL Injection quando você recebe os dados dos formulários ou criar a função para tratamento dentro desta classe...

(y)
[/quote]


André modifiquei a classe para usar Singleton ela esta funcionando ta cadastrando no banco o que eu gostaria de saber é se usei o singleton corretamente se realmente so vai haver uma conexão msm eu chamando diversa vezes esta função e a respeito do SQL injection estou conectando no banco através do pdo usando prepared statment isso num já evita o usao de SQL injection? Mas em todo casado coloque um addslashes no recebimento dos dados :D

class.conexao.php
<?php
define("HOST","localhost");
define("DBNAME","testar");
define("USER","user");
define("PASS","123456");
 class Conexao{
 	
 	private static $PDOinstance;
 	
 	static public function singleton(){
 		if(!isset(self::$instance)){
 			try {
 				
 				self::$PDOinstance = new PDO('mysql:host='.HOST.';dbname='.DBNAME,USER,PASS);
				self::$PDOinstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 				
			}catch (PDOException   $e) {
   				print "Houve um erro com a conexão ao banco de dados <br/> ".$e->getMessage();
			}
 		}
 		
 	}
 	public function inserir($tabela = "",$array =""){
 	$ax = 0;
 		foreach($array as $auxCampoBd => $vlr){
 			if($ax == 0){
 				$campoBd .= $auxCampoBd;
 				$campoBd2 .= "?";
 				$ax = 1;
 			}
 			else{
 				$campoBd .= ",".$auxCampoBd;
 				$campoBd2 .= ",?";
 				
 			}
 			
 		}
 		if($tabela[1] == 1)//se for uma inserçao atravez de um procedure entra aqui
 		$sql = 'call '.$tabela[0].'('.$campoBd2.')';
 		else if($tabela[1] == 2)//Se for uma inserção  direto na tabela entra aqui
 		$sql = ' INSERT INTO '.$tabela[0].'('.$campoBd.') VALUES ('.$campoBd2.') ';
 		
 		try {
 			$i = 1;
 			$query = self::$PDOinstance->prepare($sql);
 			foreach($array as $auxcampo => $auxValor){
 				foreach($auxValor as $auxValor2 => $tipo){
 					$query->bindValue($i++,$auxValor2,$tipo);
 				}
 			}
 			$query->execute();
 		}catch (PDOException $e) {
 			echo $e->getMessage();
 		}
 	
 	}
	 
 }



?>


acesso.php
<?php
include_once 'class.conexao.php';

$tabela[0] = "usuario";
$tabela[1] = 2;

$dados = array();
//     Conluna                                                                                 tipo do vaalor
// na qual o valor                       valor que será inserido                              que será inserido
//  será inserido
$dados['nome'][trim((!get_magic_quotes_gpc()) ? addslashes($_POST['nome']) : $_POST['nome'])] = PDO::PARAM_STR;
$dados["sobrenome"][trim((!get_magic_quotes_gpc()) ? addslashes($_POST['sobrenome']) : $_POST['sobrenome'])] = PDO::PARAM_STR;
$dados["email"][trim((!get_magic_quotes_gpc()) ? addslashes($_POST['email']) : $_POST['email'])] = PDO::PARAM_STR;


Conexao::singleton();//abrindo conexao;
$conexao = new Conexao();
$conexao->inserir($tabela,$dados);
[/quote]

In Topic: [Resultado] Problema Com Resultado Do Script Php

05/07/2010, 02:02

Olá,
Sou novato e estou tendo dificuldade em utilzar um script simples em PHP. Estou tentando enviar o formulário do meu site por e-mail, mas está dando erro.

Alguém pode apontar onde estou errando?

Coloquei abaixo os códigos que usei para análise. Cheguei a enviar para o servidor para testar mas aparece a seguinte mensagem de erro quando envio:

Parse error: syntax error, unexpected '<' in /home/vicservicos/www/enviar.php on line 10


O código que criei com a ajuda de um tutorial foi o seguinte:

<form action="enviar.php" method="post" name="form_contato" id="form_contato">
<table width="80%" border="0" align="center">
<tr bgcolor="#D8E9B4">
<td width="25%"><font color="#000000" size="2" face="Arial, Helvetica, sans-serif"><strong>Nome:</strong></font></td>
<td width="75%">
<input name="nome" type="text" id="nome" size="60" maxlength="80"></td>
</tr>
<tr bgcolor="#D8E9B4">
<td><font color="#000000" size="2" face="Arial, Helvetica, sans-serif"><strong>E-mail:</strong></font></td>
<td>
<input name="email" type="text" id="email" size="60" maxlength="80"></td>
</tr>
<tr bgcolor="#D8E9B4">
<td><font color="#000000" size="2" face="Arial, Helvetica, sans-serif"><strong>Assunto:</strong></font></td>
<td>
<input name="assunto" type="text" id="assunto" size="60" maxlength="100"></td>
</tr>
<tr bgcolor="#D8E9B4">
<td valign="top"><font color="#000000" size="2" face="Arial, Helvetica, sans-serif"><strong>Mensagem:</strong></font></td>
<td>
<textarea name="mensagem" cols="60" rows="5" id="mensagem"></textarea></td>
</tr>
<tr bgcolor="#D8E9B4">
<td>&nbsp;</td>
<td>
<input name="Enviar" type="submit" id="Enviar" value="Enviar">
<input name="limpar" type="reset" id="limpar" value="Limpar"></td>
</tr>
</table>
</form>

Meu arquivo enviar.php ficou assim:

<?php
<?php $msg="Nome do usuário:\t$nome\n";?>
<?php $msg="E-maul do usuário:\t$email\n";?>
<?php $msg="Assunto:\t$assunto\n";?>
<?php $msg="Mensagem:\t$mensagem\n";?>
<?php $msg="Enviar:\t$enviar\n";?>
$cabecalho = "Para: DWMX \n";
$cabecalho = "Cc: $email \n\n;"
mail("contato@vicservicos.com" , "Cntato" , $msg , $cabecalho") ;
echo"<h1 align=center>Mensagem enviada com sucesso!, $nome</h1>";
echo"<p align=center>Em breve entraremos em contato.</p>";
?>

Desde já agradeço quem puder me ajudar.



tente assim
<?php
$msg="Nome do usuário:\t$nome\n";
$msg="E-maul do usuário:\t$email\n";
$msg="Assunto:\t$assunto\n";
$msg="Mensagem:\t$mensagem\n";
$msg="Enviar:\t$enviar\n";
$cabecalho = "Para: DWMX \n";
$cabecalho = "Cc: $email \n\n;"
mail("contato@vicservicos.com" , "Cntato" , $msg , $cabecalho") ;
echo"<h1 align=center>Mensagem enviada com sucesso!, $nome</h1>";
echo"<p> align=center>Em breve entraremos em contato.</p>";
?>

IPB Skin By Virteq