Ir para conteúdo

POWERED BY:

Arquivado

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

Fabyo

Módulo 07

Recommended Posts

Curso de PHP online

 

Modulo 7

 

Introdução

 

o Estatisticas

o Dicas diversas sobre funções php para usar com Mysql

o Dicas basicas sobre configuração do phpMyAdmin

o SQL

o Montando um sistema de cadastro de funcionarios

 

 

Estatisticas

 

Vamos aprender um pouco como pegar e tratar varias informações uteis para ser usado em determinados momentos

só lembrando que o php roda no servidor então a maioria das informações que você conseguir será do próprio servidor

tirando as variaveis de ambiente.

E não falarei sobre as coisa basicas como contador e datas, vou mostrar outras funções pouco conhecidas de alguns

 

Para pegar o IP do visitante:

 

$ip = $_SERVER["SERVER_ADDR"];
ou
$ip = getenv("REMOTE_ADDR");

 

getenv -- Obtém uma variável de ambiente

 

Para pegar o IP de um site:

 

$ip = gethostbyname('www.example.com');

 

Para pegar meta_tags de um site

 

get_meta_tags -- Extrai as informações das tag meta de um arquivo e retorna como uma matriz

 

O que get_meta_tags() interpreta

 

<meta name="author" content="name">
<meta name="keywords" content="php documentation">
<meta name="DESCRIPTION" content="a php manual">
<meta name="geo.position" content="49.33;-86.59">
</head>

 

// Assumindo que as tags acima estão em www.example.com

$tags = get_meta_tags('http://www.example.com/');

 

print $tags['author'];	   // name
print $tags['keywords'];	 // php documentation
print $tags['description'];  // a php manual
print $tags['geo_position']; // 49.33;-86.59

 

Pegar o nome do navegador e a versão

 

$_SERVER["HTTP_USER_AGENT"];

 

no navegador Internet Explorer ficara assim:

 

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)

 

no navegador mozilla Firefox:

 

Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox /0.10

 

Em no Internet explorer ele mostra MSIE 6.0 e no Mozilla Firefox /0.10

nome e versão

 

Pegando O endereço da página da onde veio o visitante

 

echo $_SERVER["HTTP_REFERER"];

 

O endereço da página (se houver) através da qual o agente do usuário acessou a página atual. Essa diretiva é informada pelo agente do usuário. Nem todos os browsers geram esse header, e alguns ainda possuem a habilidade de modificar o conteúdo do HTTP_REFERER como recurso. Em poucas palavras, não é confiável.

 

Para pegar a resolução do monitor

usaremos javascript porque o php nao roda do lado do cliente e sim no servidor

 

<script language="javascript">
document.write("Resolucao	 : ",screen.width,"x",screen.height,"<p>");
</script>

 

Para pegar o total de espaço em disco no servidor

 

$kb = 1024;		// Kilobyte
$mb = 1024 * $kb;  // Megabyte
$gb = 1024 * $mb;  // Gigabyte
$tb = 1024 * $gb;  // Terabyte

 

$espaco_total = disk_total_space("/");
$total_disco   = round($espaco_total / 1024000, 2);

$disco = diskfreespace("/");
$espaco_livre = round($disco / 1024000, 2);

 

Para pegar versões do PHP e Mysql e Apache

 

mysql_get_server_info();
phpversion();
$_SERVER["SERVER_SOFTWARE"];

 

Você pode formatar o resultado que melhor visualização exemplo:

 

$versao_mysql = preg_replace("/[^0-9.]/", "", mysql_get_server_info());
$versao_php   = phpversion();
$programa_servidor = $_SERVER["SERVER_SOFTWARE"];
$programa_servidor = strtok($programa_servidor, " ");

echo "Mysql $versao_mysql<br />";
echo "PHP $versao_php<br />";
echo str_replace("/", " ", $programa_servidor);

 

strtok() divide uma string (arg1) em strings menores (tokens), com cada token sendo delimitado por

qualquer caractere de arg2. Quer dizer que, se você tem uma string como "Esta é uma string de exemplo" você

poderia "tokenizá-la" em suas palavras individuais usando o caractere de espaço como delimitador do token.

 

Para ver se o php esta sendo executado como modulo ou cgi:

 

$sapi_type = php_sapi_name();
if ($sapi_type == "cgi"){
print "Você esta usando CGI PHP\n";
}else{
print "Você não esta usando CGI PHP\n";
}

Exibindo o status do mysql:

 

$status = explode('  ', mysql_stat($cn));
print_r($status);

 

Dicas diversas sobre funções php para usar com Mysql

 

Para pegar o nome e a senha de acesso ao Mysql

 

Calma pessoal isso não tem nada haver com dicas hackers é apenas para mostrar para quem não conhece que

o mysql tem um banco dentro da pasta data chamado mysql onde ele guarda as informações de usuarios, senhas, privilégios, helps, informações do

servidor, etc...

 

mysql_connect("localhost", "usuario", "senha");
mysql_select_db("mysql");
$re = mysql_query("SELECT user,password,host FROM user");

//listando todos os usuarios e senhas de acesso ao mysql cadastrados
while($l = mysql_fetch_array($re))
{
echo $l["user"]."<br />";
echo $l["password"]."<br />";
}

 

Listando todos os banco de dados do servidor mysql:

 

mysql_connect("localhost", "usuario", "senha");
$db_list = mysql_list_dbs();
$cnt = mysql_num_rows($db_list);

for($i = 0; $i < $cnt; $i++)
{
echo mysql_db_name($db_list, $i) . "<br />\n";
}

outra maneira de listar os bancos:

 

mysql_connect("localhost", "usuario", "senha");
$db_list = mysql_list_dbs();

while ($row = mysql_fetch_object($db_list)) {
echo $row->Database . "<br />\n";
}

 

Listando todas tabelas de um banco:

 

mysql_connect("localhost", "usuario", "senha");
$result = mysql_list_tables("banco");

for ($i = 0; $i < mysql_num_rows($result); $i++)
{
echo "Tabelas: ". mysql_table_name($result, $i)."<br />";
}

 

Listando todos os campos de uma tabela:

 

$cn = mysql_connect("localhost", "usuario", "senha");
$fields = mysql_list_fields("banco", "tabela", $cn);
$columns = mysql_num_fields($fields);

for ($i = 0; $i < $columns; $i++) {
echo mysql_field_name($fields, $i) . "<br />";
}

 

Pegando toda informação de cada campo de uma tabela

 

mysql_select_db("banco");	
$result = mysql_query("select * from tabela");

$i = 0;
while ($i < mysql_num_fields($result)) {
echo "Informação para a coluna $i:<br />\n";
$meta = mysql_fetch_field($result,$i);
if (!$meta) {
	echo "Informação não disponivel<br />\n";
}
echo "<pre>
blob:		 $meta->blob
max_length:   $meta->max_length
multiple_key: $meta->multiple_key
name:		 $meta->name
not_null:	 $meta->not_null
numeric:	  $meta->numeric
primary_key:  $meta->primary_key
table:		$meta->table
type:		 $meta->type
unique_key:   $meta->unique_key
unsigned:	 $meta->unsigned
zerofill:	 $meta->zerofill
</pre>";
$i++;
}

 

$result = mysql_query("SELECT * FROM tabela");
$fields = mysql_num_fields($result);
$rows   = mysql_num_rows($result);
$table = mysql_field_table($result, 0);
echo "A  tabela '".$table."' tem ".$fields." colunas e ".$rows." linhas(s)<br />";
echo "A tabela tem esses campos:<br />";
for ($i=0; $i < $fields; $i++) {
$type  = mysql_field_type($result, $i);
$name  = mysql_field_name($result, $i);
$len   = mysql_field_len($result, $i);
$flags = mysql_field_flags($result, $i);
echo $type." ".$name." ".$len." ".$flags."<br />";
}
mysql_free_result($result);
mysql_close();

 

Pegando o conjunto de caracteres do mysql

 

mysql_client_encoding -- Retorna o nome do conjunto de caracteres

 

$charset = mysql_client_encoding($cn);
printf ("Conjunto atual de caracteres é %s\n", $charset);

 

uma dica importante use mysql_unbuffered_query() no lugar do mysql_query()

quando for necessário

 

exemplo:

mysql_connect("localhost", "Fabyo", "gisele");
mysql_select_db("banco");

$re = mysql_unbuffered_query("Select * from tabela");

while($l = mysql_fetch_array($re)){

echo $l["campo"];

}

 

mysql_unbuffered_query() envia uma query SQL para MySQL, sem retornar e colocar em buffer as linhas do resultado automaticamente, como mysql_query() faz. por um lado, isto salva uma quantidade considerável de memória em query que produzem um resultado grandes. por outro lado, você pode começãr a trabalhar com o resultado imediatamente após a primeira linha ser retornada: você não tem que esperar que toda a query SQL seja realizada. Quando usar multiplas conexões com o banco de dados, você deve especificar o parametro opcional link_identifier.

 

Nota: Os beneficios de mysql_unbuffered_query() vem com um custo: você não pode usar mysql_num_rows() e mysql_data_seek() no resultado retornado por mysql_unbuffered_query(). Você também tem que pegar todas as linhas de uma query SQL sem buffer antes de poder enviar uma nova query SQL para o MySQL.

 

 

mysql_escape_string -- Escapa uma string para uso com o mysql_query.

 

Esta função irá escapar o texto assim será seguro coloca-la na função mysql_query() evitando sql_injection

 

Dicas basicas sobre configuração do phpMyAdmin

 

Onde baixar phpMyAdmin

 

O que é phpMyAdmin?

 

o phpMyAdmin é um script feito em php para gerenciar o banco de dados mysql

com o phpMyAdmin você consegue criar banco de dados, criar tabelas,campos

e editar salvar e excluir , fazer consultas e otimizar e reparar o banco, importar e exporar o banco, etc...

 

depois que você baixou o phpMyAdmin entre no config.inc.php

e ache essas linhas:

 

$cfg['Servers'][$i]['user']		  = 'root';	 // MySQL user
$cfg['Servers'][$i]['password']	  = '';	// MySQL password (only needed

 

mude para seu usario e senha do mysql

 

entre no php.ini e descomente essa linha:

extension=php_mbstring.dll

 

reinicie o apache

 

se você quiser acessar o seu phpMyAdmin usando Autenticação HTTP

você pode só entrar no config.inc.php e ache essa linha e mudar para http:

 

$cfg['Servers'][$i]['auth_type']	 = 'http';	  // Authentication method (config, http or cookie based)?

 

dai quando você for entrar no phpMyAdmin ele ira pedir nome e senha

 

se for usar as funções novas do mysql o (mysqli) mude essa linha:

 

$cfg['Servers'][$i]['extension']	 = 'mysqli';	 // The php MySQL extension to use ('mysql' or 'mysqli')

 

se desejar que apareça apenas 1 banco para ser acessado pelo phpMyAdmin

mude essa linha:

 

$cfg['Servers'][$i]['only_db']	   = '';		  // If set to a db-name, only

 

e coloco o nome do banco que você quer

 

 

SQL

 

Structured Query Language

 

Linguagem Estruturada de Consulta

SQL não é uma linguagem para se desenvolver sistemas e sim para facilitar o acesso de informações, por meios de consultas, atualizações e manipulações de dados armazenados em bancos de dados do tipo relacional.

 

um banco de dados do tipo relacional armazena os dados e informações em tabelas que são formadas por linhas e colunas.

Atualmente os programas de gerenciamento de banco de dados (SGDB - Sistema de Gerenciamento de Banco de Dados) utilizam o SQL para consultas e manuseio de dados, mas com pequenas diferenças entre cada SGBD

em funções e melhorias mas o principal é a sintaxe SQL em todos eles como padrão.

 

O SQL foi criado pela empresa IBM (Internacional Business Machine) sua primeira versão foi criada em 1974, com o nome de Structured English Query Language(SEQUEL).

A Linguagem SQL é composta por dois grupos de instruções utilizadas no processo

de administração e controle de bancos de dados o DDL (Data Definition Language )

Linguagem de Definição de Dados e DML (Data Manipulation Language) Linguagem de Manipulação de Dados.

As instruções do tipo DDl permite efetuar a criação das estruturas de tabelas, índices e bancos de dados como um todo, permite também efetuar auterações nas estruturas criadas, e remover estruturas.

Nesse grupo estão as instruções:

CREATE TABLE, DROP TABLE, ALTER TABLE, CREATE INDEX e DROP INDEX.

As instruções do tipo DML permitem efetuar a manipulação dos dados que estejam armazenados nas tabelas de um determinado banco, dessa forma é possivel cadastrar, alterar, e excluir registros , nesse grupo se encontra:

INSERT, SELECT, UPDATE e DELETE.

 

De todos os comando existentes o comando SELECT é o mais importante e utilizado, pois é com ele que se obtém a extração de lista de informações.

Os comando do tipo DML possuem uma grande variedades de aplicação.

Para que isso ocorra, eles operam com um grande conjunto de cláusulas

FROM, WHERE, GROUP BY, HAVING e ORDER BY predefinidos que permitem efetuar a aplicação de condições que autera a forma de funcionamento

 

Chave Primaria

O conceito de chave primária (ID) ou (PK) chave primaria em inglês ,está associado ao campo ou conjunto de campos de uma tabela que possuirá um único valor, que não será repetido.

 

Chave Estrangeira

Chave Estrangeira (FK) caracteriza-se por ser uma chave de uma tabela que possui associação com chave primária de outra tabela.

 

Integridade referencial é um mecanismo utilizado que evita a quebra de ligação entre os relacionamentos estabelecidos entre as tabelas

apesar do mysql ainda nao ter esse recurso como padrão nós podemos montar

a integridade referencial atraves do php ,como voc^vai ver no script de cadastro de funcionarios no final do curso.

 

Criando um banco no mysql:

 

CREATE DATABASE banco

 

Criando a tabela:

 

CREATE TABLE tabela(
campo tipo NULL/NOT NULL DEFAULT valor
AUTO_INCREMENT PRIMARY KEY
);

 

NULL e NOT NULL = é definição de um campo em aceitar ou não valores nulos

DEFAULT valor = permite determinar um valor padrão para o campo

AUTO_INCREMENT = determina se o campo será preenchido automaticamente

vale apenas para campos que aceitam valores inteiros

PRIMARY KEY = determina qual será a chave primária da tabela

 

tipos de campos = o SQL trabalha com diversos tipos de dados mas com 3 grupos distintos(tipo numéricos, tipo temporal e tipo literal).

 

tipos numericos podem ser utilizados no tratamento de valores numericos inteiros ou reais:

SMALLINT = -32.768 até 32.767 pode ser usado um campo sem sinal (unsigned)

aumentando o tamanho para 255 positivo

INTEGER = -2.17.483.648 até 2.147.483.674 também pode usar unsigned

FLOAT = 3,4* 10 -³ até 3,4 * 10 ³

DECIMAL = Campo usado para guardar valores monetarios

NUMERIC,DOUBLE

 

Tipos temporal

O tipos temporal pode ser utilizado para o tratamento de valores relacionados a data e hora

DATE = Utilizado para guardar data no padrão AAAA-MM-DD

TIME = Utilizado para guardar hora

DATETIME = Utilizado para guardar data e hora junto

 

Tipo literal

O tipo literal pode ser usado na recepção de valores baseados em cadeias de caracteres (strings) dados alfa numericos

VARCHAR = caracter variavel

CHAR = caracter fixo

TEXT = para guardar textos grandes

 

não entrarei mais em detalhes sobre esse assunto porque está para extreiar o novo curso online de MYSQL então qualquer duvidas sobre esse assunto aguarde o curso

 

Montando um sistema de cadastro de funcionarios

 

criando uma tabela de funcionarios:

 

<?
mysql_query("
CREATE TABLE funcionarios (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
nome VARCHAR( 40 ) NOT NULL ,
endereco VARCHAR( 64 ) NOT NULL ,
rg VARCHAR( 10 ) NOT NULL ,
cpf CHAR( 11 ) NOT NULL ,
data_registro DATE NOT NULL ,
fk_cargo SMALLINT UNSIGNED NOT NULL ,
salario DECIMAL( 10, 2 ) NOT NULL ,
casado SET( 'S', 'N' ) NOT NULL ,
dependentes SET( 'S', 'N' ) NOT NULL ,
data_nasc DATE NOT NULL ,
PRIMARY KEY ( id ) 
)");
?>

 

criando a tabela de cargos:

 

<?
mysql_query("
CREATE TABLE cargos (
 id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
 cargo VARCHAR(40) NOT NULL,
 PRIMARY KEY (id)
)");
?>

 

no cadastro tem um combo preenchido com os dados de um banco de dados

(cargos)

cadastro.php:

 

<html>
<head>
<title>Cadastro</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="form1" method="post" action="salvar.php">
 <table width="200" border="0" align="center">
<tr>
  <td>Nome</td>
  <td><input name="nome" type="text" id="nome" maxlength="40"></td>
</tr>
<tr>
  <td>Endereço</td>
  <td><input name="endereco" type="text" id="endereco" maxlength="64"></td>
</tr>
<tr>
  <td>RG</td>
  <td><input name="rg" type="text" id="rg" maxlength="10"></td>
</tr>
<tr>
  <td>CPF</td>
  <td><input name="cpf" type="text" id="cpf" maxlength="11"></td>
</tr>
<tr>
  <td>Cargo</td>
  <td><select name="cargos" id="cargos">
  <option value="Selecione">Selecione</option>
  <?
  mysql_connect("localhost", "Fabyo","gisele");
  mysql_select_db("banco");

  $re = mysql_query("SELECT * FROM CARGOS");

  while($l = mysql_fetch_array($re))
  {
 $id	= $l["id"];
 $cargo = $l["cargo"];
 echo "<option value=\"$id\">$cargo</option>";
  }
  ?>   
  </select></td>
</tr>
<tr>
  <td>Salario</td>
  <td><input name="salario" type="text" id="salario"></td>
</tr>
<tr>
  <td>Casado(a)</td>
  <td><input name="casado" type="checkbox" id="casado" value="S">
	Sim</td>
</tr>
<tr>
  <td>Dependentes</td>
  <td><input name="dependentes" type="checkbox" id="dependentes" value="S">
  Sim</td>
</tr>
<tr>
  <td>Data Nasc. </td>
  <td><input name="data_nasci" type="text" id="data_nasci" size="10" maxlength="10"></td>
</tr>
<tr>
  <td> </td>
  <td><input type="submit" name="Submit" value="Salvar"></td>
</tr>
 </table>
</form>
</body>
</html>

 

O salvar.php é onde será recebido os dados digitados pelo usuario

então recomendo você proteger os dados e filtrar para passar somente o esperado

exemplo:

usando stript_tags() você tira as tags html ,dai o usuario mal intencionado não poderá prejudicar seu banco de dados com comandos html e javascript

 

is_numeric() = use para validar campos numericos

empty() use para validar campos vazios

checkdate() use para validar datas

mysql_escape_string Escapa uma string para uso com o mysql_query.

e proteja os dados tambem com javascript muito util para validar campos antes de enviar

 

procure por funções que validam cpf, cnpj, emails etc... ou faça você mesmo

evite gravar dados repetidos antes de gravar faça uma busca se nao existir o dados dai sim você deixa gravar , e sobre integridade relacional é quando você por exemplo grava um funcionario com cargo "ajudante" ,dai depois você quer excluir o cargo "ajudante" da tabela cargos, por logica não poderia ja que esse campo foi gravado como indicação para o funcionario dai nao teria logica ele ser "ajudante" se o campo não existe mais ,e como o mysql não tem esse recurso automatico você pode montar um é simples basta antes de executar a exclusão você fazer uma pesquisa se esse campos esta gravado em algum lugar da tabela funcionarios dai se não tiver você deixa excluir se tiver você da uma mensagem dizendo que esse campos não pode ser excluido pois existe um relacionamento com ele.

dica final = nunca esqueça de validar os campos nem sempre a pessoa vai digitar o que você espera que ela digite.

 

salvar.php:

<?

// seto as variaveis = N pq se o checbox nao for marcado ele nao existira
//entao sera gravado a opcao N = NAO, se o checbox for marcado será salvo S
$casado	  = "N";
$dependentes = "N";

//aqui pego todos os dados e aina crio a variavel com o mesmo nome e tiro as tags html
foreach ($_POST as $campo => $valor) { $$campo = strip_tags($valor);}

mysql_connect("localhost");
mysql_select_db("banco");

mysql_query("INSERT INTO funcionarios VALUES ('', '$nome', '$endereco', '$rg', '$cpf', NOW(), '$cargos', '$salario', '$casado', '$dependentes', '$data_nasci')");

mysql_close();

echo "salvo com sucesso";

?>

 

opcoes você pode listar os funcionarios junto com as opções de editar e excluir usando o id

 

opcoes.php

 

<?
  mysql_connect("localhost");
  mysql_select_db("banco");

  $re = mysql_query("SELECT * FROM funcionarios");

  while($l = mysql_fetch_array($re))
  {
 $id	= $l["id"];
 $nome = $l["nome"];
 echo "<a href=\"excluir.php?id=$id\">Excluir</a> | <a href=\"editar.php?id=$id\">Editar</a> $nome<br />";
  }
?>

 

excluir.php

 

<?
  mysql_connect("localhost");
  mysql_select_db("banco");

  $id = $_GET["id"];
  mysql_query("DELETE FROM funcionarios WHERE id= '$id'");
  header("Location: opcao.php");

?>

 

Agora pra quem quiser acabar esse sistema de cadastro de funcionários fica como parte dos exercicios, no modulo passado eu dei um sistema completo com editar excluir e salvar caso tenham duvidas só pesquisar nele

mas quem está acompanhando consegue ver que está ficando facil e não é dificil acabar esse sistema falta só o editar, listar ,criar um formulario pra salvar os cargos, e se quiser ainda pode usar as dicas que eu dei acima e proteger o sistema contra exclusão de dados relacionados e valida os campos

quem quiser fazer e entregar ele será avaliado e corrigido

só avisando pra quem não sabe o melhor usuario que esti er acompanhando as aulas e participando dos exercicios ganhará um prêmio surpresa e seu nome ficara numa lista dos que concluiram o curso com sucesso, ficando até como referencia para vocês caso precisem mostrar para algum cliente ou até seu futuro chefe o seu conhecimento em php.

 

Bons estudos e até a próxima aula

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara você é muito fera em Linguaguens de programação..!

Obrigado por me ensinar esses macetes!

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Esse curso tá massa!!!

Valeu...

E por favor continue passando seu conhecimento! até+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito massa esses tutoriais. Agora eu tó entendo muito mais PHP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este script está legal mesmo, mas o meu "header" não funcionou no script de excluir, tem alguma solução?Valeu :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, eu estou com problemas na hora de salvar os meus dados, o erro está em fk_cargo, eu estava fazendo testes no Browser mesmo e ele não estava salvando, foi entãoq ue eu decedi ir até o MySQL Query Browser pra ver aonde estava o erro e quando eu mando ele inserir na tabela a seguinte mensagem é exibida na tela:

"Data truncated for column 'fk_cargo' at row 1

Será que eu não estou sabendo definir a chave estrangeira?Eu sei que o curso já começou faz tempo, mas é que eu só tomei conhecimento dele agora e ficaria muito agradecido se algm pudesse me ajudar.Abraços

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.