Ir para conteúdo

POWERED BY:

Arquivado

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

edison.silva

INSERT varios select name

Recommended Posts

Pessoal, como eu posso pegar os valores de cada pergunta e dar o INSERT no banco de dados?

por exemplo, eu tenho o:

select name="Perguntas1"

select name="Perguntas2"

select name="Perguntas3"

 

Pois são as opções que usuário seleciona por exemplo:

O meu insert ficaria na sequencia

como ficaria o meu $_POST para capturar e salvar?

 

 

INSERT INTO table (p1,p2,p3) VALUES (1,2,3)[/size]

INSERT INTO table (p1,p2,[/size]p3[/size]) VALUES (2,3,1,)[/size]

INSERT INTO table (p1,p2,[/size]p3[/size]) VALUES (3,3,2)[/size]

 

print da tela:[/size]

 

Listagem.jpg

$sql = ("select * from perguntas ");
    $res = mysql_query($sql);
	while ($row = mysql_fetch_array($res)){
	 $data = $row['data'];
	 $id = $row['id'];
	
	$sqlNome = 'select * from nome where id = '.$id;
	$resNome = mysql_query($sqlNome);
	while ($rowNome = mysql_fetch_assoc($resNome)){	
	$nome = $rowNome['nome'];
	}
	?>
    <input type="hidden" id="CodigoNome" name="CodigoNome[]" value="<?php echo $id?>"/>
    <tr>
	<td class="td-data"><? echo converte_data(substr($data,0,10)).' '.substr($data,11,5)?></td> 
        <td class="td-nome"><? echo ($nome)?></td>         
        <td class="td-menor" align="center">
        
        <select name="Perguntas3" id="" class="select-pergunta">
        <option value="1">1-Regular</option>
        <option value="2" selected="selected">2-Bom</option>
        <option value="3">3-Ótima</option>
	 </select></td> 
        
        <td align="center">
        <select name="Perguntas2" id="" class="select-pergunta">
        <option value="1">1-Regular</option>
        <option value="2" selected="selected">2-Bom</option>
        <option value="3">3-Ótima</option>
	    </select> 
        </td> 
        
        <td align="center">
        <select name="Perguntas3" id="" class="select-pergunta">
        <option value="1">1-Regular</option>
        <option value="2" selected="selected">2-Bom</option>
        <option value="3">3-Ótima</option>
	    </select>
        </td>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia geral é a que descrevo neste artigo:

http://rberaldo.com.br/inserindo-multiplos-registros-em-tabela-de-banco-de-dados/

 

Você pode fazer um loop:

 

for ($i = 1; $i <= $numero_de_perguntas; $i++)
{
    // resgata o valor de $_POST['Pergunta' . $i]
}

 

 

 

PS: funções mysql_* estão obsoletas desde o PHP 5.5 e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, obrigado pela resposta,

fiz conforme me falou mas não esta trazendo os resultados veja:

 for ($i = 1; $i <= 3; $i++)
	{
        $vPerguntas1= $_POST['Perguntas1' . $i];
	$vPerguntas2= $_POST['Perguntas2' . $i];
	$vPerguntas2= $_POST['Perguntas3' . $i];

	

		 
		$sql = "INSERT INTO table (p1,p2,p3) VALUES ($vPerguntas1,$vPerguntas2,$vPerguntas3)";
		echo $sql.'<br>';
	}
INSERT INTO table (p1,p2,p3) VALUES (,,,)
INSERT INTO table (p1,p2,p3) VALUES (,,,)
INSERT INTO table (p1,p2,p3) VALUES (,,,)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você fizer $_POST['Perguntas1' . $i], terá $_POST['Perguntas11'], $_POST['Perguntas12'] e $_POST['Perguntas13'].

Por isso eu coloquei só $_POST['Perguntas' . $i]. O "$i" é que vai completar o nome do campo

 

E você resgata o valor uma única vez dentro do loop. Ele será executado 3 vezes. A intenção do loop é justamente evitar duplicação de código

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi, fiz desta forma, mas não saiu o resultado desejado:

 for ($i = 1; $i <= 3; $i++)
	{
    $vPerguntas1 = $_POST['Perguntas' . $i];
		 
		$sql = "INSERT INTO table (p1,p2,p3) VALUES ($vPerguntas1,$vPerguntas1,$vPerguntas1)";
		echo $sql.'<br>';
	}
	

INSERT INTO table (p1,p2,p3) VALUES (1,1,1)
INSERT INTO table (p1,p2,p3) VALUES (2,2,2)
INSERT INTO table (p1,p2,p3) VALUES (1,1,1)

 

não sai os valores que seleciono nos selec name

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você quer guardar os 3 valores em uma única linha, não pode fazer 3 INSERTs. Tem que fazer um só.

 

Ou seja, há duas opções:

 

1. Fazer manualmente, fixando sempre os 3 valores:

 

$sql = "INSERT INTO table (p1,p2,p3) VALUES ('" . $_POST['Perguntas1'] . "', '" . $_POST['Perguntas2'] . "', '" . $_POST['Perguntas1'] . "')";

 

 

2. Usar o loop do meu exemplo e gerar um array com os valores, aí dar um implode() e usar o resultado no VALUES. Isso será útil se você tiver uma quantidade sempre diferente de perguntas. Se tiver sempre 3, poderá usar a forma 1.

Essa forma torna o sistema mais dinâmico. Mas você deveria ter uma tabela separada para as perguntas, podendo ter infinitas perguntas e não apenas 3. É a ideia que mostro aqui: http://rberaldo.com.br/usando-campos-multivalorados/

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu da primeira forma, mas só esta pegando os valores do último select name Pergunta3

$sql = "INSERT INTO table (p1,p2,p3) 
		VALUES ('".$_POST['Perguntas1'] . "', '" . $_POST['Perguntas2'] . "', '" . $_POST['Perguntas3'] . "')";
		
		echo $sql.'<br>';

INSERT INTO table (p1,p2,p3) VALUES ('1', '2', '3')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi,

mas o certo seria três INSERT

 

insert do select name Pergunta1

INSERT INTO table (p1,p2,p3) VALUES ('1', '2', '3')

insert dp select name Pergunta2

INSERT INTO table (p1,p2,p3) VALUES ('3', '1', '2')

insert do select name Pergunta3

INSERT INTO table (p1,p2,p3) VALUES ('2, '3', '2')

 

que ficaria assim que são de todos o select names selecionados e enviado via $_POST:

INSERT INTO table (p1,p2,p3) VALUES ('1', '2', '3')

INSERT INTO table (p1,p2,p3) VALUES ('3', '1', '2')

INSERT INTO table (p1,p2,p3) VALUES ('2, '3', '2')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops... falei besteira rsrs... ja vi que faz isso... mas tem um detalhe, voce tem que identificar de quem é cada pergunta... eu fiz isso adicionando o id na string que vai no atributo name.. tenta algo assim.

 

 

Melhor ainda, ja que cada um vai responder 3 perguntas, ao invés de identificar as perguntas como "pergunta1", "pergunta2" e "pergunta3", coloca no name do select o nome do usuário e trata como vetor esses dados... ja sabera que o elemento 1 do vetor corresponde a pergunta 1 e assim por diante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz um exemplo básico, você adapta ao seu:

 

<html>
<head>
<title>Agenda - Contatos</title>
<link rel="stylesheet" type="text/css" href="estilo.css">
</head>
<body>
<form action="index.php" method="post">
<select name="usuario[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
 
<select name="usuario[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
 
<select name="usuario[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="submit" value="ok">
</form>
</body>
</html>

no codigo acima, seu formulario identificado por nome do "usuario", no atributo name..

<?php 
 
 
if(isset($_POST['usuario'])){
 
 
for ($i= 0; $i < 3 ; $i++) {
echo "tem sim<br/>"; 
echo $_POST['usuario'][$i];//tratando como array
echo "<br/>";
}
 
 
}else{
echo "não veio post";
}
 
 
 ?>
em seguida, basta tratar esses dados no php como array. Ai é só fazer quantos desejar rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Repare que a name da tag select é identificada com um nome de usuario, e no script o php verifica se aquele nome de usuario existe... tenta adaptar e posta as dúvidas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

desta forma ele só pega os valores do primeiro selec name

 

HTML:

<select name="Perguntas[]" id="" class="select-pergunta">
        <option value="1">1-Regular</option>
        <option value="2" selected="selected">2-Bom</option>
        <option value="3">3-Ótima</option>
	    </select></td> 
        
        <td>
        <select name="Perguntas[]" id="" class="select-pergunta">
        <option value="1">1-Regular</option>
        <option value="2" selected="selected">2-Bom</option>
        <option value="3">3-Ótima</option>
	    </select> 
        </td> 
        
        <td>
        <select name="Perguntas[]" id="" class="select-pergunta">
        <option value="1">1-Regular</option>
        <option value="2" selected="selected">2-Bom</option>
        <option value="3">3-Ótima</option>
	    </select>
        </td>
if(isset($_POST['Perguntas'])){		
		
		for ($i= 0; $i <= 3 ; $i++) {
		  echo $_POST['Perguntas'][$i];
		
		}		
		
		}else{
		 echo 'erro';
	}

resultado:

123

 

deveria ser:

 

123

312

131

que são as opções que seleciono..

veja a imagem abaixo:

 

Listagem.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você quer N perguntas para M usuários, você precisará de um array bidimensional.

Só isso.

 

Veja:

 

 

<?php
echo "<pre>";
print_r($_POST);
echo "</pre>";
?>
<form action="" method="post">
<?php for ($i = 0; $i < 3; $i++): ?>
    Pergunta 1 para o usuário <?php echo $i + 1; ?>
    <select name="Perguntas[<?php echo $i ?>][]" id="" class="select-pergunta">
        <option value="1">1-Regular</option>
        <option value="2" selected="selected">2-Bom</option>
        <option value="3">3-Ótima</option>
    </select>
    <br>
   
    Pergunta 2 para o usuário <?php echo $i + 1; ?>
    <select name="Perguntas[<?php echo $i ?>][]" id="" class="select-pergunta">
        <option value="1">1-Regular</option>
        <option value="2" selected="selected">2-Bom</option>
        <option value="3">3-Ótima</option>
    </select>
    <br>
   
    Pergunta 3 para o usuário <?php echo $i + 1; ?>
    <select name="Perguntas[<?php echo $i ?>][]" id="" class="select-pergunta">
        <option value="1">1-Regular</option>
        <option value="2" selected="selected">2-Bom</option>
        <option value="3">3-Ótima</option>
    </select>
    <br><br>
<?php endfor; ?>
<input type="submit" value="Enviar">
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

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