mar
20
2009
0

Minicurso PHP: 2ª Parte – Configurando Apache + PHP + MySQL

INSTALANDO O APACHE + PHP + MySQL no Windows XP – Módulos separados

Muita gente antes de mim já escreveu tutoriais de instalação e configuração da tríade PHP, Apache e MySQL. Inclusive eu sempre recomendo aos meus alunos o seguinte tutorial do site Linha de Código (uma ótima leitura, diga-se de passagem). Não irei reinventar a roda e criar o meu próprio tutorial. Seria perda de tempo. Ao invés disso vou postar uma vídeo-aula da instalação e configuração dessa tríade, seguindo o artigo do Linha de Código. Em primeiro lugar baixe os programas necessários:

Apache – http://www.baixaki.com.br/download/apache-for-windows.htm
PHP – http://www.baixaki.com.br/download/php.htm
MySQL – http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-noinstall-5.1.32-win32.zip/from/http://mysql.cce.usp.br/

Agora assista as vídeo-aulas e configure a tríade:


Instalando e Configurando PHP + Apache + MySQL – Parte 1 from Diego Marques on Vimeo.


Instalando e Configurando PHP + Apache + MySQL – Parte 2 from Diego Marques on Vimeo.

USANDO UM INSTALADOR AUTOMÁTICO

Se você não conseguir instalar a tríade com o tutorial anterior, pode fazer uso de um instalador automático: um software que instala automaticamente todo o pacote. Se por um lado fica mais fácil instalar o pacote completo, por outro você tem o fato de nem sempre as versões do Apache, PHP e MySQL serem as mais atuais. Mas é uma boa forma de começar a trabalhar, tendo em vista a importância de aprender a usar os módulos de forma separada no futuro. Veja abaixo a lista dos principais instaladores automáticos do mercado:

WAMP – http://www.baixaki.com.br/download/wamp5.htm
EasyPHP – http://www.baixaki.com.br/download/easyphp.htm
XAMPP – http://www.baixaki.com.br/download/xampp.htm

mar
13
2009
10

Conectando ao MySQL com PHP – Parte IV: Ajustes Finais

Olá Pessoal,

Bem, nos tutoriais passados vimos como integrar o PHP ao banco de dados. Criamos um exemplo bem simples de inserção, atualização, exclusão e listagem de conteúdo a partir de dados oriundos do MySQL. Ainda tem muito mais coisa pra se ver sobre esse assunto? Sim, tem. Vou tratar disso hoje? Não. Quero que primeiro esse conteúdo “caia no sangue” de todos vocês. Hoje vamos apenas fazer alguns ajustes naquele micro-sistema que fizemos nos últimos dias. Para começar: repararam que em todas as páginas repetimos as funções de conexão ao banco e seleção de database? Para evitar isso, iremos colocar esse trecho de código em uma página separada, chamada “conexao.php” (salve o arquivo dentro da pasta includes) e iremos chamá-la a partir de um include em todas as páginas que precisem fazer consultas ao banco de dados. Veja como ficarão nossos códigos:

CONEXAO.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//Conecto-me ao servidor MySQL
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
}
?>

VALIDA.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//Conecto ao banco
include "includes/conexao.php";
if ($_GET["acao"] == "insere") {
//Monto minha query de inserção de dados - fizemos isso no primeiro tutorial
$sql = "INSERT INTO conteudo(titulo, conteudo) VALUES('".$_POST["titulo"]."', '".$_POST["conteudo"]."')";
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi inserido com sucesso
if ($query == true) {
    echo "Registro inserido com sucesso";
}
else {
    echo "Não foi possível inserir seu registro";
}
}
[...]
?>

LISTA.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
[...]
//Conecto ao banco
include "includes/conexao.php";
//Monto minha query
$sql = "SELECT idconteudo, titulo FROM conteudo";
//Executo a minha query
$query = mysql_query($sql);
if ($query <> false) {
while($dados = mysql_fetch_array($query)) {
echo "<li><strong>".$dados["titulo"]."</strong> <a href='atualiza.php?id=".$dados["idconteudo"]."'>Editar</a> <a href='valida.php?id=".$dados["idconteudo"]."&acao=deleta'>Excluir</a></li>";
}
}
?>

ATUALIZA.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
[...]
//Conecto ao banco
include "includes/conexao.php";
//Monto a query
                $sql = "SELECT idconteudo, titulo, conteudo FROM conteudo WHERE idconteudo = ".$_GET["id"];
                //Executo a query
                $query = mysql_query($sql);
                //Converto o resource para um array, e percorro esse array
                while($dados = mysql_fetch_array($query)) {
                    $id = $dados["idconteudo"];
                    $tit = $dados["titulo"];
                    $cont = $dados["conteudo"];
                }
?>

Bem melhor do que repetir aquele monte de código em todas as páginas, né não? Um outro pequeno ajuste: reparem que na página “valida.php”, escrevemos na tela uma mensagem de sucesso ou erro para inserção, atualização ou exclusão. Que tal se ao invés de escrever uma mensagem simples na tela, a gente redirecionasse o usuário para a página de onde ele veio, escrevendo uma mensagem estilizada e apresentável? Muito mais profissional, não acha? E pra isso vamos precisar apenas da função header(”Location: url_da_pagina”) e passar um parâmetro pela URL. Nada de outro mundo. Veja o resultado final:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
include "includes/conexao.php";
 
if ($_GET["acao"] == "insere") {
//Monto minha query de inserção de dados - fizemos isso no primeiro tutorial
$sql = "INSERT INTO conteudo(titulo, conteudo) VALUES('".$_POST["titulo"]."', '".$_POST["conteudo"]."')";
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi inserido com sucesso
if ($query == true) {
    header("Location: insere.php?msg=sucesso");
}
else {
    header("Location: insere.php?msg=erro");
}
}
 
else if($_GET["acao"] == "deleta") {
//Monto minha query de exclusão de dados
$sql = "DELETE FROM conteudo WHERE idconteudo = ".$_GET["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    header("Location: lista.php?msg=sucesso");
}
else {
    header("Location: lista.php?msg=erro");
}
}
 
else if($_GET["acao"] == "atualiza") {
//Monto minha query de exclusão de dados
$sql = "UPDATE conteudo SET titulo = '".$_POST["titulo"]."', conteudo = '".$_POST["conteudo"]."' WHERE idconteudo = ".$_POST["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    header("Location: atualiza.php?msg=sucesso&id=".$_POST["id"]);
}
else {
    header("Location: atualiza.php?msg=erro&id=".$_POST["id"]);
}
}
?>

Reparem que estou redirecionando o usuário para a página de onde ele veio, conforme a ação a ser executada, passando um parâmetro MSG, com um valor “sucesso” ou “erro”. Esses valores serão recebidos pela URL, e o sistema fará uma noticação ao usuário. No caso de “atualiza.php” estou retornando o ID como parâmetro adicional, pois a página precisa receber esse valor pela URL para executar uma query (programamos isso no tutorial passado). Veja agora como ficarão as páginas “insere.php”, “lista.php” e “atualiza.php”:

INSERE.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div id="corpo">
        <?php
            include "includes/topo.php";
            include "includes/menu.php";
        ?>
        <h2>Insere Conteúdo</h2>
        <?php
            if ($_GET["msg"] == "sucesso") {
                echo "<h3>* Inserção realizada com sucesso</h3>";
            }
            else if ($_GET["msg"] == "erro") {
                echo "<h3>* Erro ao inserir seu registro</h3>";
            }
        ?>
        <form id="form" action="valida.php?acao=insere" method="post">
            <label for="titulo">Título: <input type="text" name="titulo" /></label>
            <label for="conteudo">Conteúdo: <textarea name="conteudo"></textarea></label>
            <button type="submit">CADASTRAR</button>
        </form>
        </div>

LISTA.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<div id="corpo">
        <?php
            include "includes/topo.php";
            include "includes/menu.php";
        ?>
        <h2>Insere Conteúdo</h2>
        <?php
            if ($_GET["msg"] == "sucesso") {
                echo "<h3>* Exclusão realizada com sucesso</h3>";
            }
            else if ($_GET["msg"] == "erro") {
                echo "<h3>* Erro ao excluir seu registro</h3>";
            }
        ?>
        <ul id="lista">
            <?php
                //Incluo o arquivo para conexão ao banco de dados - mysql_connect() e mysql_select_db()
                include "includes/conexao.php";
                //Monto a query para selecionar registros no banco
                $sql = "SELECT idconteudo, titulo FROM conteudo";
                //Executar a query $sql. Por ser um SELECT, ela me retornará um resource em caso de sucesso. Um resource é um tipo de dados especial do PHP, onde estarão contidos todas as informações retornadas pelo SELECT. Só que eu não poderei acessar esses dados através do RESOURCE.
                $query = mysql_query($sql);
                //Converter o resource retornado por mysql_query() em um formato legível: um array. Pra isso eu uso a função mysql_fetch_array(). Essa função retornará um array com todos os dados do resource, ou seja, todos os dados do banco. Para percorrer o array eu uso o loop WHILE. Enquanto houver dados no array, o loop irá continuar
                while($dados = mysql_fetch_array($query)) {
                    //Aqui eu imprimo os dados obtidos no banco, sob a forma de uma lista, volta à volta do loop
                    echo "<li><strong>".$dados["titulo"]."</strong><a href='atualiza.php?id=".$dados["idconteudo"]."'>Editar</a><a href='valida.php?id=".$dados["idconteudo"]."&acao=deleta'>Excluir</a></li>";
                }
            ?>
        </ul>
</div>

ATUALIZA.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<div id="corpo">
        <?php
            include "includes/topo.php";
            include "includes/menu.php";
        ?>
        <h2>Atualiza Conteúdo</h2>
        <?php
            if ($_GET["msg"] == "sucesso") {
                echo "<h3>* Atualização realizada com sucesso</h3>";
            }
            else if ($_GET["msg"] == "erro") {
                echo "<h3>* Erro ao atualizar seu registro</h3>";
            }
        ?>
        <form id="form" action="valida.php?acao=atualiza" method="post">
            <?php
                //Conecto ao banco
                include "includes/conexao.php";
                //Monto a query
                $sql = "SELECT idconteudo, titulo, conteudo FROM conteudo WHERE idconteudo = ".$_GET["id"];
                //Executo a query
                $query = mysql_query($sql);
                //Converto o resource para um array, e percorro esse array
                while($dados = mysql_fetch_array($query)) {
                    $id = $dados["idconteudo"];
                    $tit = $dados["titulo"];
                    $cont = $dados["conteudo"];
                }
            ?>
            <label for="titulo">Título: <input type="text" name="titulo" value="<?php echo $tit; ?>" /></label>
            <label for="conteudo">Conteúdo: <textarea name="conteudo"><?php echo $cont; ?></textarea></label>
            <input type="hidden" name="id" value="<?php echo $id; ?>" />
            <button type="submit">ALTERAR</button>
        </form>
</div>

Bem, é isso. Terminamos aqui o nosso tutorial básico/iniciante PHP integrado ao MySQL. Espero ter ajudado vocês a compreender o funcionamento mínimo dessa parte importante do PHP. A partir de agora vou me dedicar a escrever o minicurso de PHP, abordando desde a declaração de variáveis até o que venha a ser classe e objeto. E Orientação a Objetos? Calma cara-pálida! Depois que abordamos o be-a-bá do PHP, SQL, MySQL, JavaScript, XHTML, CSS e DOM (e acredite, isso não vai levar muito tempo), vamos entrar em temas mais complexos como Orientação a Objetos em PHP (com um minicurso à parte etc.). É só aguardar que chegaremos lá.

Abraços,
Diego.

mar
12
2009
8

Conectando ao MySQL com PHP – Parte III: Atualizando e Excluindo registros no banco

Olá Pessoal,

No tutorial passado montamos a página “lista.php”, resgatando do banco os dados da tabela “conteudo”, e exibindo-os sob a forma de uma lista. Nessa lista temos dois links: Editar e Excluir. Esses links nos levarão a duas funcionalidades distintas: Atualização e Exclusão de dados. Reveja o código do ponto onde paramos:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
[...]
//Monto minha query
$sql = "SELECT idconteudo, titulo FROM conteudo";
//Executo a minha query
$query = mysql_query($sql);
if ($query <> false) {
while($dados = mysql_fetch_array($query)) {
echo "<li><strong>".$dados["titulo"]."</strong> <a href='atualiza.php?id=".$dados["idconteudo"]."'>Editar</a> <a href='valida.php?id=".$dados["idconteudo"]."'>Excluir</a></li>";
}
}
?>

Vamos começar a trabalhar com o link EXCLUIR. A idéia é: ao clicar em excluir, o registro selecionado será automaticamente retirado do banco de dados, e desaparecerá da lista. Para excluirmos um registro (uma linha) do banco de dados, será necessário usar o comando DELETE, uma estrutura SQL própria para isso. O DELETE pode registrar um ou mais registros, especificados na cláusula WHERE. No nosso caso iremos excluir apenas uma linha, referente ao conteúdo selecionado na página “lista.php”. Para isso precisaremos da chave-primária referente aquele conteúdo. Essa chave é dada pelo campo “idconteudo”, que é passado pela URL do link EXLCUIR como parâmetro ID: Excluir. Pois bem, cabe agora à página “valida.php” resgatar esse parâmetro passado pelo método GET, e montar a query DELETE. Vamos ao código (iremos trabalhar na página “valida.php” agora – lembre-se que a usamos para fazer a inserção de dados, lá no primeiro tutorial):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
//Conecto-me ao servidor MySQL
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
}
 
//Monto minha query de inserção de dados - fizemos isso no primeiro tutorial
$sql = "INSERT INTO conteudo(titulo, conteudo) VALUES('".$_POST["titulo"]."', '".$_POST["conteudo"]."')";
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi inserido com sucesso
if ($query == true) {
    echo "Registro inserido com sucesso";
}
else {
    echo "Não foi possível inserir seu registro";
}
 
/* -------------------------------------------------------------------
 
INICIO O PROCESSO DE EXCLUSÃO DE DADOS
 
------------------------------------------------------------------- */
 
//Monto minha query de exclusão de dados
$sql = "DELETE FROM conteudo WHERE idconteudo = ".$_GET["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    echo "Registro excluído com sucesso";
}
else {
    echo "Não foi possível excluir seu registro";
}
?>

Ok, excluindo ele está. Mas ele irá primeiro tentar inserir dados, não conseguirá e imprimirá uma mensagem de erro, parando o programa. Bem, eu tenho que fazer algo na minha página de validação, para que ela INSIRA ou EXCLUA conforme a vontade do usuário. Como fazer isso? Simples, basta adicionar uma tomada de decisão na página: se o usuário quer inserir dados, executo a query de inserção, caso ele queira excluir dados, executo a query de exclusão. Ok, mas como saber o que usuário quer? Simples também, basta passar um parâmetro pela URL para a página “valida.php”, indicando a ação a ser executada. Vejo como ficará a página de validação:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
//Conecto-me ao servidor MySQL
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
}
 
if ($_GET["acao"] == "insere") {
//Monto minha query de inserção de dados - fizemos isso no primeiro tutorial
$sql = "INSERT INTO conteudo(titulo, conteudo) VALUES('".$_POST["titulo"]."', '".$_POST["conteudo"]."')";
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi inserido com sucesso
if ($query == true) {
    echo "Registro inserido com sucesso";
}
else {
    echo "Não foi possível inserir seu registro";
}
}
 
else if($_GET["acao"] == "deleta") {
//Monto minha query de exclusão de dados
$sql = "DELETE FROM conteudo WHERE idconteudo = ".$_GET["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    echo "Registro excluído com sucesso";
}
else {
    echo "Não foi possível excluir seu registro";
}
}
?>

Agora basta voltar nas páginas “lista.php” e “insere.php” para adicionar à URL de chamada de “valida.php”, um parâmetro “acao”. Veja como ficarão os códigos:

LISTA.PHP

1
2
3
4
5
6
7
8
9
10
11
12
<?php
[...]
//Monto minha query
$sql = "SELECT idconteudo, titulo FROM conteudo";
//Executo a minha query
$query = mysql_query($sql);
if ($query <> false) {
while($dados = mysql_fetch_array($query)) {
echo "<li><strong>".$dados["titulo"]."</strong> <a href='atualiza.php?id=".$dados["idconteudo"]."'>Editar</a> <a href='valida.php?id=".$dados["idconteudo"]."&acao=deleta'>Excluir</a></li>";
}
}
?>

INSERE.PHP

1
2
3
4
5
6
7
          [...]
<form id="form" action="valida.php?acao=insere" method="post">
       <label for="titulo">Título: <input type="text" name="titulo" /></label>
       <label for="conteudo">Conteúdo: <textarea name="conteudo"></textarea></label>
       <button type="submit">CADASTRAR</button>
</form>
[...]

Pronto. Agora o nosso sistema inclui, seleciona e exclui registros do banco de dados. Só falta atualizar dados de registros já existentes. Reparem que na página “lista.php” temos um link chamado EDITAR. Esse link aponta para a página “atualiza.php” e envia um parâmetro ID (igual ao enviado no link EXCLUIR). Esse parâmetro é a chave-primária “idconteudo” do item que queremos editar. Na página “atualiza.php” resgataremos o parâmetro ID com $_GET["id"] e faremos uma consulta no banco, pegando os dados do registro cuja chave-primária seja igual a $_GET["id"].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
        <form id="form" action="valida.php?acao=atualiza" method="post">
            <?php
                //Conecto ao banco
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
                 }
                //Monto a query
                $sql = "SELECT idconteudo, titulo, conteudo FROM conteudo WHERE idconteudo = ".$_GET["id"];
                //Executo a query
                $query = mysql_query($sql);
                //Converto o resource para um array, e percorro esse array
                while($dados = mysql_fetch_array($query)) {
                    $id = $dados["idconteudo"];
                    $tit = $dados["titulo"];
                    $cont = $dados["conteudo"];
                }
            ?>
            <label for="titulo">Título: <input type="text" name="titulo" value="<?php echo $tit; ?>" /></label>
            <label for="conteudo">Conteúdo: <textarea name="conteudo"><?php echo $cont; ?></textarea></label>
            <button type="submit">ALTERAR</button>
        </form>

Com isso exibimos os dados do registro dentro dos campos de formulário, de forma que o usuário possa visualizar a versão atual dos dados, e assim fazer as alterações que forem necessárias. Uma vez feita todas as modificações o usuário irá disparar o form para a página “valida.php”, informando o parâmetro “acao” com valor “atualiza”. Agora é preparar a página de validação para realizar um UPDATE – comando SQL que atualiza dados no banco. Veja como ficará o código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
//Conecto-me ao servidor MySQL
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
}
 
if ($_GET["acao"] == "insere") {
//Monto minha query de inserção de dados - fizemos isso no primeiro tutorial
$sql = "INSERT INTO conteudo(titulo, conteudo) VALUES('".$_POST["titulo"]."', '".$_POST["conteudo"]."')";
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi inserido com sucesso
if ($query == true) {
    echo "Registro inserido com sucesso";
}
else {
    echo "Não foi possível inserir seu registro";
}
}
 
else if($_GET["acao"] == "deleta") {
//Monto minha query de exclusão de dados
$sql = "DELETE FROM conteudo WHERE idconteudo = ".$_GET["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    echo "Registro excluído com sucesso";
}
else {
    echo "Não foi possível excluir seu registro";
}
}
 
else if($_GET["acao"] == "atualiza") {
//Monto minha query de exclusão de dados
$sql = "UPDATE conteudo SET titulo = '".$_POST["titulo"]."', conteudo = '".$_POST["conteudo"]."' WHERE idconteudo = ";
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    echo "Registro atualizado com sucesso";
}
else {
    echo "Não foi possível atualizar seu registro";
}
}
?>

Repararam na query $sql? Ela não tem um valor para WHERE idconteudo = … Reparem na página “atualiza.php”, não estamos enviando um valor que corresponda à chave-primária do conteúdo que queremos atualizar. Assim sendo, é impossível dizer ao comando UPDATE qual é a linha que ele deve atualizar. Para resolver esse problema, iremos usar um campo oculto de formulário, para enviar o parâmetro ID junto com os demais dados enviados via POST. Veja o código de “atualiza.php”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
        <form id="form" action="valida.php?acao=atualiza" method="post">
            <?php
                //Conecto ao banco
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
                 }
                //Monto a query
                $sql = "SELECT idconteudo, titulo, conteudo FROM conteudo WHERE idconteudo = ".$_GET["id"];
                //Executo a query
                $query = mysql_query($sql);
                //Converto o resource para um array, e percorro esse array
                while($dados = mysql_fetch_array($query)) {
                    $id = $dados["idconteudo"];
                    $tit = $dados["titulo"];
                    $cont = $dados["conteudo"];
                }
            ?>
            <label for="titulo">Título: <input type="text" name="titulo" value="<?php echo $tit; ?>" /></label>
            <label for="conteudo">Conteúdo: <textarea name="conteudo"><?php echo $cont; ?></textarea></label>
            <input type="hidden" name="id" value="<?php echo $id; ?>"
            <button type="submit">ALTERAR</button>
        </form>

O campo oculto
não é visualizado pelo usuário, não ocupa espaço no layout, sua função é apenas armazenar informações relevantes para o sistema. No nosso caso o usaremos para passar o valor do campo “idconteudo” do registro em questão. Veja como ficará a página “valida.php” agora:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
//Conecto-me ao servidor MySQL
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
}
 
if ($_GET["acao"] == "insere") {
//Monto minha query de inserção de dados - fizemos isso no primeiro tutorial
$sql = "INSERT INTO conteudo(titulo, conteudo) VALUES('".$_POST["titulo"]."', '".$_POST["conteudo"]."')";
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi inserido com sucesso
if ($query == true) {
    echo "Registro inserido com sucesso";
}
else {
    echo "Não foi possível inserir seu registro";
}
}
 
else if($_GET["acao"] == "deleta") {
//Monto minha query de exclusão de dados
$sql = "DELETE FROM conteudo WHERE idconteudo = ".$_GET["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    echo "Registro excluído com sucesso";
}
else {
    echo "Não foi possível excluir seu registro";
}
}
 
else if($_GET["acao"] == "atualiza") {
//Monto minha query de exclusão de dados
$sql = "UPDATE conteudo SET titulo = '".$_POST["titulo"]."', conteudo = '".$_POST["conteudo"]."' WHERE idconteudo = ".$_POST["id"];
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi excluído com sucesso
if ($query == true) {
    echo "Registro atualizado com sucesso";
}
else {
    echo "Não foi possível atualizar seu registro";
}
}
?>

Pronto! Agora nosso sistema insere, lista, exclui e atualiza dados no banco. O básico do PHP com MySQL está aí. Veremos na última parte desse tutorial como fazer alguns ajustes operacionais nesse pequeno arquivo. Iremos nos próximos posts, retomar esse assunto, de maneira a aprofundar nossos conhecimentos, e fazer algumas coisas mais legais, e conhecer umas funções novas. Ah! Na próxima parte eu vou postar alguns exercícios para vocês praticarem o que viram até agora. Assim, com um nível mínimo de prática iremos avançar no conteúdo.

Abraços,
Diego.

mar
10
2009
2

Conectando ao MySQL com PHP – Parte II: Selecionando registros no banco

Olá Pessoal,

No tutorial passado criamos um sistema para inserção dos dados de um formulário numa tabela do nosso banco de dados. Vimos como conectar ao MySQL, selecionar um database, montar uma query, executá-la no banco e por fim verificar se deu tudo certo. Hoje vamos resgatar os dados do banco e imprimir na tela: é o caminho inverso. Continuaremos usando os arquivos do último artigo (mesmos arquivos e banco). Abra a página “lista.php”. Você verá o seguinte código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    <div id="corpo">
        <?php
            include "includes/topo.php";
            include "includes/menu.php";
        ?>
        <h2>Insere Conteúdo</h2>
        <ul id="lista">
            <li>
                <strong>Conteúdo...</strong> <a href="#">Editar</a> <a href="#">Excluir</a>
            </li>
            <li>
                <strong>Conteúdo...</strong> <a href="#">Editar</a> <a href="#">Excluir</a>
            </li>
            <li>
                <strong>Conteúdo...</strong> <a href="#">Editar</a> <a href="#">Excluir</a>
            </li>
            <li>
                <strong>Conteúdo...</strong> <a href="#">Editar</a> <a href="#">Excluir</a>
            </li>
        </ul>
    </div>

A primeira coisa a fazer é arrancar os elementos “li”, deixando apenas UM ELEMENTO LI nessa lista. O código ficará assim:

1
2
3
4
5
6
7
8
9
10
11
12
    <div id="corpo">
        <?php
            include "includes/topo.php";
            include "includes/menu.php";
        ?>
        <h2>Insere Conteúdo</h2>
        <ul id="lista">
            <li>
                <strong>Conteúdo...</strong> <a href="#">Editar</a> <a href="#">Excluir</a>
            </li>
        </ul>
    </div>

Agora vamos ao PHP: nesse exercício iremos – extrair dados do banco, e imprimí-los sob a forma de lista, adicionando as funcionalidades “Editar” dados, e “Excluir” dados. O processo é tão simples quanto o anterior, apenas com alguns passos à mais. Em primeiro lugar, iremos nos conectar ao banco, selecionar o database, montar a query e executá-la (o mesmo que fizemos antes, apenas com o diferencial de que a query não é mais um INSERT, e sim um SELECT).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    <div id="corpo">
        <?php
            include "includes/topo.php";
            include "includes/menu.php";
        ?>
        <h2>Insere Conteúdo</h2>
        <ul id="lista">
<?php
//Conecto-me ao servidor MySQL
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
}
 
//Monto minha query
$sql = "SELECT idconteudo, titulo FROM conteudo";
//Executo a minha query
$query = mysql_query($sql);
?>
            <li>
                <strong>Conteúdo...</strong> <a href="#">Editar</a> <a href="#">Excluir</a>
            </li>
        </ul>
    </div>

Até aqui nenhuma novidade, certo? É exatamente a mesma estrutura do tutorial passado. Agora a coisa muda um pouco. A função mysql_query() retorna TRUE em caso de sucesso, se estivermos executando um INSERT, UPDATE, DELETE etc., mas no caso de um SELECT, o valor retornado é outro: é um resource. De forma bem simplista, vou dizer que um resource é um tipo de dados especial, que nesse caso armazena os dados retornados pela consulta ao banco. Acontece que o resource não nos permitirá ler e imprimir esses dados. Será necessário converter isso para um formato “legível”, nesse caso será um array. E o PHP possui uma função para isso: mysql_fetch_array(). Essa função converterá o resource retornado por mysql_query() em um array multidimensional. Vamos ver isso na prática:

1
2
3
4
5
6
7
8
<?php
[...]
//Monto minha query
$sql = "SELECT idconteudo, titulo FROM conteudo";
//Executo a minha query
$query = mysql_query($sql);
$dados = mysql_fetch_array($query);
?>

Ok. Provavelmente seu código ainda não fez muita coisa. E com razão: estamos trabalhando com um array, para percorrê-lo será necessário usar um loop, e aí ter acesso a cada um de seus valores. Existem vários loops, e o de mais fácil compreensão é o while(). Uma vez em loop, teremos acesso a todos os dados do array $dados, e por consequência poderemos imprimí-los, montando nossa lista dinamicamente. Veja o resultado:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
[...]
//Monto minha query
$sql = "SELECT idconteudo, titulo FROM conteudo";
//Executo a minha query
$query = mysql_query($sql);
if ($query <> false) {
while($dados = mysql_fetch_array($query)) {
echo "<li><strong>".$dados["titulo"]."</strong></li>";
}
}
?>

Listou né? Reparem que a função mysql_fetch_array() converte o resource para um array, colocando o nome das colunas da tabela como índices do array, por isso o $dados["titulo"]. Legal, né? Pois é, agora senta, relaxa e releia o tutorial, brinque um pouco com o código, e só vá para as linhas de baixo depois que isso tudo tiver entrado na cabeça… É preciso estar com a matéria bem clara para podermos avançar.

Ját estão afiados? Sim? Que bom! Então vamos em frente!!!

Repararam que existem duas funcionalidades (Excluir e Editar) que não estão listadas no código acima. Vamos resolver isso! Bem, a idéia é bem simples: se o usuário clicar em EXCLUIR, redirecionaremos ele para a página “valida.php”, informando um parâmetro ID pela URL (GET). Esse parâmetro na verdade é o “idconteudo”, chave-primária da tabela “conteudo”. Na página valida receberemos a chave-primária enviada pela URL pelo parâmetro ID, e com esse valor executaremos a query DELETE (mesmo procedimento do INSERT). E a funcionalidade EDITAR? Bem, o procedimento é semelhante: enviaremos o parâmetro ID para a página atualiza.php. A implementação de ambas as funcionalidades fica para a próxima semana. Veja como ficará a implementação na página “lista.php”:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
[...]
//Monto minha query
$sql = "SELECT idconteudo, titulo FROM conteudo";
//Executo a minha query
$query = mysql_query($sql);
if ($query <> false) {
while($dados = mysql_fetch_array($query)) {
echo "<li><strong>".$dados["titulo"]."</strong> <a href='atualiza.php?id=".$dados["idconteudo"]."'>Editar</a> <a href='valida.php?id=".$dados["idconteudo"]."'>Excluir</a></li>";
}
}
?>

Bons estudos e até o próximo tutorial.

Abraços,
Diego.

mar
10
2009
9

Conectando ao MySQL com PHP – Parte I: Inserindo registros no banco

Olá Pessoal,

Vou estreiar o primeiro tutorial técnico do blog! E o tema é um dos pontos onde os alunos de Programação Web apresentam grande dificuldade: as funções para manipulação de bancos de dados MySQL com PHP. Tudo bem, eu deveria começar falando do básico do PHP, mas como minhas turmas atuais brecaram nesse ponto, vou tentar auxiliá-los com esse artigo. Bem, mãos a obra.

Um dos pontos altos para quem trabalha com PHP, ou está estudando essa linguagem, é aprender a conectar o banco de dados e montar aplicações dinâmicas integradas ao MySQL. O PHP tem um conjunto de funções para manipulação do MySQL, e podemos ver todas elas na documentação oficial da linguagem. Existem dezenas de ações e funcionalidades a serem descobertas, mas para iniciar nossos trabalhos usaremos um pequeno número de funções, que são usadas em sequência, formando o que eu chamo de “receita de bolo”. Integrar suas aplicações web ao MySQL é extremamente simples e descomplicado, você só precisa relaxar e curtir o código… :D

Vamos criar uma página que execute uma ação bem simples: inserir um conjunto de dados de um formulário em um tabela do banco de dados. Para isso precisaremos executar os seguintes passos:

  • Conectar ao banco de dados (logar no servidor);
  • Selecionar um database (escolher o banco que iremos trabalhar);
  • Verificar se deu tudo certo;
  • Montar uma query de inserção (escrever um INSERT INTO tabela(colunas) VALUES(valores) – básicão de SQL);
  • Executar essa query no servidor (inserir os dados em uma tabela);
  • Verificar se tudo deu certo.

É só seguir o script acima e tudo dará mais do que certo. Vamos precisar de alguns arquivos para executar esse exercício, e você pode baixá-los aqui. Descompacte essa pasta no seu HTDOCS, ou no diretório virtual do APACHE que você tenha criado (se não sabe o que é isso, joga no HTDOCS mesmo :-) . Nela você vai encontrar alguns arquivos .PHP, com a estrutura HTML dos formulários, uma folha de estilo para dar um visual bonitinho pro negócio, e um arquivo backupBanco.sql. Esse arquivo contém o banco de dados que usaremos nesse tutorial. Execute o “restore” em seu SGBD (o pessoal do SENAC usa o SQLYOG, já você pode usar qualquer outro, mas isso não altera em nada), e crie o database e tabelas. Resolvidos os preparatórios, vamos iniciar o script ali de cima.

CONECTAR AO BANCO DE DADOS

Antes de criarmos e executarmos consultas e inserções em tabelas, é preciso primeiro se conectar ao banco de dados. “Se conectar ao servidor MySQL”, isso assusta eu sei, mas relaxem que é algo super tranquilo. O PHP nos dá uma função própria para isso: ela se chama mysql_connect(). Não vou descrever o uso de cada função, até porque estou linkando cada uma delas à sua página na documentação oficial, apenas explicar sua aplicação. A mysql_connect() admite alguns parâmetros dos quais nos preocuparemos com esses três: “servidor_MySQL”, “usuario” e “senha”. Digamos que seu servidor MySQL seja “localhost”, o usuário para conexão ao banco seja “testeDiego” e a senha “123456″ (claro que você usará uma senha bem mais segura, né?), a função mysql_connect() ficaria assim: mysql_connect(”localhost”, “testeDiego”, “123456″). Simples, né? Se todos os dados estiverem corretos, e a função conseguir se conectar ao banco, ela retornará TRUE; em caso de erro, ela retornará FALSE.

* DICA: A função mysql_error() imprime o texto de erros vindo do banco de dados.

SELECIONAR UM DATABASE

Uma vez conectado ao servidor do banco, precisamos escolher qual o database iremos manipular? Você vai trabalhar com o banco da Locadora? Ou será que é a loja de informática? Ou seria aquele seu projeto de rede social? A questão é: você precisa definir qual é o database que irá trabalhar. Somente selecionado o database poderemos executar nossas querys. O PHP também tem uma função que nos permite selecionar um database: mysql_select_db(). É bem simples o seu funcionamento: abrimos uma conexão ao banco com mysql_connect(), agora precisamos associar um database à conexão ativa. Podemos especificar essa conexão via parâmetro da função, ou simplesmente deixar que ela associe o database selecionado à última conexão aberta. Desse último jeito, teremos que passar o seguinte parâmetro para a função: “conteudo” – onde “conteudo” é o nome do database criado a partir do arquivo “backupBanco.sql”, que vocês fizeram download ainda há pouco. O resultado seria esse: mysql_select_db(”conteudo”). Caso ele encontre o database, o valor retornado pela função é TRUE; caso contrário, ela retorna FALSE.

VERIFICANDO SE ESTÁ TUDO OK

Já vimos como aplicar as funções de conexão ao servidor e seleção de database. Agora vamos aplicá-las em um código PHP montado. O resultado seria esse:

1
2
3
4
<?php
    mysql_connect("localhost", "testeDiego", "123456");
    mysql_select_db("conteudo");
?>

Ok, mas e se houver algum erro? Eu preciso fazer uma verificação mínima! Já que essas funções retornam um booleano em caso de sucesso ou erro, vamos usar uma condicional (if-else) para dotar nosso script de poder decisório. O resultado seria esse:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//Conecto-me ao servidor MySQL
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
}
?>

MONTAR QUERY DE INSERÇÃO

Já conectamos ao banco e selecionamos um database. E agora? Bem, vamos montar a query a ser executada no banco: no nosso caso será um comando INSERT. O comando SQL para essa inserção será: “INSERT INTO conteudo(titulo, conteudo) VALUES(’valorTitulo’, ‘valorConteudo’)”, onde ‘valorTitulo’ e ‘valorConteudo’ são os dados digitados pelo usuário na página “insere.php”. Sendo assim, precisarei resgatar os dados enviados pelo formulário usando o método POST. Para isso usaremos a variável superglobal $_POST[""]. A query ficará assim: “INSERT INTO conteudo(titulo, conteudo) VALUES(’”.$_POST["titulo"].”‘, ‘”.$_POST["conteudo"].”‘)”. Dessa forma minha query irá inserir os dados digitados pelo usuário. Não declaramos o campo “idconteudo”, pois ele é do tipo auto-incremento. O código ficará assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
//Conecto-me ao servidor MySQL
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
}
 
//Monto minha query
$sql = "INSERT INTO conteudo(titulo, conteudo) 
VALUES('".$_POST["titulo"]."', '".$_POST["conteudo"]."')";
?>

EXECUTAR A QUERY

Uma vez montada a query, chega a hora de executá-la. O PHP possui uma função própria para enviar querys ao banco: ela se chama mysql_query(). Essa função recebe como parâmetro uma string contendo a consulta a ser executada, e retorna FALSE em caso de erro, TRUE em caso de sucesso (somente para comandos do tipo INSERT, UPDATE, DELETE etc.), ou um resource em caso de sucesso (somente para comandos do tipo SELECT, DESCRIBE ou EXPLAIN). A nossa função mysql_query() ficaria da seguinte forma: mysql_query($sql). Onde “$sql” é a query de inserção. Vamos ver como fica o código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
//Conecto-me ao servidor MySQL
$conexao = mysql_connect("localhost", "testeDiego", "123456");
//Verifico se a conexão foi bem sucedida
if ($conexao == true) {
//Seleciono o database
$db = mysql_select_db("conteudo");
//Verifico se houve erro ao selecionar o database
if ($db == false) {
//Imprimo a mensagem de erro
echo "Erro na seleção do database: ".mysql_error();
}
}
else {
//Imprimo a mensagem de erro
echo "Erro na conexão: ".mysql_error();
}
 
//Monto minha query
$sql = "INSERT INTO conteudo(titulo, conteudo) 
VALUES('".$_POST["titulo"]."', '".$_POST["conteudo"]."')";
//Executo a minha query
$query = mysql_query($sql);
//Verifico se o registro foi inserido com sucesso
if ($query == true) {
    echo "Registro inserido com sucesso";
}
else {
    echo "Não foi possível inserir seu registro";
}
?>

Pronto! Já temos uma página que recebe dados de um formulário e os insere em uma tabela no banco de dados. Difícil, né? No próximo tutorial vamos melhorar um pouquinho esse código, e ver como extrair dados de um banco usando a query SELECT. Amanhã posto o restante.

Abraços,
Diego.

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com