Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jo@oL

Menu Dropdown não carrega o banco de dados MySQL

Recommended Posts

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.