Jump to content
Aureo Almeida

Formulário não envia parte de consultas

Recommended Posts

Possuo um formulário que está repassando parte dos dados que desejo enviar. Ele busca o resultado de três consultas e duas delas dão opções de seleção para  o usuário em input radio.

A primeira busca informações de produtos selecionados a partir de um parâmetro recebido via post. Este mesmo parâmetro também estabelece um critério para as outras duas consultas.

Todas elas funcionam adequadamente, sem problemas. A questão é que ao enviar o formulário somente os dois parâmetros que estão presentes em inputs hidden são enviados. Os dois inputs radio, que são preenchidos de acordo com determinados critérios, não.

Este é o código do formulario:

<form  action="carrinho.php" method="post">
         <?php

        //Recebe a variavel idproduto da página do produto
        $sub_id = $_POST['idproduto'];

       	$sql = "SELECT * FROM psd_produtos Where prd_id = '$sub_id'";
        $stmt = $conn->prepare($sql);
        $stmt->execute();
        $dados= $stmt->fetchAll(PDO::FETCH_OBJ);

   			foreach ($dados as $detProdutos): 
            $prdid = $detProdutos->prd_id;
            $nome= $detProdutos->prd_nome;
            $valor = $detProdutos->prd_valor;
    		$novovalor =  number_format($valor, 2, ',', '.');
            $quantidade = $detProdutos->prd_estoque;
            echo"
            <h2>PREÇO: R$ $novovalor</h2><br/>
            <input type='hidden' name='id' value='$prdid'>
            <input type='hidden' name='acao' value='add'>
            ";
    		endforeach;
 
		$sql1 = "SELECT * FROM  psd_cores WHERE prd_id = '$sub_id'AND crs_quantidade != '0'";
        $stmt1 = $conn->prepare($sql1);
        $stmt1->execute();
        $dados1= $stmt1->fetchAll(PDO::FETCH_OBJ);
   			  
			foreach ($dados1 as $prodCores):
             if($quantidade!= 0){
              echo"
                  <input type='radio' name='cor' id='cor' value='$prodCores->crs_cores' checked='checked'> $prodCores->crs_cores
                  <br>

                  ";}
   			endforeach;
		         
		 	$sql2 = "SELECT * FROM  psd_sabores WHERE prd_id = '$sub_id'AND sbr_quantidade != '0'";
         	$stmt2 = $conn->prepare($sql2);
         	$stmt2->execute();
         	$dados2= $stmt2->fetchAll(PDO::FETCH_OBJ);
              foreach ($dados2 as $prodSabores):
                 if($quantidade!= 0){
                 echo"
                    <input type='radio' name='sabor' id='sabor 'value='$prodSabores->sbr_sabor' checked='checked'> $prodSabores->sbr_sabor
                    <br>
               ";}
                 endforeach;
  	?>
    <input type='submit' class='imput-comprar' value='Comprar'>

</form>

O estranho é que se eu fizer um formulário com uma das  consultas isoladamente da demais, os parâmetros são enviados. Exemplo que funciona:

<form  action="carrinho.php" method="post">	 	
			$sql2 = "SELECT * FROM  psd_sabores WHERE prd_id = '$sub_id'AND sbr_quantidade != '0'";
         	$stmt2 = $conn->prepare($sql2);
         	$stmt2->execute();
         	$dados2= $stmt2->fetchAll(PDO::FETCH_OBJ);
              foreach ($dados2 as $prodSabores):
                 if($quantidade!= 0){
                 echo"
                    <input type='radio' name='sabor' id='sabor 'value='$prodSabores->sbr_sabor' checked='checked'> $prodSabores->sbr_sabor
                    <br>
               ";}
                 endforeach;?>
    <br><input type='submit' class='imput-comprar' value='Comprar'>

</form>

O que pode estar impedindo que os valores das duas consultas após a primeira não sejam enviadas em conjunto, somente isoladamente?

Share this post


Link to post
Share on other sites

Aureo Almeida

Fera, existe um erro básico no seu código.

Ao usar o LAÇO de FOREACH e exibir os RÁDIOS, você está colocando TODOS OS RÁDIOS com a opção CHECKED, mas aparentemente não existe nada de errado na página, pelo menos não neste local onde você monta o FORM.

 

Você pode postar o resultado testa página? Abrindo ela no seu navegador e exibindo o código fonte?

Gostaria de ver como está página fica depois de montada, talvez exista algum erro não visivel no arquivo PHP.

 

Poste o local que você recebe esses valores dentro de "carrinho.php".

 

Se a minha resposta for útil não esqueça de agradecer e votar positivo.

Espero ter ajudado de alguma forma.

 

Att
Felipe Guedes Coutinho

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Alberto Nascimento
      Como faço para inserir data e horário no campo abaixo?
       
      <input name="horarioatual" id="horarioatual" style="width: 366px" type="text" />  
      Quando utilizava no PHP 5.3 funcionava com "echo", porém agora não esta mais quando estou utilizando o PHP 5.6
       
      <?php echo "$date"; ?>  
    • By Alberto Nascimento
      Estou utilizando agora PHP 7.2 em meu servidor e gostaria de saber onde consigo baixar ou se teriam algum exemplo de formulario PHP que inserisse dados em um banco de dados mysql.
       
      Utilizo o seguinte abaixo:
       
      index.php
      <?php session_start(); ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <title>CRUD - Cadastrar</title> </head> <body> <h1>Cadastrar Usuário</h1> <?php if(isset($_SESSION['msg'])){ echo $_SESSION['msg']; unset($_SESSION['msg']); } ?> <form method="POST" action="processa.php"> <label>Nome: </label> <input type="text" name="nome" placeholder="Digite o nome completo"><br><br> <label>E-mail: </label> <input type="email" name="email" placeholder="Digite o seu melhor e-mail"><br><br> <input type="submit" value="Cadastrar"> </form> </body> </html> processa.php
       
      <?php session_start(); include_once("conexao.php"); $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING); $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL); //echo "Nome: $nome <br>"; //echo "E-mail: $email <br>"; $result_usuario = "INSERT INTO usuarios (nome, email, created) VALUES ('$nome', '$email', NOW())"; $resultado_usuario = mysqli_query($conn, $result_usuario); if(mysqli_insert_id($conn)){ $_SESSION['msg'] = "<p style='color:green;'>Usuário cadastrado com sucesso</p>"; header("Location: index.php"); }else{ $_SESSION['msg'] = "<p style='color:red;'>Usuário não foi cadastrado com sucesso</p>"; header("Location: index.php"); } conexao.php
      <?php $servidor = ""; $usuario = ""; $senha = ""; $dbname = ""; //Criar a conexao $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); Com isto, esta retornando as mensagens de erro abaixo:
      Linha: 8
       
      Linha: 12
       
      Linha: 14
       
      Obrigado desde já !!
    • By unset
      Olá... estou com um pequeno problema de lógica no meu sistema, e ainda não encontrei a solução se alguém puder ajudar
       
      Bom eu tenho um formulário onde contem dois campos, onde um serve para selecionar imagens e o outro para selecionar arquivos, da seguinte forma
       
      <form name="cadastrar" method="post" enctype="multipart/form-data"> <input type="file" multiple name="imagens[]" accept=".jpg, .jpeg, .png, .gif"/> <input type="file" multiple name="arquivos[]" accept=".pdf" /> </form> e no php eu verifico se eles estão vazios para chamar suas classes que fazem o resto, cadastrar no banco, enviar os arquivos etc...
       
      if (!empty($_FILES['imagens']['tmp_name'])): $imagens = new AdminPostagensImagens(); $imagens->enviarImagens($_FILES['imagens'], $id); endif; if (!empty($_FILES['arquivos']['tmp_name'])): $arquivos = new AdminPostagensArquivos(); $arquivos->enviarArquivos($_FILES['arquivos'], $id); echo 'saporra não pode carregar vazio'; endif; porém ao deixar o campo de enviar imagens vazio mesmo assim ele esta entrando na condição e chamando a classe, não sei onde está o erro, se alguém puder ajudar fico grato.
    • By leandrodesouza14
      Tenho uma duvida.
       
      Estou recebendo dados de um formulário HTML através do método POST. Um desses dados provem de um campo Select com diversos Options.
       
      Eu vou inserir os dados recebidos dos diversos imputs em varias tabelas, qual das tabelas vai depender do que o usuário selecionar no Select.
       
      Por exemplo: Se a pessoa selecionar BMW no Select, os dados do restante do formulário devem ser inseridos na tabela BMW. / Se a pessoa selecionar Fiat no Select, os dados do restante do formulário devem ser inseridos na tabela Fiat.
       
      O codigo que desenvolvi ate agora foi esse:
       
      <form action="cadastrodeveiculo.php" method="post" name="cadastroveiculo"> <p> Fabricante: <select name="marca"> <option value="audi" >Audi</option> <option value="bmw">BMW</option> <option value="chevrolet">Chevrolet</option> <option value="citroen">Citroen</option> <option value="fiat">Fiat</option> <option value="ford">Ford</option> <option value="hyundai">Hyundai</option> <option value="honda">Honda</option> <option value="jeep">Jeep</option> <option value="mb">Mercedes-Benz</option> <option value="mitsubishi">Mitsubishi</option> <option value="nissan">Nissan</option> <option value="peugeot">Peugeot</option> <option value="renault">Renault</option> <option value="toyota">Toyota</option> <option value="volkswagen">Volkswagem</option> </select> Modelo: <input type="text" id="modelo" name="modelo" maxlength="50"> Versao: <input type="text" id="versao" name="versao" maxlength="100"> Ano: <input type="text" id="ano" name="ano" maxlength="12"> Link: <input type="text" id="link" name="link" maxlength="300"> </p> <input class="submit" type="submit" name="cadastrar" value="Cadastrar"> </form> O codigo PHP, da pagina cadastroveiculo.php e o seguinte:
       
      <?php $conn = mysqli_connect("localhost", "leandro", "123", "afxveiculos"); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; $tabela = $_POST['marca']; $modelo = $_POST['modelo']; $versao = $_POST['versao']; $ano = $_POST['ano']; $link = $_POST['link']; $sql = "INSERT INTO (modelo, versao, ano, link) VALUES ('$modelo', '$versao', '$ano', '$link')"; if (mysqli_query($conn, $sql)) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); header("location: cadastroesquema.html"); ?> Deixei o Insert Into vazio pois não sei que colocar la.
       
      Obrigado galera!
    • By andrelimaverde
      Pessoal desde já agradeço a todos, e vamos lá.
      Primeiro esclareço que meu conhecimento em PHP é básico e em MYSQL praticamente nulo...
      Meu objetivo é: Salvar dados do formulário (3 páginas) no mesmo ID (mesma linha) do banco de dados.
      Tenho:
      <!-- PÁGINA INDEX.PHP --> <?php session_start(); ?> <html> <form method="POST" action="1.php"> <input type="text" name="namenome" placeholder="Nome"> <input type="text" name="namesobrenome" placeholder="Sobrenome"> <input type="radio" name="radio" value="Masculino"> <input type="radio" name="radio" value="Feminino"> <input type="submit" name="namebtn" value="Próximo Passo"> </form> </html> E assim são as outras duas páginas, exemplificando, muito simples...
      No Index o FORM tem action="1.php" 
      Na Pagina2 o FORM tem action="2.php" e assim sucessivamente.
       
      1.php funcionando perfeitamente:
      <?php session_start(); include_once 'conexao.php'; //conexao.php somente faz a conexão com banco de dados, define as credenciais e atrubi a variável $conn //$conn = new PDO('mysql:host=' . HOST . ';dbname=' . DBNAME . ';', USER, PASS); $btn = filter_input(INPUT_POST, 'namebtn', FILTER_SANITIZE_STRING); if($btn){ //Recebe os dados do form $nom = filter_input(INPUT_POST, 'namenome', FILTER_SANITIZE_STRING); $sob = filter_input(INPUT_POST, 'namesobrenome', FILTER_SANITIZE_STRING); $rad = filter_input(INPUT_POST, 'radio', FILTER_SANITIZE_STRING); //Insere os dados no banco $get_data = "INSERT INTO info_tabela (nome, sobrenome, sexo) VALUES (:namenome, :namesobrenome, :radio)"; $insert_data = $conn->prepare($get_data); $insert_data->bindParam(':namenome', $nom); $insert_data->bindParam(':namesobrenome', $sob); $insert_data->bindParam(':radio', $rad); if($insert_data->execute()){ header("Location:pagina2.php"); //Se enviar corretamente redireciona para segunda página }else{ $_SESSION['msg'] = "<p style='color:tomato;background:#fff;'>Não foi possível enviar suas informações, verifique e tente novamente.</p>"; header("Location:index.php"); //Se não apresenta o erro } }else{ $_SESSION['msg'] = "<p style='color:tomato;'>Não foi possível enviar suas informações, verifique e tente novamente.</p>"; header("Location:index.php"); } Até ai tudo bem, insere corretamente os dados nas respectivas colunas da tabela ID=1, NOME= 'nome', SOBRENOME= 'sobrenome', SEXO= 'sexo'.
      No Banco de Dados ainda temos as colunas a serem preenchidas no mesmo ID(mesma linha) --> CIDADE= ' ', ENDEREÇO= ' ', CEP= ' ', 
      Que referem-se à pagina2.php:
      <!-- PÁGINA PAGINA2.PHP --> <?php session_start(); ?> <html> <form method="POST" action="2.php"> <!-- ACTION 2.PHP RESPECTIVAMENTE --> <input type="text" name="namecidade" placeholder="Cidade"> <input type="text" name="nameendereco" placeholder="Endereço"> <input type="tex" name="namecep" placeholder="Cep"> <input type="submit" name="namebtn" value="Próximo Passo"> </form> </html> O problema, é que ao enviar o formulário com action="2.php" cujo arquivo possui o mesmo código que o "1.php" mudando somente os dados recebidos,
      No Banco de Dados é criado um novo ID(2) ou seja, uma nova linha, com os dados atuais nas colunas (cidade, endereço, cep) preenchidos, e as colunas anteriores (nome, sobrenome, sexo) vazias...
       
      Pessoal esta é a minha dúvida, como resolver, salvar todos os dados num mesmo id, mesma linha. O código do arquivo 2.php é o mesmo pois não faço ideia de como implementar isso, como em soluções anteriores tais dados costumava enviar com PhpMailer para e-mail então não entendo de MYSQL.
       
      Código simplificado e resumido ao máximo...
      Obrigado.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.