Jump to content
silverr20

Erro de Sintaxe em Query SQL

Recommended Posts

silverr20


<?php

require ('inc_conexao.php');

$sql = "SELECT * FROM clientes ORDER BY id_clientes ASC LIMIT $inicio, $quantidade";
$qr = mysql_query($sql) or die (mysql_error());
while($ln = mysql_fetch_assoc($qr))
{			
echo '
**********
Aqui aparecem as caixas de texto com as respectivas variáveis, etc.
**********
';

}


?>

Até aqui está tudo a funcionar, agora o que pretendo é usar um ORDENAR POR:

<form method="GET" enctype="text/plain" action="ver_cliente.php">

                                                                               

<select size="1" height="1" name="escolhe">
<option value="nome">Clientes</option>
<option value="id_clientes">Id</option>
<option value="morada">Morada</option>
</select>

<input type="submit" class="button" value="Ordenar">

</form>

Se eu puser assim:

    <select size="1" height="1" name="$escolhe">  

e

     $sql = "SELECT * FROM clientes ORDER BY$escolhe ASC LIMIT $inicio, $quantidade";   

ele assim da-me erro, se alguem me puder dar uma ajuda ou orientar como fazer mais praticamente, agradecia

cumprimentos

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Onde tens:

     $sql = "SELECT * FROM clientes ORDER BY$escolhe ASC LIMIT $inicio, $quantidade";   

Deveria ser:

     $sql = "SELECT * FROM clientes ORDER BY $escolhe ASC LIMIT $inicio, $quantidade";   

(Sim, um espaço faz mta coisa :) )

Share this post


Link to post
Share on other sites
silverr20

Onde tens:

Deveria ser:

     $sql = "SELECT * FROM clientes ORDER BY $escolhe ASC LIMIT $inicio, $quantidade";   

(Sim, um espaço faz mta coisa :) )

Da me este erro

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC LIMIT 0, 10' at line 1"

ou seja, eu se puser a variavel, ele nao reconhece porque nao foi indicada nenhuma opcao :x

Porque antes de escolher eu quero que apareca os clientes, é esta a complicaçao que eu nao consigo resolver AINDA

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Tens de definir o valor da variável $escolhe, se não for indicado um.

Nota: Não precisas de meter "ASC", esse é o valor por defeito.

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Da me este erro

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC LIMIT 0, 10' at line 1"

ou seja, eu se puser a variavel, ele nao reconhece porque nao foi indicada nenhuma opcao :x

Porque antes de escolher eu quero que apareca os clientes, é esta a complicaçao que eu nao consigo resolver AINDA

Experimenta fazer antes da query:

$escolhe = @mysql_real_escape_string(strip_tags($_GET['escolhe']));

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Ahhh acho que já percebi.... Então para isso, precisas de alterar o código. Estava assim:

<?php
require ('inc_conexao.php');

$sql = "SELECT * FROM clientes ORDER BY id_clientes ASC LIMIT $inicio, $quantidade";
$qr = mysql_query($sql) or die (mysql_error());
while($ln = mysql_fetch_assoc($qr))
{			
echo '
**********
Aqui aparecem as caixas de texto com as respectivas variáveis, etc.
**********
';

}
?>

Passa a:

<?php
require ('inc_conexao.php');

if( isset($_GET['escolhe']) )
{
  $escolhe = mysql_real_escape_string(strip_tags($_GET['escolhe']));
  $sql = "SELECT * FROM clientes ORDER BY $escolhe ASC LIMIT $inicio, $quantidade";
}
else
  $sql = "SELECT * FROM clientes ORDER BY id_clientes ASC LIMIT $inicio, $quantidade";
$qr = mysql_query($sql) or die (mysql_error());
while($ln = mysql_fetch_assoc($qr))
{			
echo '
**********
Aqui aparecem as caixas de texto com as respectivas variáveis, etc.
**********
';

}
?>

Share this post


Link to post
Share on other sites
silverr20

Boas

mAiN_iNfEcTiOn obrigado pelo código!

Andei ai a ver o significado das sintaxes e ja percebi. (demorei 3 dias ham ;) )

Agora surgui me outra problema:

Ao fazer a rotação de pagina, a ordem que eu pre-defini, por exemplo pela MORADA, ao passar para a página seguinte a ordem perdesse e volta a ordenar pelo ID_CLIENTES

eu fiz várias tentativas para resolver isto, esclareçam-me se tiver a pensar de forma errada

require ('inc_conexao.php');

$quantidade = 10;
$pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1;
$inicio = ($quantidade * $pagina) - $quantidade;



if( isset($_GET['escolhe']) )
{
  $escolhe = mysql_real_escape_string(strip_tags($_GET['escolhe']));
  $sql = "SELECT * FROM clientes ORDER BY $escolhe ASC LIMIT $inicio, $quantidade";
}
else
{
  $sql = "SELECT * FROM clientes ORDER BY id_clientes ASC LIMIT $inicio, $quantidade";
}
$qr = mysql_query($sql) or die (mysql_error());
while($ln = mysql_fetch_assoc($qr))
{			
echo '
**********
Aqui aparecem as caixas de texto com as respectivas variáveis, etc.
**********
';

}

$sqlTotal     =  "SELECT id_clientes FROM clientes";
$qrTotal      =  mysql_query($sqlTotal) or die(mysql_error());
$numTotal     =  mysql_num_rows($qrTotal);
$totalPagina  =  ceil($numTotal/$quantidade);


echo ' <a href="?pagina=1"><img src="./images/icons2/previousS.png" class="button" width="11" height="11"/></a>';

for ($i = 1; $i <= $totalPagina; $i++)
{
if($i == $pagina)
	echo "<b> $i</b> ";
else
	echo "<a href=\"?pagina=$i\"> $i</a> ";
}

echo "<a href=\"?pagina=$totalPagina\"><img src='./images/icons2/nextS.png' class='button' width='11' height='11'/></a>";

?>

Eu fiz isto:

echo "<a href=\"?pagina=$i\?escolhe=$escolhe"> $i</a> ";

Ele realmente percebe que eu ao mudar de página leva com ele a ordem que escolhi!

Aqui, nao posso fazer isto porque isto é para ir buscar a base de dados

$sqlTotal     =  "SELECT id_clientes FROM clientes";

- >

$sqlTotal     =  "SELECT $escolhe FROM clientes";

De momento tou sem ideias se me pudessem ajudar...

Cumprimentos

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

mAiN_iNfEcTiOn obrigado pelo código!

Hey, uns prós outros ;):)

No teu caso, onde tens:

$sqlTotal     =  "SELECT id_clientes FROM clientes";
$qrTotal      =  mysql_query($sqlTotal) or die(mysql_error());
$numTotal     =  mysql_num_rows($qrTotal);
$totalPagina  =  ceil($numTotal/$quantidade);


echo ' <a href="?pagina=1"><img src="./images/icons2/previousS.png" class="button" width="11" height="11"/></a>';

for ($i = 1; $i <= $totalPagina; $i++)
{
if($i == $pagina)
	echo "<b> $i</b> ";
else
	echo "<a href=\"?pagina=$i\"> $i</a> ";
}

echo "<a href=\"?pagina=$totalPagina\"><img src='./images/icons2/nextS.png' class='button' width='11' height='11'/></a>";

?>

Comecemos pelo geral....

É assim, a ordenação não interfere na contagem de registos para paginação... O código como tens, chega perfeitamente.... No entanto eu faria a seguinte alteração:

$sqlTotal     =  "SELECT COUNT(id_clientes) as total FROM clientes";
$qrTotal      =  mysql_query($sqlTotal) or die(mysql_error());
$numTotal = mysql_fetch_assoc($qrTotal);
$numTotal     =  $numTotal['total'];
$totalPagina  =  ceil($numTotal/$quantidade);

Porquê? Porque o COUNT() serve para a contagem de registos. Além disso retorna-te só uma linha com o total (isto pode variar com o tipo de query, mas neste caso em específico é assim!) ao invés de uma carrada registos para fazer o count.

Se precisasses dos registos, aí sim seria como estavas a fazer.

Seguindo... Para manteres a ordenação, deves colocar nos <a> da paginação a string "&escolhe=$escolhe", ao invés do ? a mais que colocaste.

Assim:

echo "<a href='index.php?pagina=$i&escolhe=$escolhe'> $i</a>";

Share this post


Link to post
Share on other sites
silverr20

Hey, uns prós outros ;):)

No teu caso, onde tens:Comecemos pelo geral....

É assim, a ordenação não interfere na contagem de registos para paginação... O código como tens, chega perfeitamente.... No entanto eu faria a seguinte alteração:

$sqlTotal     =  "SELECT COUNT(id_clientes) as total FROM clientes";
$qrTotal      =  mysql_query($sqlTotal) or die(mysql_error());
$numTotal = mysql_fetch_assoc($qrTotal);
$numTotal     =  $numTotal['total'];
$totalPagina  =  ceil($numTotal/$quantidade);

Porquê? Porque o COUNT() serve para a contagem de registos. Além disso retorna-te só uma linha com o total (isto pode variar com o tipo de query, mas neste caso em específico é assim!) ao invés de uma carrada registos para fazer o count.

Se precisasses dos registos, aí sim seria como estavas a fazer.

Seguindo... Para manteres a ordenação, deves colocar nos <a> da paginação a string "&escolhe=$escolhe", ao invés do ? a mais que colocaste.

Assim:

echo "<a href='index.php?pagina=$i&escolhe=$escolhe'> $i</a>";

Sim, no meu caso utilizei as tuas dicas!

Mas acrescentei isto, porque ao entrar na pagina, ele ficava sem indicação sobre a ordem que devia de tomar ou seja, eu mudava para a segunda pagina e nao aparecia nada, pronto fiz isto e ja da :)


for ($i = 1; $i <= $totalPagina; $i++)
{
if($i == $pagina)
    {
	echo "<b> $i</b> ";
	}
    else if ($escolhe == "")
    {
	echo "<a href='?pagina=$i'> $i</a>";
	}
    else 
    {
	echo "<a href='?pagina=$i&escolhe=$escolhe'> $i</a>";
	}
}

Como dizem os brazucas....vALEU ^^

Obrigado mais uma vez pelas informações dadas e bem explicitas!

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn
;):) Ainda bem que percebeste bem o código... :) Sempre às ordens. Abraço

Share this post


Link to post
Share on other sites
silverr20

:) :) Ainda bem que percebeste bem o código... :thumbsup: Sempre às ordens. Abraço

obrigado :thumbsup:

olha sabes como bloquear, por exemplo:

<select size="1" height="1" name="escolhe">
<option value="id_clientes">Id</option>
<option value="nome">Nome</option>
<option value="morada">Morada</option>
</select>

eu carrego no Nome, ele pesquisa pelo nome mas ele vai para o 1ª valor que é  Id.

eu quero que ele bloqueie pelo o que eu estou a ordenar, tas a perceber?

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

obrigado :)

olha sabes como bloquear, por exemplo:

<select size="1" height="1" name="escolhe">
<option value="id_clientes">Id</option>
<option value="nome">Nome</option>
<option value="morada">Morada</option>
</select>

eu carrego no Nome, ele pesquisa pelo nome mas ele vai para o 1ª valor que é  Id.

eu quero que ele bloqueie pelo o que eu estou a ordenar, tas a perceber?

Estou a perceber... :thumbsup:

É assim, existe um atributo das <option> chamado selected... para determinares/definires se uma option está seleccionada, vês se tem - ou no caso de definir pões - selected="selected" dentro da tag <option>.....

No teu caso é uma questão de if's.... verificar se o $escolhe está definido (e para isso usas a função isset() e se o valor da escolhe eh igual ao valor do atributo value da <option> :thumbsup: yh?

Share this post


Link to post
Share on other sites
silverr20

n percebi , desculpa !  😳

mas tenho aqui este codigo se me puderes ajudar a concluir porque deve ser um erro simples, é sempre mas comeco a stressar se isto nao funciona  :wallbash:

achei mais interessante fazer desta maneira




<script type="text/javascript"> 
function java(aiEtal){ 

switch(aiEtal['primeiro'].disabled){ 

case false: 
aiEtal['primeiro'].disabled=true; 
aiEtal['seg'].value="Retroceder"; 
aiEtal['segundo'].disabled=false; 
aiEtal['enviar'].disabled=false; 

break 

case true: 
aiEtal['primeiro'].disabled=false; 
aiEtal['seg'].value="Seguinte"; 
aiEtal['segundo'].disabled=true; 
aiEtal['enviar'].disabled=true; 

break 
} 

} 
</script>







</head> 

<body> 
<form name="formulario" id="formulario" action="javascript:alert('Foi enviado com sucesso!');"> 
<select onchange="this.form['seg'].disabled=(this.value=='')?true:false;" id="primeiro" name="primeiro" size="1"> 
    <option value="" selected="selected">Escolha um País</option> 
    <option value="1">Portugal</option> 
    <option value="2">Espanha</option> 
</select> 
<input type="button" disabled="disabled" name="seg" id="seg" value="Seguinte" onclick="java(this.form)" /> <br>

<?php


			if ($primeiro == 1)
				{	
					echo "	<select id='segundo' name='segundo' size='1' multiple='multiple' disabled='disabled'> 
							<option value='' selected='selected'></option>
						    <option value='1'>Lisboa</option> 
						    <option value='2'>Porto</option> 
						</select> 
						<input type='submit' name='enviar' id='enviar' value='Enviar!' disabled='disabled' /> ";
				}
			else
				{
				 	echo "
						<select id='segundo' name='segundo' size='1' multiple='multiple' disabled='disabled'> 
							<option value='' selected='selected'></option>
							<option value='1'>Madrid</option> 
						    <option value='2'>Barcelona</option> 
						</select> 
						<input type='submit' name='enviar' id='enviar' value='Enviar!' disabled='disabled' /> ";	

				}



?>


</form> 

O codigo está a funcionar mas esse if AINDA nao consigo por a trabalhar

Eu sei k este codigo é outro, mas se conseguir 1 ......

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

-.-' ... eu falei algo do género:

<select size="1" height="1" name="escolhe">
<option <?php if($escolhe=='id_clientes') echo 'selected="selected"';?> value="id_clientes">Id</option>
<option <?php if($escolhe=='nome') echo 'selected="selected"';?> value="nome">Nome</option>
<option <?php if($escolhe=='morada') echo 'selected="selected"';?> value="morada">Morada</option>
</select>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.