Jo@oL 0 Denunciar post Postado Novembro 30, 2007 Hello Folks! Estou fazendo um banco de dados para um curso de idiomas e estou parado em um problema há uns 3 dias, que é o seguinte: Preciso inserir os dados de novas turmas no danco de dados TURMA através de um FORM. Em um dos campos da turma é necessário selecionar os cursos disponíveis. Pra isso eu preciso acessar o banco de dados de cursos (banco de dados CURSO) e gerar um menu dropdown com os cursos pré-cadastrados. Desta forma o bando de dados TURMA será alimentado com o nome da nova turma e o curso em questão. Ficaria mais ou menos assrim: Campo 1: Nome da nova turma Campo 2: Menu dropdown com os cursos (alimentado pelo banco de dados CURSO) Estou consegundo criar o menu dropdown sem problemas. Mas o curso escolhido não está alimentando o banco de dados TURMA. O campo "curso" fica em branco no banco de dados TURMA. Acredito que o probema não seja no menu dropdown criado porque já testei com um menu estático (sem acessar nenhum banco de dados) e mesmo assim o campo "curso" fica em branco no banco de dados TURMA. Veja o script que estou utilizando: Arquivo "cad_turma.php": - Arquivo com o formulário para o cadastro de novas turmas <body> <?php //Incluindo a informacao de login include('db_login.php'); // Conectanto $connection = mysql_connect($db_host, $db_username, $db_password); if (!$connection){ die("Erro 001: Não foi possível selecionar o banco de dados.<br/> Favor contactar o administrador<br/>". mysql_error()); } // Selecionando o banco de dados $db_select = mysql_select_db($db_database); if (!$db_select){ die ("Erro 002: Não foi possível selecionar o banco de dados.<br/> Favor contactar o administrador<br/>". mysql_error()); } // Selecionando a tabela teste_ci no banco de dados mysql_select_db("teste_ci", $connection); mysql_query($result,$connection); ?> <form id="form1" name="form1" method="post" action="db_cad_turma.php"> <tr> <td><span class="style8">Código da turma:</span></td> <td colspan="3"><input name="codigo" type="text" /><span class="style9"></span></td> </tr><br><br> <tr> <td><span class="style8">Curso</span></td> <td><select name="curso" value=""> <? $sql = "SELECT * FROM cursos";// Acessa os cursos cadastrados na db $resultado = mysql_query($sql); while($linha = mysql_fetch_array($resultado, MYSQL_ASSOC)){ echo "<td><option value=\"" . $linha['id'] . "\">" . $linha['nome'] . "</option>";//Cria menu dropdown } ?> </select> <td><br><br> </tr> <input type="submit" /> </form> ___________________________________________________________ Arquivo "db_cad_turma.php" - Arquivo para alimentar o banco de dados TURMA <?php //Incluindo a informacao de login include('db_login.php'); // Conectanto $connection = mysql_connect($db_host, $db_username, $db_password); if (!$connection){ die("Erro 001: Não foi possível selecionar o banco de dados.<br/> Favor contactar o administrador<br/>". mysql_error()); } // Selecionando o banco de dados $db_select = mysql_select_db($db_database); if (!$db_select){ die ("Erro 002: Não foi possível selecionar o banco de dados.<br/> Favor contactar o administrador<br/>". mysql_error()); } mysql_query($result,$connection); // Insere dos dados na tabela turmas do banco de dados $sql="INSERT INTO turmas (codigo,curso) VALUES ('$_POST[codigo]','$_POST[curso]','$_POST[nivel]')"; if (!mysql_query($sql,$connection)) { die('Error: ' . mysql_error()); } echo "Dados adicionados com sucesso!"; header("Location: cad_turma.php" ); mysql_close($connection); ?> ___________________________________________________________ Alguma sugestão? Desde já agradeço o tempo desprendido na ajuda dessa questão que está me atormentando há dias. Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Novembro 30, 2007 Quando eu recebo valores em branco no banco de dados a 1º coisa que eu verifico é o tipo de campo se é um integer e você ta tentando enfia um "INGLES" não rola mesmo agora se não é esse o problema, rastreie a variavel dentro do seu codigo (eu utilizo vários ECHO' S em partes algumas partes do codigo voce poderia adicionar em:) +1 COISA VALIDA SUA VARIAVEL qualquer mal intencionado pode fazer uma página php com post pra redirecionar pra sua com algum conteudo malicioso! // Para ver o que está passando echo "Var = ".$_POST['codigo']; // Insere dos dados na tabela turmas do banco de dados $sql="INSERT INTO turmas (codigo,curso) VALUES ('$_POST[codigo]','$_POST[curso]','$_POST[nivel]')"; agora que eu reparei você postou sua var assim: $_POST[codigo] e ela deve ser assim: $_POST['codigo'] se ja não tiver assim checa se não é isso Compartilhar este post Link para o post Compartilhar em outros sites
Jo@oL 0 Denunciar post Postado Novembro 30, 2007 Olá MathBR, Obrigado pelas dicas e sugestões! Vamos às respostas: 1 Minha variável 'curso' está setada como varchar(30). 2. Como posso ter minhas páginas acessadas por alguem mal intencionado? O que posso fazer pra corrigir esse furo? 3. Adicionei echo "Var1 = ".$_POST['codigo']; echo "Var2 = ".$_POST['curso']; E tive como resposta: Var1 = Teste de var1 Var2 = Error 4. Colocando aspa simples nos posts VALUES ('$_POST['codigo']','$_POST['curso']')"; tenho como resposta: Var1 = Teste de var1 Var2 = Com essa alteração o banco de dados TURMA não é alimentado nem mesmo pela variavel 'codigo'. Compartilhar este post Link para o post Compartilhar em outros sites
Jo@oL 0 Denunciar post Postado Novembro 30, 2007 Matei a charada. Era apenas um erro no campo "<td><option value=\"" . $linha['id'] . "\">" . $linha['nome'] . "</option>" Que deveria ser "<td><option value=\"" . $linha['nome'] . "\">" . $linha['nome'] . "</option>" do formulário. De qualquer forma fica a dúvida sobre algum problema de segurança sugerido pelo MathBR. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Capella 7 Denunciar post Postado Novembro 30, 2007 Vamos la. agora as minhas perguntas. o select está sendo alimentado com as informações vindas do banco de dados?? se não tiver funcionando. modifique o qhile coloque desta frma PHP while($linha = mysql_fetch_array($resultado)){echo "<option value="" . $linha['id'] . "">" . $linha['nome'] . "</option>";//Cria menu dropdown } e outra pergunta. no seu insertt você indica. assim PHP $sql="INSERT INTO turmas (codigo,curso) VALUES ('$_POST[codigo]','$_POST[curso]','$_POST[nivel]')"; o correto não seria assim PHP $sql="INSERT INTO turmas (codigo,curso,nivel) VALUES ('$_POST[codigo]','$_POST[curso]','$_POST[nivel]')"; ve e altera essa partes e fala o que ocorre Compartilhar este post Link para o post Compartilhar em outros sites
Jo@oL 0 Denunciar post Postado Novembro 30, 2007 Eu simplifiquei as variaveis pra ficar mais fácil de visualizar. Os campos desse formulários tem Níveis, Horários e Professor, além de Código e Curso. Mas esqueci de tirar o campo niveis no exemplo. Era pra ficar apenas: $sql="INSERT INTO turmas (codigo,curso) VALUES ('$_POST[codigo]','$_POST[curso]')"; Mas valeu a dica. Aproveitando sua boa vontade eu pergunto: Como eu faço pra criar um dropdown em cascata? Por exemplo: escolhendo o curso inglês o dropdown nível abre as opções dos níveis do curso de inglês, que são diferentes do número de níveis do curso de espanhol ou de alemão. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Capella 7 Denunciar post Postado Novembro 30, 2007 so usando ajax pesquisa sobre ajax.. isso te daria oq ue quer. Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Novembro 30, 2007 Não sou expert em segurança (pelo menos ainda) só li muitos artigos/tutoriais que me abriram os olhos pra algumas possiveis ameaças/buggers O melhor exemplo que eu posso dar é: Quando você esta programando e percebe que esta selecionando alguma informação importante (campos de senha/login dados pessoais, etc...), está excluido registros ou alguma outra operação que se for mal programada poderia comprometer os dados do seu sistema é hora de tomar cuidado, verificar se a variavel que você esta pegando ($_GET, $_POST, $_SESSION, etc..) é realemente o que você esperava Um exemplo ridiculo de falha no projeto é por exemplo uma linha simples que iria excluir uma noticia num banco de dados de um portal qualquer DELETE ... noticia... tabela WHERE tabela.id = '$id' e colocar assim num form: <form name="tal" action="?action=deletar&id=10"> qualquer um poderia ir na barra de endereços e mudar o valor do id de 10 pra 11 e ver o que acontece no seu caso não tenho como falar olha garotão aki nesta parte do codigo tem essa falha etc... mesmo por que como eu disse não sou expert em segurança e seu código esta bem resumido So alertei por que justamente não vi nenhum tipo de validação de variaveis você ta pegando direto $var = $_post['var'] Nos meus códigos eu tenho uma função valida($var, $tipo) que verifica o coteudo da variavel se não tem nenhum código html etc.. Também no inicio de cada página tem um if(!defined(VAR)){ handleHack($PHP_SELF, $time, $date); }se você tentar entrar direto na página (tipo um hotlink) ele barra ou seja você tem uma segurança a mais de que um cara não faça uma página qualquer com os mesmos nomes de campos de formularios que o seu (facilmente exibidas no codigo fonte), escreva um código malicioso e envie como formulário para o seu sistema etc.. são ações simples que aumentam em muito a segurança (embora eu tenha descobreto que nada é 100% seguro só não descobriram a falha ainda). Quando eu tiver + expert eu faço um tuto pra galera ;) cya Compartilhar este post Link para o post Compartilhar em outros sites
Jo@oL 0 Denunciar post Postado Novembro 30, 2007 Entendi.. Eu ainda vou colocar restrição por nível de acessibilidade nas páginas. Por exemplo haverá acessos diferentes pra professos, secretaria e gerencia. Acho que assim mato o problema que você mencionou. Mas a dica é válida e eu agradeço. Eu já tinha lido alguma coisa sobre o Ajax, mas não imaginei que não fosse possível criar um menu dropdown em cascata usando apenas PHP. Obrigado mais uma vez MathBR e Bruno. Compartilhar este post Link para o post Compartilhar em outros sites