JorgitoDF 0 Denunciar post Postado Agosto 7, 2012 Boa tarde, Sou novo em programação PHP, estou desenvolvendo um aplicativo que num formulário tem uma combobox que carregar todas as UF já gravadas numa tabela (UF) no MySQL, até ai eu consegui fazer. Mas preciso selecionar tal UF da combobox quando estiver cadastrando um novo cliente e ao salvar o cadastro os dados serem enviados e salvos na tabela (CLIENTE) no MySQL, sendo que na tabela (CLIENTE) possui o id_uf definido como (FK), este id_uf é a (PK) da tabela (UF). É possível esta solução? Se alguém souber como fazer por favor me ajude. As UF's estão cadastradas em uma tabela onde tem a PK = id_uf + a descrição que é cada UF (AC po exemplo). Na tabela de cliente a PK da tabela de UF se torna uma FK na tabela de cliente, o que eu não estou conseguindo fazer é o cadastro do cliente relacionando com a FK da tabela de UF, eu só consegui carregar todas as UF na combobox do formulário do cadastro de cliente porém quando eu salvo e envio os dados para serem gravado no BD apresenta um erro. Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Agosto 7, 2012 Para gerar o select, faça com que o valor seja o id_uf $ufs = mysql_query("SELECT id_uf, descricao FROM ufs"); if (!$ufs) { echo "Erro ao restatar UFs"; } $options = array(); while ($uf = mysql_fetch_assoc($ufs)) { $options []= '<option value="' . $uf['id_uf'] . '">' . $uf['descricao'] . '</option>'; } $select = '<select name="uf">' . implode("\n", $options) . '</select>'; echo $select; Assim $_POST['uf'] já irá retornar o id_uf do UF escolhido pelo cliente. (obs: apenas escrevi aqui, não verifiquei a sintaxe) Qual a mensagem de erro que aparece? Compartilhar este post Link para o post Compartilhar em outros sites
JorgitoDF 0 Denunciar post Postado Agosto 7, 2012 Valeu mangakah, Porém vou testar este código somente a noite dai depois falo aqui o que resultou. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
JorgitoDF 0 Denunciar post Postado Agosto 8, 2012 Amigo, me desculpe mas não entendi bem o seu código... Veja o meu <select name="UF" id="UF"> <option></option> <?php include("conexao.php"); $sql = "SELECT * FROM uf"; $resultado = mysql_query($sql); while($linha = mysql_fetch_array($resultado)){ ?> <option><?php echo $linha['uf'] ?></option> <?php } ?> </select> Este código está funcionando para popular a combobox, porém quando a UF na combobox é selecionada e ao clicar no botão submit para gravar os dados aparece o seguinte erro: Column count doesn't match value count at row 1 Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Agosto 8, 2012 Isso é um erro em uma consulta SQL, não está relacionado com esse código. Você deve ter colocado "SELECT count" ao invés de "SELECT COUNT(*)" Compartilhar este post Link para o post Compartilhar em outros sites
JorgitoDF 0 Denunciar post Postado Agosto 8, 2012 mangakah erro em qual consulta? não entendi sua colocação.......... Em nenhum momento coloquei SELECT count Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Agosto 9, 2012 mangakah erro em qual consulta? não entendi sua colocação.......... Em nenhum momento coloquei SELECT count Ops... me confundi, foi mal. Esse erro ocorre em uma consulta SQL INSERT onde o número de colunas não bate com o número de valores, exemplo, você coloca 4 campos e passa apenas três valores: INSERT INTO tabela (a,b,c,d) VALUES (1,2,3) Compartilhar este post Link para o post Compartilhar em outros sites
AlexandreMota 22 Denunciar post Postado Agosto 9, 2012 O erro é que você não coloca valor nenhum nos options, então quando você salva o campo UF fica sem valor e dá esse erro. Acrescente o que está em negrito: <select name="UF" id="UF"> <option></option> <?php include("conexao.php"); $sql = "SELECT * FROM uf"; $resultado = mysql_query($sql); while($linha = mysql_fetch_array($resultado)){ ?> <option[b] value="<?php echo $linha['id_uf'] ?>"[/b]><?php echo $linha['uf'] ?></option> <?php } ?> </select> Compartilhar este post Link para o post Compartilhar em outros sites
JorgitoDF 0 Denunciar post Postado Agosto 9, 2012 O erro é que você não coloca valor nenhum nos options, então quando você salva o campo UF fica sem valor e dá esse erro. Acrescente o que está em negrito: <select name="UF" id="UF"> <option></option> <?php include("conexao.php"); $sql = "SELECT * FROM uf"; $resultado = mysql_query($sql); while($linha = mysql_fetch_array($resultado)){ ?> <option[b] value="<?php echo $linha['id_uf'] ?>"[/b]><?php echo $linha['uf'] ?></option> <?php } ?> </select> Alexandre Mota, Obrigado pela orientação, porém surgiu outra dúvida agora... Por favor veja se estou fazendo correto.... no Prog02.php que recebe os dados vindos do formulário, está assim para receber o valor no select da UF: $uf = $_POST["linha"]; O select ficou assim: <option value="<?php echo $linha['id_uf'] ?>"> <?php echo $linha['uf'] ?> </option> No $sql = "INSERT INTO cliente (tipo, uasg, cnpj, nome, endereco, numero, bairro, cidade, cep, id_uf) VALUES ('$gov','$uasg','$cnpj','$razao','$endereco','$numero','$bairro','$cidade','$cep','$uf')”; Como no select esta sendo carregado o id_uf + a uf a minha dificuldade agora é como passar e salvar no banco de dados. Neste caso a variável $uf que recebe $_POST["linha"]; terá que ser um array para receber id_uf + a uf com o valores que foram carregados no select? Ou terei que passar apenas o id_uf que foi carregado no select relacionado a determinada UF? Neste caso ao gravar o valor do id_ud que foi carregado no select este valor deverá ser salvo na coluna (id_uf) da tabela cliente e ao mesmo tempo que este valor for ser gravado tenho que aplicar o comando para informar que o id_uf será uma PK na tabela cliente? Porque quando eu criei a tabela de cliente já defini que a coluna id_uf seria a PK. Poderia me ajudar novamente? Obrigado Alexandre Mota, Obrigado pela orientação, porém surgiu outra dúvida agora... Por favor veja se estou fazendo correto.... no Prog02.php que recebe os dados vindos do formulário, está assim para receber o valor no select da UF: $uf = $_POST["linha"]; O select ficou assim: <option value="<?php echo $linha['id_uf'] ?>"> <?php echo $linha['uf'] ?> </option> No $sql = "INSERT INTO cliente (tipo, uasg, cnpj, nome, endereco, numero, bairro, cidade, cep, id_uf) VALUES ('$gov','$uasg','$cnpj','$razao','$endereco','$numero','$bairro','$cidade','$cep','$uf')”; Como no select esta sendo carregado o id_uf + a uf a minha dificuldade agora é como passar e salvar no banco de dados. Neste caso a variável $uf que recebe $_POST["linha"]; terá que ser um array para receber id_uf + a uf com o valores que foram carregados no select? Ou terei que passar apenas o id_uf que foi carregado no select relacionado a determinada UF? Neste caso ao gravar o valor do id_ud que foi carregado no select este valor deverá ser salvo na coluna (id_uf) da tabela cliente e ao mesmo tempo que este valor for ser gravado tenho que aplicar o comando para informar que o id_uf será uma PK na tabela cliente? Porque quando eu criei a tabela de cliente já defini que a coluna id_uf seria a PK. Poderia me ajudar novamente? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
AlexandreMota 22 Denunciar post Postado Agosto 9, 2012 A forma correta de pegar a UF seria $_POST['UF'], pois o nome do select é UF. Linha é só uma variável que foi usada pra pegar os dados do select. Quanto ao valor que vai ser passado no combo, o valor que é mostrado ao usuário (no caso a descrição da UF) nunca vai ser enviado no formulário para a outra página, o único valor que vai chegar é o valor do atributo value da opção que foi selecionada. Por isso eu incluí esse value="<?php echo $linha['id_uf'] ?>", pois sem ele não chegaria nenhum valor correspondente à UF. Não tem que usar nenhum array, simplesmente vai chegar só o id_uf. Quanto à chave primária, você nunca deveria ter botado o campo id_uf como chave primária da tabela de clientes, porque você vai ter diversos clientes que são do mesmo estado, e como a chave primária não pode ser repetida, só vai ser possível criar um cliente por estado dessa forma que está. O certo seria criar um campo id_cliente e ele ser gerado automaticamente a cada registro criado (auto_increment). Pesquisando achei essa forma de mudar a chave primária, mas não cheguei a testar: ALTER TABLE clientes MODIFY COLUMN id_uf INTEGER; ALTER TABLE clientes DROP PRIMARY KEY; ALTER TABLE clientes ADD id_cliente INTEGER PRIMARY KEY AUTO_INCREMENT; Compartilhar este post Link para o post Compartilhar em outros sites
JorgitoDF 0 Denunciar post Postado Agosto 9, 2012 Consegui resolver tudo Alexandre, agora sim está funcionando redondo, muito obrigado mesmo ai pela ajuda... Abraços Jorgito Consegui resolver tudo Alexandre, agora sim está funcionando redondo, muito obrigado mesmo ai pela ajuda... Abraços Jorgito Compartilhar este post Link para o post Compartilhar em outros sites