Implementando scripts PHP com MySQL

Neste artigo explico como manipular o banco de dados MySQL com PHP, criando páginas para cadastro, edição e listagem dos registros armazenados.

[ Hits: 106.910 ]

Por: Jefferson Estanislau da Silva em 06/06/2004


Introdução



Implementando scripts PHP com MySQL é uma continuidade da série "Gerenciando banco de dados com MySQL", que teve uma boa aceitação pelo público, que me enviou muitos pedidos para demonstrar seu uso com o PHP.

Artigos anteriores:
Neste artigo vou falar de conceitos simples, de nível básico para usuários que estão iniciando no mundo da programação com PHP.

Nota: Aqui eu não abordarei a instalação do PHP ou MySQL, pois estes podem ser adquiridos em artigos como o do cvs:

    Próxima página

Páginas do artigo
   1. Introdução
   2. O que é PHP?
   3. Tipos de dados
   4. Uso de função
   5. Criando um banco de dados para uso em nossos scripts
   6. Fazendo o PHP se comunicar com o MySQL
   7. Criando os HTMLs de interação com o usuário
   8. Conclusão
Outros artigos deste autor

Software Livre - GNU x LPG e o Governo x Economia (parte 1)

História do GNU/Linux: 1965 assim tudo começou!

O maravilhoso Xandros Linux Desktop

GNU/Linux: Depois dele o mundo não é mais o mesmo!

30 motivos para usar o Linux

Leitura recomendada

PRADO - PHP 5 Framework

Gedit - Um bom editor pra programar em PHP!

Tratamento de exceções do PHP: uma introdução para iniciantes

Sistema de Gerenciamento de Conteúdo

Ato 2 - comandos de saída, constantes e operadores em PHP (básico)

  
Comentários
[1] Comentário enviado por Ragen em 06/06/2004 - 22:19h

Muito show seu artigo... É simples e vai direto ao ponto.

As vezes comecamos a viajar em assuntos de nivel técnico relativamente alto e nos esquecemos que o pessoal que tá comecando só quer e precisa de exemplos simples.

[]`s

Ragen

[2] Comentário enviado por agk em 07/06/2004 - 10:16h

Nossa muito bom esse artigo, eu que estou começando em php achei d+, exemplos simples como esses é que nos permiter começar a aprender esse linguagem maravilhosa e aumentar nosso conhecimento na área.

[3] Comentário enviado por jeffestanislau em 16/06/2004 - 21:47h

Fala Pessoal...
Graças ah um email da Nanci, achamos um erro:

No script
// obterdados.php

WHERE nome LIKE '%$busca%')";

temos a variável $busca..

No HTML
<!-- buscar.html -->
<td width=80%> <input type="text" name="buscar"


Aqui temos o seu correspondente buscar.... que na verdade deve ser busca, para casar com a variável de obter dados...

então corrijam esta linha para:
<td width=80%> <input type="text" name="busca"


blz!!!!
Qualquer coisa me enviem um email ou postem comentários aqui!!!

Obrigado!!!

[4] Comentário enviado por jeffestanislau em 18/06/2004 - 07:46h

Fala Galera,

Volto novamente para indicar outro erro, no mesmo script obterdados.php e mesma linha
WHERE nome LIKE ´%busca%´)"

observe que há um fechamento de parenteses, só que ele não é aberto... por favor, retirem ele para que fique assim:
WHERE nome LIKE ´%busca%´"

OK... blz!!!
Qualquer coisa, estamos aí!!!

[5] Comentário enviado por nanci em 01/07/2004 - 21:01h

É o melhor artigo PHP para iniciantes que já li. Sei que é complicado para programadores experientes entender quais são as nossas dificuldades. O Jeferson conseguiu explicar de maneira clara e com exemplos práticos.

Obrigada!

[6] Comentário enviado por Hernando em 19/10/2004 - 14:21h

Dae brody... Salve Salve este artigo... caraca eu tava procurando algo do tipo há um tempão, pois me propus dar aula de php para um camarada e tava preparando esta aula hoje tu me salvou umas 2 horinhas de trampo... Valeu brody

[]'s

[7] Comentário enviado por caduardo em 12/03/2005 - 11:52h

Olás estava fazendo teste com o artigo acima e não consigo editar pois sempre da registro não encontrado, mesmo fazendo as mudanças acima. E também qdo cadastro so cadastro o codigo o resto fica em branco. Olhe os logs do mysql
050312 11:51:40 173 Connect carlos@localhost on
173 Init DB meubanco
173 Query SELECT codigo, nome, cargo, setor
FROM funcionarios
WHERE nome LIKE '%%'

050312 11:53:49 157 Init DB meubanco
157 Query INSERT INTO funcionarios (nome, cargo, setor)
VALUES ('', '', '')

Tenho que fazer alguma mudança no html ou nos scripts??

Grato

[8] Comentário enviado por jeffestanislau em 15/03/2005 - 12:20h

Caduardo,

Assi fica difícil saber o que pode estar acontecendo... no código que vc passou o que vejo de errado e a falta da varável '%$busca%'.

Tenta aí e veja se é isso!!!

[]´s
jeffestanislau

[9] Comentário enviado por valteirsf em 22/05/2005 - 21:38h

Otimo artigo de PHP.
Começei a pouco tempo estudar PHP.
Com o sistema já pronto consegui enteder algumas coisas q não entedia.
Quando se ver ele funcionando dar pra enterder melhor com PHP funciona.
Aqui funcionou muito bem.

[10] Comentário enviado por fabiano_shark em 10/12/2005 - 19:21h

Jefferson o artigo ficou perfeito, parabéns pela iniciativa!!!

OBS. Quem estiver tendo problemas em adicionar o usuário para acesso ao banco de dados dê uma olhada neste link:

http://dev.mysql.com/doc/refman/4.1/pt/adding-users.html

Fabiano Shark

[11] Comentário enviado por alega1977 em 03/10/2006 - 16:38h

Não consigo obter os dados, toda vez que clico no botão busca ele retorna a mesma página, mesmo qd o registro não existe. Alguém pode me ajudar?

[12] Comentário enviado por lanux em 20/10/2006 - 15:30h

O meu enviardados.php não está funcionando. A entrada é criada na tabela, porém vazia, sem os dados enviados pelo cadastrar.html.
Por outro lado, se eu logar no mysql e enviar os dados "na mão" com INSERT INTO funciona legal.
Não sei mais onde procurar o erro! Alguma dica?

[13] Comentário enviado por jeffestanislau em 20/10/2006 - 20:45h

alega1977 e lanux,

Debuguem o sistema nesta linha do enviar dados.
Usem o comando echo e o exit para ir vendo o que acontece e ir parando a execução do script, como no exemplo abaixo:

echo $insert = "INSERT INTO funcionarios (nome, cargo, setor)
VALUES ('$nome', '$cargo', '$setor')";
exit;

Se após o value ele mostrar o espaço das variaveis em branco, tem algum erro nos input do html.

Olhem bem linha a linha, pois este script funciona numa boa.

Obs: não esqueçam de depois retirar o echo e o exit.

[]'s


ele vai mostrar na tela como fica esta linha na hora de enviar para o mysql.

[14] Comentário enviado por lavoie em 27/12/2006 - 12:02h

realizei os passos de acordo com o tutorial, so que nao eh adicionado nenhum usuarios, fiz o teste de acordo com o jeffestanislau pediu , e aparece o seguinte INSERT INTO funcionarios (nome, cargo, setor) VALUES ('', '', ''), nao funcionou, se alguem tiver uma dica ae valeu

[15] Comentário enviado por nandoxto em 07/01/2007 - 19:11h

Olá!
Eu trabalho numa ONG e estou fazendo um banco de dados para a mesma, eu fui fazendo os passos desse tutorial e gostei demais dele, porem está aparecendo um erro:
Fatal error: Call to undefined function: mysql_pconnect() in /var/www/config.php on line 9.
Estou precisando de ajuda.
Obrigado desde já.

[16] Comentário enviado por jeffestanislau em 08/01/2007 - 10:09h

nandoxto,

Só tem duas possíbilidades:

1. O MySQL não está instalado.
2. O módulo do mysql dentro do php.ini não está habilitado.

Pois o erro diz que não identifica a função que faz a conexão com o MySQL. Revise a configuração do PHP e MySQL.

[]'s
jefferson

[17] Comentário enviado por pxdelta em 11/01/2007 - 10:48h

Espero que o Jefferson informe se está ok...
Vamos a minha tese... kkk
Para que seja cadastrado os campos de nome, setor e cargo é precizo informar para o script enviardados.php quais são as variáveis do form no cadastrar.html que ele deve armazenar...

Então após a linha

mysql_select_db('meubanco');

deve ser colocado mais 3 linhas

$nome=$_POST['nome'];
$cargo=$_POST['cargo'];
$setor=$_POST['setor'];

Que pega o que foi postado no form formCadastrarFuncionario e joga para as variáveis $nome, $cargo e $setor...
Assim o cadastro dos funcionários é efetuado com sucesso!!!

Da mesma maneira na busca
No arquivo obterdados.php após a linha

mysql_select_db('meubanco');

deve ser colocado mais uma linha

$busca=$_POST['buscar'];

para tando no arquivo buscar.html ficou assim

input type="text" name="buscar"

Ai a busca encontra o dado cadastrado..

Da mesma maneira no arquivo editardados.php após a linha

mysql_select_db('meubanco');

coloquei mais 4 linhas

$codigo1=$_POST['codigo'];
$nome1=$_POST['nome'];
$cargo1=$_POST['cargo'];
$setor1=$_POST['setor'];

alterei os nomes para notar a diferença..

Por isso tambem alterei mais uma linha

$update = "UPDATE funcionarios SET nome='$nome1', cargo='$cargo1', setor='$setor1' WHERE codigo='$codigo1'";

Perfeito é possivel editar os campos e salvar que funciona tudo corretamente...
..
Agora precizo de ajuda se alguem já viu mas se for cadastrado mais que 15 nomes o script não mostra a página 2 e dá erro na linnha

if (!$pagina) {

Obrigado...
Abraço a todos

[18] Comentário enviado por nandoxto em 23/01/2007 - 18:36h

Olá Jefferson!
Consegui resolver o problema
Fatal error: Call to undefined function: mysql_pconnect() in /var/www/config.php on line 9.
Porém agora não consigo cadastrar outros funcionários.
As entradas nas tabelas ficam em branco.
Abraços.

[19] Comentário enviado por EnzOo em 19/04/2007 - 17:49h

Fala ae, ótimo artigo, só para complementar
Na parte onde tem:
/*descubra o número da página que será exibida se o número da página não for informado, definir 1 */
if (!$pagina) {
$pagina = 1;
}

vocês devem acrescentar o get para pegar quando clicar.
o código vai ficar assim.

/*descubra o número da página que será exibida se o número da página não for informado, definir 1 */

$pagina = $_GET[pagina];
if (!$pagina) {
$pagina = 1;
}

Muito bom, nem usei todas as partes, só o listar mesmo.

qualquer coisa me manda PM, que eu ajudo.

[20] Comentário enviado por jeffestanislau em 19/04/2007 - 18:08h

EnzOo,

Sobre o get, esse artigo foi apenas de exemplo, não utilizei nada de segurança ou funções interessantes do php.

O artigo foi apenas para demonstrar o uso do php com o mysql e dispertar o interessa na galera...

O sisteminha foi criado apenas para o artigo, a ajuda que você pode dar e aos usuários que tentam utilizar ele pela primeira vez...

[]'s
jefferson

[21] Comentário enviado por gzanatta00 em 26/04/2007 - 19:55h

amigo é o seguinte tenho um servidor debian, e os arquivos do diretorio da minha pagina esta dentro de /var/www, certo...dai eu abro a pagina pelonavegador, por exemplo, ao inves dele abrir a pagina empresa.php, ele pede pra salvar, sei que tem que instalar um componente mas nao sei qual, ja tentei varios e nada
Gustavo

[22] Comentário enviado por leandro_hamid em 13/09/2007 - 15:29h

Boa tarde pessoal!

Antes de mais nada quero agradecer pelo ótimo artigo, eu estou me iniciando em PHP e este artigo para mim esta sendo de fundamental importância.

Eu testes os scripts do capítulo "4.Uso de função" e ao executar o script nova_funcao.php me deparei com o seguinte erro:

"Fatal error: Cannot redeclare soma() (previously declared in C:\xampp\htdocs\Treinamento\funcao.php:6) in C:\xampp\htdocs\Treinamento\funcao.php on line 6
"
O que pode ter acontecido?Eu retornei no scrip funcao.php renommiei a variável $resultado para $resultado_da_soma e mesmo assim não resolveu, aguardo respostas e desde já agradeço.

[23] Comentário enviado por fabiano_shark em 13/09/2007 - 15:47h

Como a própria descrição sugere, você provavelmente deve ter declarado a função duas vezes. Acontece muito quando você declara esta função em uma página e dá "include" noutra que também tem esta função.

[24] Comentário enviado por leandro_hamid em 13/09/2007 - 16:25h

Muito obrigado pela ajuda faviano_shark, me desculpe pela ignorâncaia mas eu ainda não consegui identificar o erro.

Não consegui ver onde eu declarei a função "soma" mais de uma vez, o que eu percebi é que fiz chamadas desta função como especificado no exemplo do respectivo capítulo, peço encarecidamente ajuda, abraço.

[25] Comentário enviado por leandro_hamid em 13/09/2007 - 16:52h

Oi pessoal!!!Pra variar posto mais uma dúvida, iniciante é foda!!!rrsrsr(brincadeira)

Testando as intruções sql a partir do capítulo 5.Criando um banco de dados para uso em nossos scripts, mais precisamente as instruções com relação a criação de usuários para aceso ao servidor eu executei a instrução:

INSERT INTO user VALUES ('localhost', 'jeffestanislau', password('senhaphp'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');


E instrução de criação de usuários para acesso ao banco de dados:

INSERT INTO user VALUES('localhost', 'meubanco', 'jeffestanislau', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

PS: Observando o número de campos de tipo "enum('N','Y')" listados (no meu caso foram 26) para esta ultima instrução.

Nos dois casos foram exibidos os erros respectivamente a segui:



Erro
consulta SQL:

INSERT INTO user
VALUES (

'localhost', 'jeffestanislau', password( 'senhaphp' ) , 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'

Mensagens do MySQL :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1



Erro
consulta SQL:

INSERT INTO user
VALUES (

'localhost', 'meubanco', 'jeffestanislau', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'
)

Mensagens do MySQL :

#1136 - Column count doesn't match value count at row 1



Mais uma peço a su aajuda Jefferson, forte abraço!

[26] Comentário enviado por albert86 em 21/07/2008 - 15:47h

leandro_hamid, eu tb estava com esse problema, e consegui resolver da seguinte maneira:
Veja que com o comando show fields from user; aparecia pra mim o seguinte:

+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
+-----------------------+-----------------------------------+------+-----+---------+-------+

como vc pode ver há 26 termos do tipo enum('N','Y') , mais alguns outros. O que eu fiz então, foi acabar de preencher a instrução do insert da seginte maneira:

INSERT INTO user VALUES ('localhost', 'jeffestanislau', password('senhaphp'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y','Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y','','NULL','NULL','NULL','0','0','0');

veja que eu coloquei 26 vezes 'Y', mais os ultimos campos preenchidos com seus valores default que vi na tabela acima. Ou seja, eu deixei o comando especificando todos os valores que na tabela teria que ser informada. Veja sua tabela com o comando show fields from user; e então preencha a instrução INSERT de modo a atender todos os seus campos.



[27] Comentário enviado por albert86 em 21/07/2008 - 15:50h

muito bom artigo jefferson. Eu lhe encorajo a dedicar-se na escrita de livros sobre as areas que vc curte. Vc tem uma boa didatica, e isso o levaria a ganhar um bom dinheiro com livros sobre informatica. É só uma dica mesmo. Você que decide. Mas talento pra tal vc tem. Parabéns!!!

[28] Comentário enviado por albert86 em 22/07/2008 - 13:44h

Estou com um probleminha no exemplo do referente artigo. Aparentemente eu estou conseguindo cadastrar os usuarios normalmente, mas quando visualizo os cadastros, o cadastro novo não aparece. Aparece sim um cadastro novo sem dados nenhum... ou seja, ele cria o cadastro só que não insere os dados nele. Aconteceu com alguém isso? e alguém sabe o que poderia ser esse probleminha??

[29] Comentário enviado por jeffestanislau em 22/07/2008 - 14:09h

albert86,

Vamos debugar seu código usando (echo e exit) nesta parte onde ele insere os dados no banco. Coloque assim:

No arquivo enviardados.php, insira um echo antes e um exit no fim da linha indicada.
//cadastrar cliente
echo $insert = "INSERT INTO funcionarios (nome, cargo, setor) VALUES ('$nome', '$cargo', '$setor')"; exit;

Desta forma, antes de inserir os dados ele irá te mostrar como está a query que irá fazer isso.

Verifique se os campos estão preenchidos corretamente. Caso não esteja, você deverá confrontar esta informação com o html que chama este arquivo, verificando os mesmos campos para saber se os nomes estão correlacionados corretamente.

Obs: Depois para o sistema voltar a funcionar, não esqueça de tirar o echo e o exit da linha especificada.

[]´s
jefferson

[30] Comentário enviado por albert86 em 22/07/2008 - 14:24h

então né jefferson... eu usei as dicas do pxdelta, e funcionou perfeito para o cadastro... mas ainda não esta funfando na hora de buscar um usuário... vou debugar sim na parte da busca, pra ver se os dados estão chegando como previsto... obrigado

[31] Comentário enviado por comfaa em 28/10/2008 - 13:00h

muito legal !!!

[32] Comentário enviado por jarbasfmartins em 02/07/2009 - 16:30h

Seu artigo foi essêncial em meu trabalho, muito bom mesmo... Valeu pela ajuda.

[33] Comentário enviado por jarbasf em 14/07/2009 - 14:24h

jeffestanislau boa tarde, estou em dúvida quanto a consulta dos meus dados cadastrados. Veja bem, no meu banco eu preciso consultar entre datas, exemplo: "2009-06-01 a 2009-06-30" e também o código do funcionario, exemplo: 9999, tudo isso tudo numa página html.
-> Como eu criaria a tela de buscar.html?
-> O que poderia ser alterado no obterdados.php?
-> Devido ao grande volume de dados que seria visualizado, como ficaria a construção do editar.html?

Obrigado,

[34] Comentário enviado por eduardosantiago em 24/07/2009 - 04:11h

Fala Rapa!!!
Cara, eu nâo sei nada de php mas como tenho q criar um página pra realizar testes de carga tô seguindo teu artigo. O meu nâo funcionou ainda. Ele nâo consegue adicionar. Tanto que na hora só aparece Principal e não diz se foi cadastrado com sucesso!!! O Que eu fiz de errado?
A unica coisa q eu fiz diferente foi criar o banco, tabela, inserir usuários.... tudo diretamente no phpadmin. Estou no aguardo!!!

att,

Eduardo!

[35] Comentário enviado por eduardosantiago em 24/07/2009 - 04:13h

foi no phpmyadm. e eu coloquei todos esses scripts numa só pasta!!!

[36] Comentário enviado por linus black em 27/04/2010 - 17:49h

to com esse problema
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/obterdados.php on line 14

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/obterdados.php on line 16


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts