Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

austinmrs

Turismo php + mysql

Mensagens Recomendadas

austinmrs

Boa tarde,

Estou no 12º de Multimédia, e tenho de realizar a minha PAP.

Bem, o que pensei fazer, e foi aceite, foi um website, em php+mysql, sobre o "turismo" da minha terra, Murtosa.

Ou seja, a Murtosa tem 4 Freguesias, e tem bastantes Restaurantes, Cafés, Pensões, Edificios Municipais, etc.

Então a ideia era criar um site, em que haveria uma barra de pesquisa, e o utilizador poderia pesquisar por sitios, esta barra ao escrever, iria aparecer um menu drop down(con recurso a ajax), em que eu ao escrever por exemplo Em, em baixo apareceriam já os pontos com aqueles caracteres na base de dados (exemplo: Emigrante).

Depois, além desta pesquisa, queria que esta pesquisar fosse filtrada por Freguesias, e por Tipos. Pensei em criar um menu drop down ao passar o rato por cima do menu restaurantes, cafés, etc, em que por exemplo ao passar o rato por cima de restaurante, apareciam as freguesias, para clicar e pesquisar so restaurantes numa freguesia. até fácil, só select * from, e select * from *** where name like '%"feefwgf"%'...

A base de dados será esta:

Sem%20T%C3%ADtulo.jpg

Também vou criar uma tabela para usuários, para quem está logado poder adicionar novos sitios.

Agora, eu preciso de ajuda em criar a base de dados, não sei bem como fazer com o campo de imagem.. Só quero ter uma imagem por sitio, o melhor será guardar a imagem no base de dados, certo?

Ao criar o form para introduzir um novo sitio, como faço para a imagem que for feito o upload seja renomeada para o mesmo nome que foi dado para o sitio?

Exemplo:

Sitio: Café Porto

Imagem: 123.jpg

imagem será renomeada para café porto.jpeg. Porque depois, ao pesquisar por este café, como é que será possivel, por exemplo, aparecer o nome do café, e uma miniatura da imagem? E só depois ao clicar no café, é que abre o café com os contactos todos, e a morada?

Algumas ideias/ajudas?

Cumps.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Agora, eu preciso de ajuda em criar a base de dados, não sei bem como fazer com o campo de imagem.. Só quero ter uma imagem por sitio, o melhor será guardar a imagem no base de dados, certo?

Eu guardo na BD o caminho, podendo sequer nem ter que ter mais um campo. Posso atribuir o nome da imagem à chave primária da tabela.

Ao criar o form para introduzir um novo sitio, como faço para a imagem que for feito o upload seja renomeada para o mesmo nome que foi dado para o sitio?

Fazes assim:

if ($_FILES) {
if($_FILES['image'] && $_FILES['image']['size'] > 0){
 $ori_name = $_FILES['image']['name'];
 $tmp_name = $_FILES['image']['tmp_name'];
 $src = imagecreatefromjpeg($tmp_name);
 list($width,$height)=getimagesize($tmp_name);
 $newwidth=100;
 $newheight=($height/$width)*100;
 $tmp=imagecreatetruecolor($newwidth,$newheight);
 //vai buscar a extensao da imagem
 $extensao = explode(".", $ori_name);
 //echo $extensao[0]; //resto da imagem, da lugar ao id
 //echo $extensao[1]; // extensao
 imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
 $filename = "images/".$_POST['id'].'.'.$extensao[1]; //concatena id com a extensao
 imagejpeg($tmp,$filename,100);
 $picture = "images/".$_POST['id'].'.'.$extensao[1]; //concatena id com a extensao
 imagedestroy($src);
 imagedestroy($tmp);
}
}

Nota que estou a redimensionar a imagem, se não quiseres retiras o código que se encarga dessa operação.

imagem será renomeada para café porto.jpeg. Porque depois, ao pesquisar por este café, como é que será possivel, por exemplo, aparecer o nome do café, e uma miniatura da imagem? E só depois ao clicar no café, é que abre o café com os contactos todos, e a morada?

Que tipo de pesquisa ? Em tabela ou que auto-completa à medida que vais digitando ?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dmaciel

Olá Amigo,

Eu sou de Ovar, caso precises de ajuda avisa ;)

Em relação as tuas questões tu na base de dados só vais guardar o URL (o link) de onde está a imagem, isto é, no formulário PHP vais enviar a tua imagem para uma pasta no servidor e enviar essa localização para a Base de Dados.

Em relação ao renomear já te foi explicado, quando tiveres a enviar a imagem para o servidor podes alterar o nome e muito mais. :)

Bom trabalho!!!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

Obrigado desdejá pela ajuda!

Então, o melhor será começar por criar as tabelas no phpmyadmin..

Eu criei o campo imagem como mediumbloob, então vou apagar tudo, e criar de novo. Assim sendo, a bd só irá contar mesmo o nome do directório. Crio um campo para imagem ou não? Ou seja, a imagem ao fazer upload é renomeada para o nome do ponto, e irá ser posta em /images , para depois ao pesquisar por aquele ponto, aparecer a imagem. O que queria era que aparecesse só mesmo a imagem em pequeno, e depois ampliava . Vi este script que parece fazer o que quero:

http://lokeshdhakar.com/projects/lightbox2/

Então agora ajuda para criar as tabelas. Será algo assim:

Freguesias

id_freguesia

nome_freguesia

Pontos

id_ponto

nome_ponto

contacto

horário

morada

id_freguesia

id_tipo

imagem

coordenadas

tipo

id_tipo

nome_tipo

Cumps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Eu criei o campo imagem como mediumbloob, então vou apagar tudo, e criar de novo. Assim sendo, a bd só irá contar mesmo o nome do directório. Crio um campo para imagem ou não? Ou seja, a imagem ao fazer upload é renomeada para o nome do ponto, e irá ser posta em /images , para depois ao pesquisar por aquele ponto, aparecer a imagem.

Se associares o nome da imagem a um id (que seja chave-primária) não é necessário um campo imagem.

Para já as tabelas parecem-me bem. Tens as relações bem feitas ?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

Se associares o nome da imagem a um id (que seja chave-primária) não é necessário um campo imagem.

Para já as tabelas parecem-me bem. Tens as relações bem feitas ?

mas eu acho que vou criar o campo imagem, para me organizar melhor. vou criar as tabelas todas de novo, só uma coisa, o campo imagem, fica em varchar?

e outra coisa, estou com problemas em criar as relacoes no php my admin .. nao consigo mudar a storage engine para innodb , não me aparece essa opção..

Também vou criar uma tabela para usuarios

usuarios

id_usuario

nome_usuario

senha_usuario

esta tabela terá apenas um usuário, pois não faz sentido uma pessoa se poder registar, servirá apenas para o admin fazer login para adicionar novos pontos. ou seja a parte com o form para introduzir um novo sitio, irá ser só visivel para quem tiver logado.

Editado por austinmrs

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Está bem, isso já é contigo :)

Sim, pode ficar.

Estás a ir às operações dentro de uma tabela ? Se sim, deveria aparecer.. e já agora, porque queres mudar ?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

Está bem, isso já é contigo :)

Sim, pode ficar.

Estás a ir às operações dentro de uma tabela ? Se sim, deveria aparecer.. e já agora, porque queres mudar ?

eu usava o mysql na linha de comandos, ou seja para criar relações usava o comando references , e agora aqui estou com dificuldados em criar as relações entre as tabelas.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

werr.jpg

neste momento está assim, está tudo correcto, penso eu... como assim, no designer? eu estou a usar o site 000.webhost.com para alojar o meu site e a base de dados, visto que é um alojamento gratuito. se houver algum melhor digam :)

Editado por austinmrs

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Se tem o phpmyadmin é indiferente usares um servidor local ou não.

Depois de carregares na BD aparece-te no menu horizontal a opção Designer, certo ? Depois guiaste por aqui


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

Se tem o phpmyadmin é indiferente usares um servidor local ou não.

Depois de carregares na BD aparece-te no menu horizontal a opção Designer, certo ? Depois guiaste por aqui

só tem isto:

Sem%20T%C3%ADtulo.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

Não não, esquece isso.

Vê também se essa versão dp phpmyadmin tem esta opção: http://woork.blogspot.pt/2007/11/correct-approach-to-define.html

não.. sabes de algum servidor free que seja porreiro?

é que não queria usar local, pois assim na apresetação teria de ir lá antes instalar etc.. assim ficava tudo alojado, era mais simples

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

não.. sabes de algum servidor free que seja porreiro?

Pelo que sei esse é porreiro, dentro do possível..

é que não queria usar local, pois assim na apresetação teria de ir lá antes instalar etc.. assim ficava tudo alojado, era mais simples

instalar o quê ? Pôr o apache e o mysql a correr não é instalar nada :)


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

Pelo que sei esse é porreiro, dentro do possível..

instalar o quê ? Pôr o apache e o mysql a correr não é instalar nada :)

Como assim? Eu usava o easyphp antes

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Nunca usei, mas os pressupostos devem ser os mesmos em todos os servidores locais.

Eu utilizo o xampp.

Segue a demonstração para veres como é simples. http://www.apachefriends.org/en/xampp-windows.html

e que tal escrever SQL ?

Era para mim ou para ele ? :)


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

dá-me erro ao criar a tabela pontos...

está assim, feito à mão, mas dá erro ao criar a tabela pontos.

-- phpMyAdmin SQL Dump
-- version 2.11.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Feb 27, 2013 at 06:29 AM
-- Server version: 5.1.57
-- PHP Version: 5.2.17

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `a3913388_turismo`
--

-- --------------------------------------------------------

--
-- Table structure for table `freguesias`
--

CREATE TABLE `freguesias` (
 `id_freguesia` int(11) NOT NULL AUTO_INCREMENT,
 `nome_freguesia` varchar(12) COLLATE latin1_general_ci NOT NULL,
 PRIMARY KEY (`id_freguesia`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

--
-- Dumping data for table `freguesias`
--


-- --------------------------------------------------------


--
-- Table structure for table `tipo`
--

CREATE TABLE `tipo` (
 `id_tipo` int(11) NOT NULL AUTO_INCREMENT,
 `nome_tipo` varchar(25) COLLATE latin1_general_ci NOT NULL,
 PRIMARY KEY (`id_tipo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

--
-- Dumping data for table `tipo`
--


-- --------------------------------------------------------

--
-- Table structure for table `usuarios`
--

CREATE TABLE `usuarios` (
 `id_usuario` int(11) NOT NULL AUTO_INCREMENT,
 `usuario` varchar(20) COLLATE latin1_general_ci NOT NULL,
 `senha` varchar(20) COLLATE latin1_general_ci NOT NULL,
 PRIMARY KEY (`id_usuario`),
 UNIQUE KEY `usuario` (`usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

--
-- Dumping data for table `usuarios`
--

-- --------------------------------------------------------------

--
-- Table structure for table `pontos`
--

CREATE TABLE `pontos` (
 `id_ponto` int(11) NOT NULL AUTO_INCREMENT,
 `nome_ponto` varchar(30) COLLATE latin1_general_ci NOT NULL,
 `horario` varchar(20) COLLATE latin1_general_ci NOT NULL,
 `contacto` int(12) NOT NULL,
 `morada` varchar(30) COLLATE latin1_general_ci NOT NULL,
 `imagem` varchar(30) COLLATE latin1_general_ci NOT NULL,
 `coordenadas` varchar(20) COLLATE latin1_general_ci NOT NULL,
 `id_freguesia` int(11) NOT NULL,
 `id_tipo` int(11) NOT NULL,
 PRIMARY KEY (`id_ponto`)
 FOREIGN KEY (id_freguesia) REFERENCES freguesias(id_freguesia)
 FOREIGN KEY (id_tipo) REFERENCES tipo(id_tipo)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

--
-- Dumping data for table `pontos`
--

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

se dá erro, dava jeito saber qual a mensagem de erro ...

SQL query:
CREATE TABLE `pontos` (
`id_ponto` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`nome_ponto` VARCHAR( 30 ) COLLATE latin1_general_ci NOT NULL ,
`horario` VARCHAR( 20 ) COLLATE latin1_general_ci NOT NULL ,
`contacto` INT( 12 ) NOT NULL ,
`morada` VARCHAR( 30 ) COLLATE latin1_general_ci NOT NULL ,
`imagem` VARCHAR( 30 ) COLLATE latin1_general_ci NOT NULL ,
`coordenadas` VARCHAR( 20 ) COLLATE latin1_general_ci NOT NULL ,
`id_freguesia` INT( 11 ) NOT NULL ,
`id_tipo` INT( 11 ) NOT NULL ,
PRIMARY KEY ( `id_ponto` ) FOREIGN KEY ( id_freguesia ) REFERENCES freguesias( id_freguesia ) FOREIGN KEY ( id_tipo ) REFERENCES tipo( id_tipo )
) ENGINE = MYISAM DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci AUTO_INCREMENT =1

MySQL said:

#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 'FOREIGN KEY (id_freguesia) REFERENCES freguesias(id_freguesia)

FOREIGN KEY (i' at line 12

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

falta as virgulas separadoras

CREATE TABLE `pontos` (
`id_ponto` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`nome_ponto` VARCHAR( 30 ) COLLATE latin1_general_ci NOT NULL ,
`horario` VARCHAR( 20 ) COLLATE latin1_general_ci NOT NULL ,
`contacto` INT( 12 ) NOT NULL ,
`morada` VARCHAR( 30 ) COLLATE latin1_general_ci NOT NULL ,
`imagem` VARCHAR( 30 ) COLLATE latin1_general_ci NOT NULL ,
`coordenadas` VARCHAR( 20 ) COLLATE latin1_general_ci NOT NULL ,
`id_freguesia` INT( 11 ) NOT NULL ,
`id_tipo` INT( 11 ) NOT NULL ,
PRIMARY KEY ( `id_ponto` ),
FOREIGN KEY ( id_freguesia ) REFERENCES freguesias( id_freguesia ),
FOREIGN KEY ( id_tipo ) REFERENCES tipo( id_tipo )
) ENGINE = MYISAM DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci AUTO_INCREMENT =1


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.