Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida com loop e sql


Argos

Pergunta

Boa noite;

Como faço pra criar um loop e mostrar todas as linhas da tabela 'linhas', ou todas as coleções da tabela 'colecao', usando a seguinte instrução:

$sql = "SELECT p.id, p.nome, p.imagem, p.miniatura, l.linha, c.colecao, s.subcolecao
        FROM produtos as p, linhas as l, colecao as c, subcolecao as s
        WHERE p.idLinha = l.id AND p.idColecao = c.id AND p.idSubcolecao = s.id AND p.id = $id";

?

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

$sql = mysql_query("SELECT p.id, p.nome, p.imagem, p.miniatura, l.linha, c.colecao, s.subcolecao
        FROM produtos as p, linhas as l, colecao as c, subcolecao as s
        WHERE p.idLinha = l.id AND p.idColecao = c.id AND p.idSubcolecao = s.id AND p.id = $id");
while($dados = mysql_fetch_assoc($sql)){
print_r($dados);
}

Lembrando que você vai ter que fazer a conexão com o banco de dados e setar uma variável chamada $id com algum valor.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi ESerra;

A conexão está ok, e a $id também, vem da URL ($id = $_GET['id']).

Essa sql está em uma página de edição de produtos. O que eu gostaria de saber é como criar um loop, por exemplo, dentro de um select (combobox), mostrando todas as linhas da tabela 'linhas', sem ter qua abrir outra consulta sql, ou não tem como, e tenho que abrir outra consulta pra comparar com essa e poder mostrar a linha cadastrada selecionada?

Ex.

$sql = mysql_query("SELECT p.id, p.nome, p.imagem, p.miniatura, l.linha, c.colecao, s.subcolecao
        FROM produtos as p, linhas as l, colecao as c, subcolecao as s
        WHERE p.idLinha = l.id AND p.idColecao = c.id AND p.idSubcolecao = s.id AND p.id = $id");
$reg = mysql_fetch_array($sql);

$linha_desse_produto = $reg["idLinha"];

$sql2 = "SELECT * FROM linhas";
$resultado2 = mysql_query($sql2);

echo "<SELECT>";
while($reg2 = mysqli_fetch_array($resultado2)){
  echo "<option ".$selecionado = ($linha_desse_produto == $reg2["id"]) ? "selected" : "" .">".$reg2["linha"]."</option>";
}
echo "</SELECT>";

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Segue abaixo, um exemplo prático e fácil de entender, de como exibir dados de uma tabela:

Como exibir apenas um dado específico da tabela, a partir de um ID:

<?
//Inicio do PHP

//Ajuste a conexão com a db abaixo:
$host = "localhost"; // Host valor padrão é localhost
$usuariodb="coloque o usuario"; //Usuario de Conexao com  o MySQL
$senhadb="coloque sua senha"; // Senha de Conexao com o MySQL
$db="teste"; //Banco de Dados MySQL
$tb="tabelateste"; //Nome da tabela
$conexao=mysql_connect ("$host", "$usuariodb", "$senhadb") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("$db") or die("não foi possivel");
//Fim conexão

$sql = mysql_query("SELECT * FROM $tb WHERE id='$id'");
if (!$sql){
echo "Cadastro inexistente na tabela!";
}
else{
while ($reg = mysql_fetch_array($sql)){
$linhadesejada = $reg['linha'];
echo $linhadesejada;
}
}
?>
Acho que já sabe, mas caso não saiba a variavel $linhadesejada é a váriavel que irá buscar qual campo você quer exibir da linha selecionada. Aé, não esqueça de passar o valor da váriavel $id. Como exibir todos os dados de uma tabela:
<?
//Inicio do PHP

//Ajuste a conexão com a db abaixo:
$host = "localhost"; // Host valor padrão é localhost
$usuariodb="coloque o usuario"; //Usuario de Conexao com  o MySQL
$senhadb="coloque sua senha"; // Senha de Conexao com o MySQL
$db="teste"; //Banco de Dados MySQL
$tb="tabelateste"; //Nome da tabela
$conexao=mysql_connect ("$host", "$usuariodb", "$senhadb") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("$db") or die("não foi possivel");
//Fim conexão

$sql = mysql_query("SELECT * FROM $tb");
if (!$sql){
echo "Cadastro inexistente na tabela!";
}
else{
while ($reg = mysql_fetch_array($sql)){
$linhadesejada = $reg['linha'];
echo $linhadesejada;
}
}
?>

Aí em cima, a mesma coisa, o php irá exibir todas a linhas com o campo chamado "linha", portanto para exibir outro dado, basta editar a váriavel $linhadesejada.

Link para o comentário
Compartilhar em outros sites

  • 0

Última tentativa.

Segue o código que terei q usar para o sistema funcionar, porque consigo montar a instrução sql (1° post) mas não consigo dar o próximo passo para montar o formulário

include "../includes/conexao.inc";      
  $id = $_GET["id"];

  if ((isset($_GET["id"])) and (!isset($_POST["salvar"]))){

    $sql_p = mysql_query("SELECT * FROM produtos WHERE id=".$id);
    $reg = mysql_fetch_array($sql_p);
        
    $sql_l = mysql_query("SELECT * FROM linhas");
    $sql_c = mysql_query("SELECT * FROM colecao");
    $sql_s = mysql_query("SELECT * FROM subcolecao");        
?>
<form id="incluir_produtos" method="post">

  <div class="titulo_campos">Linha</div>
    <SELECT>
      <?php
      while($reg_l = mysql_fetch_array($sql_l)){
         echo "<option ". ($selecionado = ($reg["idLinha"] == $reg_l["id"]) ? "selected=selected" : NULL )." >".$reg_l["linha"]."</option>";
      }
      ?>
    </SELECT>
    <br />
    <br />

    <div class="titulo_campos">Coleção</div>
      <SELECT>
        <?php
        while($reg_c = mysql_fetch_array($sql_c)){
          echo "<option ". ($selecionado = ($reg["idColecao"] == $reg_c["id"]) ? "selected=selected" : NULL )." >".$reg_c["colecao"]."</option>";
        }
        ?>
      </SELECT>
      <br />
      <br />

      <div class="titulo_campos">Sub-Coleção</div>
        <SELECT>
          <?php
          while($reg_s = mysql_fetch_array($sql_s)){
            echo "<option ". ($selecionado = ($reg["idSubcolecao"] == $reg_s["id"]) ? "selected=selected" : NULL )." >".$reg_s["subcolecao"]."</option>";
          }
          ?>
        </SELECT>
    <br />
    <br />
        <div class="titulo_campos">Nome</div>
      <input size="50" type="text" name="nome_produto" maxlength="255" value="<?php echo $reg["nome"] ?>" class="campos_formulario" />

          (...)

Opa lucke, acho q postou enquanto eu escrevia. Na vdd minha dificuldade não é com a conexão, nem com os loops. Eu gostaria de saber, pra simplificar, é se tem como eu usar a sql do 1° post pra montar o formulário do post acima. Eu gostaria de usar uma instrução, abrir apenas uma consulta, e listar todas linhas da tabela linhas, todas as coleções da tabela colecao e todas as subcoleções da tabela subcolecao. É possível?

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Hum.. acho que entendi seu problema cara.você quer fazer um formulário a partir do post acima não é?tipo criar um formulário a partir da busca sql?

Se for isso, veja este exemplo que fiz, que gera um formulário e um <select> dinãmico a partir da busca:

<?
//Inicio do PHP

//Ajuste a conexão com a db abaixo:
$host = "localhost"; // Host valor padrão é localhost
$usuariodb="coloque o usuario"; //Usuario de Conexao com  o MySQL
$senhadb="coloque sua senha"; // Senha de Conexao com o MySQL
$db="teste"; //Banco de Dados MySQL
$tb="tabelateste"; //Nome da tabela
$conexao=mysql_connect ("$host", "$usuariodb", "$senhadb") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("$db") or die("não foi possivel");
//Fim conexão

$sql = mysql_query("SELECT * FROM $tb");
if (!$sql){
echo "Cadastro inexistente na tabela!";
}
else{
?>
<!--inicio do formulário dinamico-->
<form action="pagina.php" method=POST>
<select name=teste>
<?
//Vamos gerar os options dinamicos:
while ($reg = mysql_fetch_array($sql)){
$linhadesejada = $reg['linha'];
?>
<option value=$linhadesejada>$linhadesejada</option>
<?
}//Fecha While
?>
<!--Terminando select e form-->
</select>
</form>
<?
}
?>

Explicando: Por que deixei o inicio do form e do select antes do While?

Simples!Por que senão ele vai gerar um monte de <form> e um monte de <select>!

E como pode ver, coloquei código HTML livre sem regras de aspas, por que coloquei fora do "<? e ?>" que é o responsavel pela interpretação do script.

No exemplo aí, ele irá gerar um form, um select e as options.

Qualquer erro, mandai.

Flws!

Editado por lucke
Link para o comentário
Compartilhar em outros sites

  • 0

Valeu lucke, mas ainda não é isso. Vou tentar explicar bem detalhadamente.

Estou montando um sistema de administração para um site. Eu montei inicialmente a seguinte instrução sql para listar todos os produtos na página "produtos_consulta.php":

$sql = "SELECT p.id, p.nome, p.imagem, p.miniatura, l.linha, c.colecao, s.subcolecao
        FROM produtos as p, linhas as l, colecao as c, subcolecao as s
        WHERE p.idLinha = l.id AND p.idColecao = c.id AND p.idSubcolecao = s.id AND p.id = $id";

Com ela, eu consigo imprimir na tela o nome do produto, sua respectiva imagem, o nome da linha a qual o produto pertence (l.linha), o nome da colecao a qual o produto pertence (c.colecao) e a subcolecao a qual ele pertence (s.subcolecao). Nessa página cada produto tem seus respectivos ícones de 'exclusão' e 'edição'.

Ao clicarmos no botão de edição, vamos para a "produtos_alteracao.php". Aqui começa minha dúvida.

Ao invés de apenas listar os itens como na página de consulta, aqui eu tenho q possibilitar a edição do nome do produto, da sua imagem, da linha, da coleção ou da subcoleção em que ele se encontra. A melhor forma do administrador modificar a linha, a coleção e a subcoleção seria por meio de três campos do tipo select (combobox), onde em suas respectivas "<options>s" estariam listadas todas as linhas disponíveis, todas as coleções disponíveis e todas as subcoleções disponíveis, vindas do banco de dados (linhas as l, colecao as c, subcolecao as s).

O que eu gostaria de saber é se tem como eu montar os três campos select (combobox) usando APENAS a instrução sql acima. Como eu faço um loop diferente para cada combobox usando uma mesma instrução?

Como não sei a melhor forma de se trabalhar aqui, montei o código do post #5, onde desisti da instrução acima e resolvi abrir as 4 tabelas (produtos, linhas, colecao, subcolecao) individualmente. Assim, consigo fazer os loops usando '$linhas = mysql_num_rows($sql)' ou 'while($sql = mysql_fetch_array)' de cada uma das instruções abertas.

Eu estou aprendendo PHP na marra, comprei uns livros, lendo vários sites, e queria mesmo saber qual a forma mais "otimizada" pra se fazer essa consulta, pra deixar, além de certo, o "menos lerdo" possível.

Link para o comentário
Compartilhar em outros sites

  • 0
Valeu lucke, mas ainda não é isso. Vou tentar explicar bem detalhadamente.

Estou montando um sistema de administração para um site. Eu montei inicialmente a seguinte instrução sql para listar todos os produtos na página "produtos_consulta.php":

$sql = "SELECT p.id, p.nome, p.imagem, p.miniatura, l.linha, c.colecao, s.subcolecao
        FROM produtos as p, linhas as l, colecao as c, subcolecao as s
        WHERE p.idLinha = l.id AND p.idColecao = c.id AND p.idSubcolecao = s.id AND p.id = $id";

Com ela, eu consigo imprimir na tela o nome do produto, sua respectiva imagem, o nome da linha a qual o produto pertence (l.linha), o nome da colecao a qual o produto pertence (c.colecao) e a subcolecao a qual ele pertence (s.subcolecao). Nessa página cada produto tem seus respectivos ícones de 'exclusão' e 'edição'.

Ao clicarmos no botão de edição, vamos para a "produtos_alteracao.php". Aqui começa minha dúvida.

Ao invés de apenas listar os itens como na página de consulta, aqui eu tenho q possibilitar a edição do nome do produto, da sua imagem, da linha, da coleção ou da subcoleção em que ele se encontra. A melhor forma do administrador modificar a linha, a coleção e a subcoleção seria por meio de três campos do tipo select (combobox), onde em suas respectivas "<options>s" estariam listadas todas as linhas disponíveis, todas as coleções disponíveis e todas as subcoleções disponíveis, vindas do banco de dados (linhas as l, colecao as c, subcolecao as s).

O que eu gostaria de saber é se tem como eu montar os três campos select (combobox) usando APENAS a instrução sql acima. Como eu faço um loop diferente para cada combobox usando uma mesma instrução?

Como não sei a melhor forma de se trabalhar aqui, montei o código do post #5, onde desisti da instrução acima e resolvi abrir as 4 tabelas (produtos, linhas, colecao, subcolecao) individualmente. Assim, consigo fazer os loops usando '$linhas = mysql_num_rows($sql)' ou 'while($sql = mysql_fetch_array)' de cada uma das instruções abertas.

Eu estou aprendendo PHP na marra, comprei uns livros, lendo vários sites, e queria mesmo saber qual a forma mais "otimizada" pra se fazer essa consulta, pra deixar, além de certo, o "menos lerdo" possível.

Olá!

Claro que tem, basta fazer uma página que faz a consulta e que cria os respectivos inputs para edição do título, imagem e tudo mais.E para carregar as informações que já existem, basta usar o while.

Flws!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...