Besouro 1 Denunciar post Postado Abril 7, 2010 E ai galera, to com um probleminha aqi de lógica... O cidadão faz a inscrição pro evento. Pode ter dois no mesmo dia, ou seja, o cidadao pode se inscrever em dois eventos no mesmo dia, um de manha e um de tarde. Existem eventos que ocupam dois turnos. Portanto tem q dar erro se der qualquer choque de horario. Mas se o cara se inscrever pra dias diferentes, independento dos turnos a inscricao tem q ser realizada. if ($turno_c == "mt") { //se o turno for de manha e de tarde verifica se o cara tem outro evento nesta data, se tiver avisa que a inscriçao nao foi feita. $consulta = "SELECT candidato, data FROM candidatos WHERE candidato = '$cpf_cad' AND data = '$data_c'"; } else { //se o turno for de manha OU de tarde verifica se o cara tem outro evento nesta data e no turno que ele tá pedindo OU se ele ta inscrito num turno integral, se tiver avisa que a inscriçao nao foi feita. $consulta = "SELECT candidato, data, turno FROM candidatos WHERE candidato = '$cpf_cad' AND data = '$data_c' AND turno = '$turno_c' OR turno = 'mt'"; } O que está acontecendo é que se o cara tenta uma data diferente, sendo com turnos iguais, a inscriçao nao é feita, e deveria ser feita. Algum sugestao ai? valeu pessoal Besouro Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 7, 2010 E ai galera, to com um probleminha aqi de lógica... ta de brincadeira você isso e um pepino manero :P isso nao e problema de logica isso e modelagem de banco meu velho modelagem basica um tabela candidato um eventos id int 11 eventos varchar 255 horarios periodo int 11 1 manha 2 tarde 3 noite um tabela inscricao eventos id_do cara seria manero você criar uma interface so com curso que ele pode entrar :) tipo evento de hj excluido para ele qual evento ele não pode participar :) :P a ideia e nao fazer o usuario pensar Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Abril 7, 2010 olha se isto ajuda, verifica se existe algum turno //pesquisa por data e aluno $consulta = "SELECT candidato, turno FROM candidatos WHERE candidato = '$cpf_cad' AND data = '$data_c'"; $sql = mysql_query($consulta); $teste = true;//variável para ver se pode ou não cadastrar no evento if(mysql_num_rows>0){//verifica se achou alguma linha while($linha=mysql_fetch_array($sql)){ if($linha['turno']==$turno_c)//verifica se o turno coincide com algum que está no banco $teste = false; } if($teste) //cadastra else //não pode cadastrar claro que modelagem ajudaria bastante, como citado anteriormente Compartilhar este post Link para o post Compartilhar em outros sites
Besouro 1 Denunciar post Postado Abril 7, 2010 Quanto a modelagem oq eu fiz foi criar outra tabela, pego o cpf do cara q ta em outra tabela e o turno e data do evento e coloco os dados do evento e do cara na mesma tabela, dae confere soh nesta tabela se o cara ja esta inscrito ou nao... Acho que o problema está aqui, usando AND ou o OR : $consulta = "SELECT candidato, data, turno FROM candidatos WHERE candidato = '$cpf_cad' AND data = '$data_c' AND turno = '$turno_c' OR turno = 'mt'"; Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 7, 2010 ola meu amigo besouro ^_^ seja gentil poste como esta a suas tabelas e o case de uso : tipo se o curso e diario ,e semanal e mensal ,quantos cursos ,nome do curso e por ai adicione mais informação assim eu dou uma avaliada programar e manero mais se preparar para programar e uma arte UML -Diagrama de Caso de Uso :P avalie as entradas de dados ,tela de usuario e por ai vai ( interface de usuario e por ai vai ) Compartilhar este post Link para o post Compartilhar em outros sites
Besouro 1 Denunciar post Postado Abril 7, 2010 e ai kakaroto entao tabelas: "inscritos" -> dados do cara (nome, cpf, email etc) "eventos" -> dados do evento (nome_evento, cidade, data, turno etc) "candidatos" -> (id_evento, nome_evento, data, turno, cpf_inscrito) aqi une as outras duas tabelas, o cidadao q quer fazer parte do evento vai ter seu CPF cadastrado nesta tabela e os dados do evento junto.. por exemplo: um cara cadastrado pro evento ficaria desse jeito: id_evento: 17 CPF (tabela inscritos) : 69 data (tabela eventos): 10/10/2015 turno (tabela eventos): mt (manha e tarde) e agora como resolver? valeu Besouro Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Abril 7, 2010 use "inner join" para relaciona as tabelas Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 7, 2010 me dar um dump da tabela vazia que eu vou executar no meu mysql aqui assim fica dificil para mim :( eu monto essa query e colo aqui Compartilhar este post Link para o post Compartilhar em outros sites
Besouro 1 Denunciar post Postado Abril 7, 2010 ok man.. aí vai: CREATE TABLE IF NOT EXISTS `concursos_2` ( `id` int(11) NOT NULL auto_increment, `nome` varchar(50) NOT NULL, `cidade` varchar(50) NOT NULL, `data_concurso` varchar(10) NOT NULL, `horario_concurso` varchar(20) NOT NULL, `turno` varchar(2) NOT NULL, `local_reuniao` varchar(50) NOT NULL, `data_reuniao` varchar(20) NOT NULL, `horario_reuniao` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ; CREATE TABLE IF NOT EXISTS `inscritos` ( `id_inscritos` int(10) unsigned NOT NULL auto_increment, `nome` varchar(100) NOT NULL, `cpf` varchar(14) NOT NULL, `rg` varchar(20) NOT NULL, `nascimento` varchar(10) NOT NULL, `email` varchar(50) NOT NULL, `telefone` varchar(13) NOT NULL, `celular` varchar(13) NOT NULL, `blacklist` varchar(20) default 'Não', PRIMARY KEY (`id_inscritos`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; CREATE TABLE IF NOT EXISTS `candidatos` ( `id` int(11) NOT NULL auto_increment, `id_concurso` int(11) NOT NULL, `nome_concurso` varchar(50) NOT NULL, `data` varchar(10) NOT NULL, `turno` varchar(2) NOT NULL, `candidato` varchar(11) NOT NULL, `nota` varchar(1) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=132 ; Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 7, 2010 data e data mesmo nao varchar :P to mexendo aqui SELECT inscritos.nome , inscritos.cpf , concursos.nome , concursos.turno , concursos.data_concurso FROM inscritos INNER JOIN candidatos ON inscritos.id_inscritos = candidatos.id_candidato INNER JOIN concursos ON candidatos.id_concurso = concursos.id WHERE concursos.turno =1 AND inscritos`.`cpf` = 911 AND concursos.data_concurso = '2010-04-07'; traduzindo a query de cima selecionar o camarada que tem o cpf==911 no turno da manha com uma data de concursos 07/04/2010 aonde você esta vendo concursos turno turno 1 == manha turno2 ==tarde turno3 == manha e tarde //dump do banco -- phpMyAdmin SQL Dump -- version 3.2.0.1 -- http://www.phpmyadmin.net -- -- Servidor: localhost -- Tempo de Geração: Abr 07, 2010 as 08:53 PM -- Versão do Servidor: 5.1.36 -- Versão do PHP: 5.3.0 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- Banco de Dados: `test` -- -- -------------------------------------------------------- -- -- Estrutura da tabela `candidatos` -- CREATE TABLE IF NOT EXISTS `candidatos` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_concurso` int(11) NOT NULL, `id_candidato` varchar(11) NOT NULL, `nota` varchar(1) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- Extraindo dados da tabela `candidatos` -- INSERT INTO `candidatos` (`id`, `id_concurso`, `id_candidato`, `nota`) VALUES (1, 18, '6', '5'); -- -------------------------------------------------------- -- -- Estrutura da tabela `concursos` -- CREATE TABLE IF NOT EXISTS `concursos` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) NOT NULL, `cidade` varchar(50) NOT NULL, `data_concurso` date NOT NULL, `horario_concurso` time NOT NULL, `turno` int(11) NOT NULL, `local_reuniao` varchar(50) NOT NULL, `data_reuniao` date NOT NULL, `horario_reuniao` time NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ; -- -- Extraindo dados da tabela `concursos` -- INSERT INTO `concursos` (`id`, `nome`, `cidade`, `data_concurso`, `horario_concurso`, `turno`, `local_reuniao`, `data_reuniao`, `horario_reuniao`) VALUES (18, 'modelando o banco de dados', 'rio de janeiro', '2010-04-07', '12:00:00', 1, 'no imasters', '2010-04-07', '14:00:00'); -- -------------------------------------------------------- -- -- Estrutura da tabela `inscritos` -- CREATE TABLE IF NOT EXISTS `inscritos` ( `id_inscritos` int(10) unsigned NOT NULL AUTO_INCREMENT, `nome` varchar(100) NOT NULL, `cpf` varchar(14) NOT NULL, `rg` varchar(20) NOT NULL, `nascimento` date NOT NULL, `email` varchar(50) NOT NULL, `telefone` varchar(13) NOT NULL, `celular` varchar(13) NOT NULL, `blacklist` varchar(20) DEFAULT 'Não', PRIMARY KEY (`id_inscritos`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; -- -- Extraindo dados da tabela `inscritos` -- INSERT INTO `inscritos` (`id_inscritos`, `nome`, `cpf`, `rg`, `nascimento`, `email`, `telefone`, `celular`, `blacklist`) VALUES (6, 'kakaroto', '911', '134', '1986-07-21', 'kakaroto1500@gmail.com', '21 2671 6206', '', 'Não'); qualquer duvida poste novamente te dei a faca e queijo ,agora me pirar e me come a faca :P remover a aspas que esta na query que vai dar erro SELECT inscritos.nome, inscritos.cpf, concursos.nome, concursos.turno, concursos.data_concurso FROM inscritos INNER JOIN candidatos ON inscritos.id_inscritos = candidatos.id_candidato INNER JOIN concursos ON candidatos.id_concurso = concursos.id WHERE concursos.turno =1 AND inscritos.cpf =911 AND concursos.data_concurso = '2010-04-07'; resultado dessa query nome cpf nome turno data_concurso kakaroto 911 modelando o banco de dados 1 2010-04-07 Compartilhar este post Link para o post Compartilhar em outros sites
Besouro 1 Denunciar post Postado Abril 7, 2010 dale kakaroto, algumas combinacoes nao tao funcionando, tem q funcionar para todas as combinacoes possiveis, as q eu achei foram essas: * individuo tentando se cadastrar para 1 evento no mesmo dia (o evento eh de manha e de tarde) ja estando cadastrado em outro q eh soh de manha ou soh de tarde no mesmo dia * individuo ja cadastrado para 2 eventos no mesmo dia e tentando se cadastrar em outro q eh soh a tarde * individuo ja cadastrado para 2 eventos no mesmo dia e tentando se cadastrar em outro q eh soh de manha * individuo ja cadastrado para 2 eventos no mesmo dia e tentando se cadastrar em outro q eh outro dia *individuo ja cadastrado para 1 eventos q eh de manha ou de tarde e tentando se cadastrar em outro q eh em dois turnos no mesmo dia *individuo ja cadastrado para 1 evento nos dois turnos e tentando se cadastrar em outro q eh outro dia em qualquer turno Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 7, 2010 eu sabia que você ia come a faca :P pq você esta mostrando a tela para usuario com o evento no mesmo dia ja que ele tem dois pq você mostrou o mesmo dia tipo no usuario kakaroto que esta ai ele ser cadastrou no evento da manha você so pode mostrar eventos para mim de tarde e se você de um count no banco e for igual ==2 você mostrar so os proximos dias vem come a faca de novo :P SELECT inscritos.nome, inscritos.cpf, concursos.nome, concursos.turno, concursos.data_concurso FROM inscritos INNER JOIN candidatos ON inscritos.id_inscritos = candidatos.id_candidato INNER JOIN concursos ON candidatos.id_concurso = concursos.id AND concursos.data_concurso = '2010-04-07'; sacou a ideia Compartilhar este post Link para o post Compartilhar em outros sites
Besouro 1 Denunciar post Postado Abril 8, 2010 e ai kkroto mas tem q mostrar todos independente do cara ta inscrito nele ¬¬ Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 8, 2010 e ai kkroto mas tem q mostrar todos independente do cara ta inscrito nele ¬¬ ai a gente vai começar a discursão nossa :P usuario entra no bar la tem cerveja cachaça vinho ´pq você nao faz o select para ver a idade dele e so exibi refrigerante :P ja que ele nao pode bebe ja que você que exibi e so fazer o select no banco e ver as condicao que você sabe agora eu pergunto aonde esta a sua duvida ? melhor tive uma ideia seu chato :P:) no tem a tabela que eu te mandei la eu to cadastrado pela manha certo manda um select no banco e pegar meu horario la como na tabela eu to de manha certo você exibi todos sendo que o da manha colocar disable :) ser for a a tarde colocar disable a tarde e so seguir a logica agora sacou essa sugestão Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Abril 8, 2010 dois probleminhas, banco mal modelado e interface mal projetada Não TEM que exibir os eventos independentemente. TEM que exibir apenas os possíveis SIM! Projete, construa, RESTRINJA, habilite apenas as opções disponíveis. Pra que criar uma mensagem de erro sendo que eu posso impedir o erro de ser gerado? Em Java por exemplo você só trata erros com Exceptions, ou seja, só é disparada uma mensagem de erro caso uma exceção ocorra, algo imprevisto que não estava coberto pela programação. No seu caso você está prevendo um caso de uso onde o usuário deseja se registrar num evento qual ele não pode comparecer. Se está prevendo, IMPEÇA que aconteça. Se for possível refazer seu banco, sugiro uma modelagem similar a isto: eventos id smallint unsigned primary key auto_increment, nome varchar(15), inicio datetime, fim datetime, cidade varchar(30), inicio_reuniao datetime, fim_reuniao datetime, cidade_reuniao datetime inscritos cpf bigint(11) unsigned primary key, nome varchar(30), nascimento date, rg varchar(20), telefone bigint(10) unsigned, celular bigint(10) unsigned, blacklist varchar(20) candidatos id int unsigned primary key auto_increment, candidato bigint(11) unsigned, id_evento smallint unsigned Você não precisa repetir as informações do evento na tabela candidatos, você pode referenciá-las com foreign keys e/ou linká-las com join. No caso eu recomendo fortemente uma foreign key entre o evento e os candidatos, com a regra ON DELETE CASCADE Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 8, 2010 Desculpe do banco que eu postei para você ,no meu você colocou somente datetime aonde botei date fiz separado pq eu nao sei o nivel dele por isso que esta separado mal modelado desculpe ta de zueira no e :P com relacao a interface ate concordo com você ,eu ja venho falando com ele sobre isso nos comentarios desculpe seu comentario e 0 para mim deu no mesmo nao ajudou em nada o cara falar ON CASCADE para ele e falar grego hj :P Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Abril 8, 2010 kakaroto meu post foi direcionado para o autor do tópico, não para você http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Abril 8, 2010 kakaroto meu post foi direcionado para o autor do tópico, não para você http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Desculpe meu velho a manera de falar aquele tarado la em cima e fogo :P mais o cara ta aprendendo , eu to mostrando para ele alguma ideia o sistema no meu ver esta ok para o nivel dele e claro que eu nao avalie caso de uso afundo mais o banco sugerido para ele ta otimo com o tempo ele vai estudando e aprendendo mais no e todo mundo por ai que conhecer ON CASCADE nao :P isso ainda e grego para o povo Function entao ferrou entao para mim esse topico esta fechado e o autor tem que ralar agora :P Compartilhar este post Link para o post Compartilhar em outros sites