dili 0 Denunciar post Postado Agosto 26, 2011 Fala galera! Preciso de uma ajudinha, esbarrei em um erro que nunca vi acontecer antes: Tenho um formulário que contém um campo <select> na seguinte estrutura: <select name="nome" id="nome"> <option value="---------------">---------------</option> O resto das opções é carregado por uma consulta PHP+Mysql em uma base de dados... Confirmei que os dados são carregados normalmente, ou seja, aparecem os nomes das pessoas, por ex.: João da Silva, teste_funcionário...ect Agora a questão maluca é: quando clico em enviar o formulário, ele manda os dados pra outro PHP, e logo no início dele faço verificação do que chegou...e quando escolho: teste_funcionário, chega certinho...mas quando escolho: João da Silva, ele simplesmente ignora o que tem depois do espaço e manda só "João"... Nunca vi isso antes...pois os outros campos estão indo normal...só os do tipo <select> que estão dando esse erro... Tem alguma configuração que tem que ser feita para os campos do formulário enviarem corretamente todas as informações??? Abraço e obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 26, 2011 Tem alguma configuração que tem que ser feita para os campos do formulário enviarem corretamente todas as informações??? A principio não. poste os teus códigos, algo neles pode estar interferindo. Isole os trechos, para ir debugando. Compartilhar este post Link para o post Compartilhar em outros sites
dili 0 Denunciar post Postado Agosto 26, 2011 beleza, abaixo seguem os códigos: Este está no formulário do HTML: ======================================= Colaborador: <select name="nome_colaborador" id="nome_colaborador"> <option value="---------------">---------------</option> <? $colaborador = mysql_query("select nome_colaborador from colaboradores where categoria = 'Colaborador'"); $confirma_colaborador = mysql_num_rows($colaborador); if ($confirma_colaborador == 0) { echo "<script type='text/javascript'> alert('Atenção, não há nenhum colaborador cadastrado. A inserção não poderá ser concluída.'); </script>"; } else { while($array = mysql_fetch_array($colaborador)){ echo "<option value=" . $array['nome_colaborador'] . ">" . $array['nome_colaborador'] . "</option>"; } } ?> </select> ======================================= Este é o php que o recebe: ======================================= <?php // Inicia sessões session_start(); include "verifica.php"; include "conecta.php"; // Conecta ao banco de dados //error_reporting(0); //Valida dados recebidos if(!$_POST['nome_usuario'] || !$_POST['senha_usuario'] || !$_POST['nome_colaborador']) { echo "<script type='text/javascript'> alert('Todos os campos devem ser preenchidos.\\nPor favor, preencha os campos corretamente.'); history.back(); </script>"; exit; } //Valida se já existe na base de dados um colaborador com mesmo nome ou email $valida_nome = mysql_query ("select nome_usuario from usuarios where nome_usuario = '".$_POST['nome_usuario']."'"); $valida_nome_qtde = mysql_num_rows ($valida_nome); if ($valida_nome_qtde != 0) { echo "<script type='text/javascript'> alert('O usuário já existe. \\nPor favor, utilize outro nome.'); history.back(); </script>"; } else { //Executa a consulta $insere_usuarios = "INSERT INTO usuarios (cod_usuario, cod_colaborador, nome_usuario, senha) VALUES ( '', (select cod_colaborador from colaboradores where nome_colaborador = '" . $_POST['nome_colaborador'] . "'), '". $_POST['nome_usuario'] ."', '". $_POST['senha_usuario'] ."')"; mysql_query($insere_usuarios) or die(mysql_error()); echo mysql_error(); $confirma = mysql_query("select nome_usuario from usuarios where nome_usuario = '".$_POST['nome_usuario']."' and senha = '".$_POST['senha_usuario']."'"); //Mostra os dados que foram inseridos $confirma_qtde = mysql_num_rows($confirma); if ($confirma_qtde == 0) { echo "<script type='text/javascript'> alert('Os dados não foram inseridos. \\nPor favor tente novamente.'); history.back(); </script>"; }else { echo "O usuário abaixo foi inserido na base com sucesso:<br />"; while($array = mysql_fetch_array($confirma)) { //mostra na tela os dados echo "<h2>Usuário:</h2>" . $array['nome_usuario']."<br />"; } } } ?> ======================================= E o erro é "Column 'cod_colaborador' cannot be null"... Isto porque escolhi o nome "teste_colaborador 1"...só que ele somente manda "teste_colaborador"...sem o "1"...e este nome não existe na base... Nunca vi este tipo de erro...e ocorrem em outros arquivos tb que tem o mesmo comportamento... Até pra ajudar, dei um echo no início do PHP, e o campo já vem faltando a informação... Cara se puder me ajudar agradeço rs Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Agosto 27, 2011 Cara, a mensagem de erro está bem clara, você passa 4 parâmetros por insert, sendo 1 uma sub query, que está sendo usada de forma errada. Então vamos ter: cod_usuario = null cod_colaborador = esperamos que retorne algo nome_usuario = $_POST[ 'nome_colaborador' ] senha = $_POST[ 'senha_usuario' ] Perceba o campo que ele fala que é vazio, e o que eu escrevi depois do sinal de igualdade no código acima. Você faz a contagem de registros na tabela usuário, mas não em colaborador, pra saber se o cara existe lá, entretanto, ele não existindo, vai dar esse erro. Recomendo que não utilize sub querys dessa forma, ainda mais pra esse propósito, faça outra query, verifique a existência de acordo com suas condições, você faz o insert. Compartilhar este post Link para o post Compartilhar em outros sites
dili 0 Denunciar post Postado Agosto 27, 2011 Opa Andrey! Então, a subquery tah funcionando numa boa, já fiz estes testes e a subquery retorna o codigo se tiver o nome...é que no exemplo que eu dei o cara não existia... Mas o problema é outro, e é bem mais estranho: Num outro exemplo, escolhi o nome "João da Silva", mas quando dou o submit no formulário HTML, ele só envia pro PHP o nome "João"...neste caso existe um cara chamado somente "João" na base, então a inserção funciona sacou? Só que aí ela relaciona com o "João" errado... Só pra você ter uma idéia, no início do código PHP, onde todos os campos já foram enviados pelo formulário, dei um "echo $_POST[ 'nome_colaborador' ]", e ao invés de chegar "João da Silva"(nome que escolhi no form), chega só "João"... Cara o problema é esse, o campo input do HTML parece não estar mandando o nome completo, ele só envia o que está tudo junto...se eu der um espaço ele não manda o resto...e isto está acontecendo com todos os campos <select> de todos os formulários que uso...sempre que envio pro PHP, ele não envia as palavras inteiras... Estou achando que pode ser um problema na configuração do campo no HTML...mas nunca vi esse erro, será que um campo do tipo <select> não serve para enviar palavras separadas por espaço? Toh ficando sem opções de degug rs Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Agosto 27, 2011 Ok, então o problema é de não estar enviando o nome correto pro PHP recuperar e fazer o que deve fazer ? Poste seu código HTML e qualquer javascript envolvido com esse input. Compartilhar este post Link para o post Compartilhar em outros sites
dili 0 Denunciar post Postado Agosto 27, 2011 É isso aí, exatamente esse o erro! Só tem dois arquivos que se envolvem na jogada, o PHP, que enviei completo aqui já neste tópico, e o HTML estou enviando completo abaixo: Obs.: A saber, no "while($array = mysql_fetch_array($colaborador))" que faço dentro deste campo <select> no formulário, os dados são carregados direitinho, pelo menos os nomes aparecem corretos pra eu escolher: ex: "João da Silva"...mas no submit só vai "João"...ao que parece... ================================= <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Documento sem título</title> </head> <body> <?php // Inicia sessões session_start(); include "conecta.php"; // Conecta ao banco de dados include "verifica.php"; // Valida sessão // Valida Categoria $valida_categoria = mysql_query("select categoria from colaboradores where categoria = '".$_SESSION['categoria']."'"); $valida_result = mysql_result($valida_categoria,1); if ($valida_result == 'Controle') { ?> <form id="form1" name="form1" method="post" action="insere_usuarios.php"> <br><br> Nome: <label for="nome_usuario"></label> <input type="text" name="nome_usuario" id="nome_usuario" /> <p>Senha: <label for="senha_usuario"></label> <input type="password" name="senha_usuario" id="senha_usuario" /> </p> Colaborador: <select name="nome_colaborador" id="nome_colaborador"> <option value="---------------">---------------</option> <? $colaborador = mysql_query("select nome_colaborador from colaboradores where categoria = 'Colaborador'"); $confirma_colaborador = mysql_num_rows($colaborador); if ($confirma_colaborador == 0) { echo "<script type='text/javascript'> alert('Atenção, não há nenhum colaborador cadastrado. A inserção não poderá ser concluída.'); </script>"; } else { while($array = mysql_fetch_array($colaborador)){ echo "<option value=" . $array['nome_colaborador'] . ">" . $array['nome_colaborador'] . "</option>"; } } ?> </select> <br /> <p> <input type="submit" name="submit" id="submit" value="Gravar Dados" /> </p> </form> <? } else { echo "<script type='text/javascript'> alert('É necessário ser um usuário do controle para ter acesso a esta página.'); history.back(); </script>"; } ?> </body> </html> ================================= Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 27, 2011 a sintaxe html está errada amigo, tão simples qnto isso. troque: echo "<option value=" . $array['nome_colaborador'] . ">" . $array['nome_colaborador'] . "</option>"; por: echo '<option value="'.$array['nome_colaborador'].'">'.$array['nome_colaborador'].'</option>'; e pronto :lol: o teu value estava ficando assim: value=Joao da Silva enqnto deveria ser: value="Joao da Silva" entendeu ? Compartilhar este post Link para o post Compartilhar em outros sites
dili 0 Denunciar post Postado Agosto 27, 2011 Ahhhhhhhhhhhhhhhhhhhhhhhhhhhh rsrsrs William não acredito, fiquei horas testando um milhão de coisas, mas não me liguei nesse problema... Cara impressionante essa ajuda, um erro tão pequeno mas tão difícil de ver, testei e deu tudo certo agora, valeu mesmo cara!!! Agora, te peço um favor, me explica como você sacou o problema? Foi pura sacada mesmo, ou você mandou escrever algo na tela e tal? Quero ver se aprendo a reparar nessas coisas pra não perder tanto tempo depois e poder ajudar tb a galera no futuro... Abração cara e maios uma vez, obrigado a você e a todos que deram atenção ao problema! Valeu!!! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 27, 2011 foi puramente experiência. qndo você relatou eu já sabia que poderia ser isso. Pedi para ver os códigos para confirmar, e pronto, estava lá. Já desenvolvo a algum tempo, então já passei pela maioria dos 'erros' que você possa encontrar. Compartilhar este post Link para o post Compartilhar em outros sites