Guh Costa 0 Denunciar post Postado Agosto 31, 2011 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
wolfphw 60 Denunciar post Postado Agosto 31, 2011 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
Guh Costa 0 Denunciar post Postado Agosto 31, 2011 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
Periscuelo 20 Denunciar post Postado Agosto 31, 2011 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
Guh Costa 0 Denunciar post Postado Setembro 1, 2011 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