Ir para conteúdo

POWERED BY:

Arquivado

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

Guh Costa

[Resolvido] Consulta SQL Dinâmica

Recommended Posts

Olá!

 

Vou descrever meu problema que creio ser muito fácil de resolver, porém estou "travado".

 

Tenho um campo <select> em HTML que me traz os IDs de uma tabela.

No meu banco SQL, cada ID corresponde a um "CONTEUDO".

 

Preciso que ao selecionar cada opção, ele já preencha o campo <textarea> abaixo com os respectivos CONTEÚDOS.

 

Estou fazendo da seguinte forma:

 

<script language='javascript'>
function preencher()
{
 document.getElementById("conteudo").value = "<?php echo "$consulta;" ?>';
}

</script>


<select onchange='preencher();' size='1'>
 <option value='' selected>selecione</option>";
 $sql = "SELECT * FROM MINHA_TABELA";
 $query = mysql_query($sql,$conexao);
 $rows = mysql_num_rows($query);
 <?php
 for($x = 0; $x < $rows ; $x++)
 {
   $id = mysql_result($query, $x, 'id');
   echo "<option  value='$id'>$id</option>";
 }
 $sql2 = "SELECT * FROM MINHA_TABELA WHERE id = '$id'";
 $query2 = mysql_query($sql2,$conexao);
 $consulta = mysql_result($query2, 0, 'conteudo');
 ?>
</select>
<br>
<textarea rows='9' id='conteudo' name='conteudo' cols='36'></textarea>

Isso está preenchendo o campo CONTEUDO com o valor "<?php echo "$consulta"; ?>" em vez do valor da variável $consulta.

Creio que o problema está ao passar o parâmetro do PHP para JS.

 

Grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muda isso:

 

document.getElementById("conteudo").value = "<?php echo "$consulta;" ?>';

 

 

para isso:

 

document.getElementById("conteudo").value = "<?php echo $consulta; ?>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Wolf... mas não deu certo. Estava retornando em branco.

 

Mas já consegui resolver meu problema!

 

Fiz o seguinte: (em vermelho as linhas que alterei)

<script language='javascript'>

function preencher(variavel)

{

document.getElementById("conteudo").value = variavel;

}

 

</script>

 

 

<select onchange='preencher(this.value);' size='1'>

<option value='' selected>selecione</option>";

$sql = "SELECT * FROM MINHA_TABELA";

$query = mysql_query($sql,$conexao);

$rows = mysql_num_rows($query);

<?php

for($x = 0; $x < $rows ; $x++)

{

$id = mysql_result($query, $x, 'id');

$conteudo= mysql_result($query, $x, 'conteudo');

echo "<option value='$conteudo'>$id</option>";

}

//*$sql2 = "SELECT * FROM MINHA_TABELA WHERE id = '$id'";

$query2 = mysql_query($sql2,$conexao);

$consulta = mysql_result($query2, 0, 'conteudo');*//

?>

</select>

<br>

<textarea rows='9' id='conteudo' name='conteudo' cols='36'></textarea>

 

Só que com isso apareceu um outro problema...

 

Ao abrir a página ele já faz a consulta em todos os campos da tabela, e como a tabela é muito grande (quase 1000 linhas), demora ao carregar a página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Guh não é necessário executar a query dentro do loop.

Seu problema está na lógica.

Utilize o loop while e depois trabalhe com array.

 

$sql = "SELECT * FROM tabela";
$query = mysql_query($sql) or die(mysql_error());
$array = array();

//Pega todos os dados da base
while ($row = mysql_fetch_assoc($query)) {
   $array[] = $row;
}

//Trabalha com os dados no PHP sem milhões de consultas a base
foreach ($array AS $line=>$values) {
    echo '<option value=\''.$values['conteudo'].'\'>'.$values['id'].'</option>';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo também!

Diminuiu muito o tempo de pesquisa.

De 15 segundos, caiu para uns 4. Mas ainda assim é muito tempo.

 

Fiz de outro jeito:

Em vez de consultar o CONTEUDO (que é o que demora pra carregar, pois cada linha é muito grande, cerca de umas 4-5 páginas no word) e colocá-lo no value do campo, eu coloquei somente o ID.

Na função JS eu chamei uma página.php passando por parametro o ID, onde tem um select where ID = $id e retorna o respectivo CONTEUDO.

 

Agora ao clicar no número, retorna instantaneamente o conteudo do mesmo.

 

Valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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