Ir ao conteúdo
  • Cadastre-se

Referenciar objeto no MYSQL, com PHP.


Posts recomendados

Opa, galera então, estou em dúvida de como vou fazer  o relacionamento de forma correta!
 
Pois então,  a busca de dado do banco de dados  para o formulário será assim:

function select($optgroup,$options){
        foreach ($optgroup as $nome){
            echo "\n<optgroup label=$tipo>\n";
            foreach($options as $option){
                if ($option["NOME"] == $nome){
                    echo "<option value=".$option["ID"]." >".$option["MODELO"]."</option>\n";
                }
            }
            echo "</optgroup>";
        }   
    }
    ?>
    <select>
          <?php select($optgroup,$options); ?>
    </select>

Mas não sei como faria para fazer o INSERT dos dados no banco, se usaria alguma QUERY especifica, algum comando que puxasse o valor da tabela referenciada ou se seria só um INSERT direto mesmo. 
 
A ideia é mais ou menos ter uma pessoa cadastrada e de lá podermos registrar/associar as roupas que aquela pessoa tem. (Lembra é só pra aprendizado, kkkkk...)
 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@DYS Olá,

Não é no php que você faz relacionamentos!

Não sei como está sua modelagem do banco de dados, mas as suas tabelas precisam ser do tipo innoDB, adicionar um índice na tabela controladora e associar o ID  (PK)  com o ID(FK) da tabela que conterá a chave estrangeira.

Você pode fazer isso via phpmyadmin, na tela de designer.

 

Sobre seu código, porque criar uma função para isso?  basta ser direto! 

 

por exemplo:

<select name="escolha">
   <php
         include 'conexao.php';

        $consulta = mysqli_query($conexao, "SELECT ID, MODELO FROM pessoas");
        while( $pessoas = mysqli_fetch_object($consulta)):
               echo "<option value='$pessoas->ID'> $pessoas->MODELO </option> ";
        endwhile; 
   ?>         
</select>

Claro, desconsiderei o optiongroup. Para isso você teria que implementar na sua tabela um campo para o tipo como tens ali se quiser por exemplo listar pessoas por pessoas e um subgrupo contendo mais options.

Link para o comentário
Compartilhar em outros sites

Então @DiF, na verdade minha dúvida era em saber qual  a melhor prática na hora de inserir uma FK em um objeto.

 

No caso eu já criei meus parâmetros pré-definidos, mas por exemplo, na hora de preencher os parâmetros eu coloco o FK direto, por exemplo o ID do objeto da tabela referenciada, ou seria melhor eu utilizar um SELECT no MYSQL para achar a ID do objeto? 

E que não sei se tem problema em mostrar o ID em uma value diretamente.

 

Por exemplo uma input criada a partir de objetos que possuo em um banco.

<option value= 'ID'> 'Modelo' </option>

Ou eu deveria fazer alguma técnica de cifragem no value ID para que fosse camuflado, algo do estilo base64 que possui tanto o método CODE e DECODE?

 

*O select criado previamente, era para por exemplo uma pessoa escolher um objeto como value = 'ID' dele(Objeto), é para um formulário. 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@DYS Então,

 

1 hora atrás, DYS disse:

E que não sei se tem problema em mostrar o ID em uma value diretamente.

Não tem problema!

 

Pelo que eu entendi você quer referenciar uma chave primária para uma chave estrangeira.

Se for isso mesmo, basta colocar no select usando o inner join.

 

Por exemplo

Vamos supor que tens duas tabelas.

 

Pessoas(ID(PK), Nome, Idade)

Contatos(ID, ID_pessoa(FK), Telefone, Email)

 

Para consultar nestas duas tabelas relacionadas você faz:

SELECT Pessoas.ID, 
       Pessoas.Nome, 
       Pessoas.Idade,
       Contatos.Telefone,
       Contatos.Email
FROM  Pessoas
INNER JOIN Pessoas ON Pessoas.ID = Contatos.ID_pessoa 

Ou seja esta consulta retornaria da seguinte maneira:

 

ID   Nome    Idade  Telefone   Email
 1   Fulano   34    991572795  [email protected] 

O que mais interessa ali no código é a parte do INNER JOIN. Onde de fato você relaciona uma com a outra, ou seja, Pessoas.ID é a chave primária  e Contatos.ID_pessoa é a chave estrangeira.

 

Logo, colocando este exemplo em cima do seu código, poderia fazer assim:

 

<select name="pessoas">
  <?php
       include 'conexao.php';
      
       $consulta = mysqli_query($conexao, "SELECT Pessoas.ID, 
                                                  Pessoas.Nome, 
                                                  Pessoas.Idade,
                                                  Contatos.Telefone,
                                                  Contatos.Email
                                           FROM  Pessoas
                                           INNER JOIN Pessoas ON Pessoas.ID = Contatos.ID_pessoa");

       while($pessoas = mysqli_fetch_object($consulta)):
                echo "
                     <optgroup label='$pessoas->Nome'>
                       <option value='$pessoas->ID'>$pessoas->ID</option>
                       <option value='$pessoas->Idade'>$pessoas->Idade</option>
                       <option value='$pessoas->Telefone'>$pessoas->Telefone</option>
                       <option value='$pessoas->Email'>$pessoas->Email</option>  
                     </optgroup>"; 
       endwhile;
  ?>
</select>

Este exemplo retornaria algo assim:

 

<select name="pessoas">
  <optgroup label="Fulano">
    <option value="1">1</option>
    <option value="34">34</option>
    <option value="991572795">991572795</option>
    <option value="[email protected]">[email protected]</option>
  </optgroup>
</select>

Veja que o campo select foi populado com um optgroup com o nome do usuário e seus options dele.

 

Como a estrutura está dentro de um while, então a cada registro, terá um novo optgroup com o nome de cada pessoa.

 

Creio que foi isso que entendi do seu problema.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...