Jump to content
balaico

Erro de Sintaxe

Recommended Posts

balaico

Saudações.

Estou aproveitando as minhas férias para aprender php, para tal estou a seguir um video tutorial que tem o código de exemplo (a funcionar). Até aqui nenhum problema. O problema que tem é que ao criar uma determinada função a mesma da: Database query Failed: 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 'LIMIT 1' at line 1, no entanto no exemplo que vem no tutorial, funciona.

Já alterei o que tinha para alterar e na mesma continuou com o mesmo problema. Será que alguém com "olhos frescos" me pode ajudar e me por no "bom caminho"?

função:

function obtem_conc_id($concelho_id) {
 global $connection;
 $query = "SELECT * FROM concelhos WHERE id=" . $concelho_id ." LIMIT 1";
 $resultado = mysql_query($query, $connection);
 fez_query($resultado); //criei uma função que faz um teste se fez a query corretamente
 // REMEMBER:
 // if no rows are returned, fetch_array will return false
 if ($concelho = mysql_fetch_array($resultado)) {
   return $concelho;
 } else {
   return NULL;
 }
}

no outro ficheiro conteudos.php, recebo o valor escolhido (referente ao concelho escolhido) e faço um echo normal para apresentar o concelho selecionado.

Edited by Rui Carlos
Ajustes na formatação.

Share this post


Link to post
Share on other sites
N3lson

Onde diz obtem_conc_id($concelho_id) coloca um id conhecido

Tenta colocar assim

$query = "SELECT * FROM concelhos WHERE id=' " . $concelho_id ." ' LIMIT 1";

Podes por aqui o código de onde tiraste para fazer o teu ?


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
balaico

Saudações N3lson.

Efectuei a alteração do código como disses-te e já não dá erro (já pesquisei nalguns sites de SQL o porque, mas não encontrei uma resposta que se perceba:S), se puderes dizer qualquer coisa sobre esse assunto agradecia-te imenso, porque a passagem de aspas duplas para singulares só naquela parte não deveria fazer isso, pois estou a concatenar a sintaxe toda ...

Agora que já não dá erro, estou num mini stress, o resultado da sintaxe (nesse caso do concelho escolhido) não aparece, aparece o id do concelho, mas o nome não. Coloco aqui o código utilizado:

conteudo.php

<?php require_once("includes/database.php"); ?>
<?php require_once("includes/funcoes.php"); ?>
<?php
if (isset($_GET['conc'])){
$conc_selc = $_GET['conc'];
// se esta a selecionar 1 n esta a selecionar o outro
$freg_selc = " ";
$mensagem =" ";
}elseif (isset($_GET['freg'])) {
$freg_selc = $_GET['freg'];
// se esta a selecionar 1 n esta a selecionar o outro
$conc_selc =" ";
$mensagem =" ";
}else {
// caso n tenha selecionado nenhum
$mensagem = "Escolha um Concelho ou uma Freguesia";
$freg_selc = " ";
$conc_selc = " ";
}
$conc_escolhido = obter_conc_id($conc_selc);
?>
<?php include("includes/header2.php"); ?>

<!-- Menu - vou usar a mesma estrutura que a BD -->
<div class="basedados">

<h1 class="basedados-header custom-font basedados-header-free">Fontra Software</h1>
<br />
<table id="structure">
<tr>
<td id="page">
<h4>Concelhos</h4>
<br />
<ul class="principal">
<?php
$concelhos = obtem_concelhos();
while ($concelho = mysql_fetch_array($concelhos)){
echo "<h6><li";
//Poe o link a negrito
//Verifica se 1 concelho foi selecionado e poe a negrito se sim (Quebro a sintaxe toda anterior)em partes
if($concelho["id"] == $conc_selc) {
echo " class=\"selected\"";
}
echo "><a href=\"conteudos.php?conc=" . urlencode($concelho["id"]) . "\">{$concelho["nome_concelho"]}</a></li></h6>";

$freguesias = obtem_freguesias($concelho["id"]);
echo "<ul classe=\"secundario\">";
while ($freguesia = mysql_fetch_array($freguesias)){
echo "<li";
if($freguesia["id"] == $freg_selc) {
echo " class=\"selected\"";
}
echo "><a href=\"conteudos.php?freg=" . urlencode($freguesia["id"]) . "\"><h8>{$freguesia["nome_freguesia"]}</h8></a></li>";
}
echo "</ul>";
}
?>
</ul>
</td>
<td id="page">
<h2 align="center">Teste</h2>
<br />
<?php // Aqui deveria aparecer o nome do concelho escolhido ?>
<?php  echo $conc_escolhido['nome_concelho']; ?>
<?php // Ele reconhece e mostra o nº do concelho ou da freguesia escolhida ?>
<?php  echo $conc_selc; ?><br />
<?php  echo $freg_selc; ?><br />
<?php  echo $mensagem; ?>
</td>
</tr>
</table>
<p>Nome do utilizador</p>
<br clear="all" />
<p><center><h1 class="custom-font">Seleccione a <strong>Opção Pretendida</strong> nos Menus.</h1></center></p>
</div>

<?php require("includes/footer2.php"); ?>

aqui das funcoes.php

<?php
// Funcoes a usar posteriormente

//Ver se fez a query
function fez_query($resultado) {
if (!$resultado) {
die("Database query Failed: " . mysql_error());
}
}

function obtem_concelhos() {
global $connection;
$query = "SELECT * FROM concelhos";
$concelhos = mysql_query($query, $connection);
fez_query ($concelhos);
return $concelhos;
}

function obtem_freguesias($concelho_id) {
global $connection;
//echo $row["nome_concelho"]. "-" .$row["cod_postal"]. "<br />";
//Seleciona tudo das freguesias mas tem em conta o id do concelho p atribuir
$query = "SELECT * FROM freguesias WHERE concelho_id ={$concelho_id}";
$freguesias = mysql_query($query, $connection);
fez_query ($freguesias);
return $freguesias;
}

function obter_conc_id($concelho_id) {
global $connection;
$query = "SELECT * FROM concelhos WHERE id=' . $concelho_id . ' LIMIT 1";
$resultado = mysql_query($query, $connection);
fez_query($resultado);
// caso nenhum resultado seja obtido o fetch_array retorna falso
if ($concelho = mysql_fetch_array($resultado)) {
return $concelho;
} else {
return NULL;
}
}
?>

Sinceramente não vejo lógica em não dar o código, não só já o revi mais que uma vez, mas também indo ao tutorial, lá funciona, o que muda é o nome das variáveis.

Mas desde já o meu obrigado :)

Share this post


Link to post
Share on other sites
N3lson

Coloca assim no lugar dos ifs iniciais

$conc_selc = isset($_GET['conc']) ? $_GET['conc'] : FALSE;
$freg_selc = isset($_GET['freg']) ? $_GET['freg'] : FALSE;

if ((!$conc_selc) && (!$freg_selc)){
$mensagem = "Escolha um Concelho ou uma Freguesia";
}

Nesta função obter_conc_id não necessitas de colocar o LIMIT 1 pois o id é unico (digo eu)

outra coisa que acho que está a mais é este if, pois não estás a comparar nada (==) mas sim igualar (=),

if ($concelho = mysql_fetch_array($resultado)) {
 return $concelho;
} else {
 return NULL;
}

simplesmente deveria ter o $concelho = ....

Edited by Rui Carlos
GeSHi

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
oxyzero

Não sei se já resolves-te a situação, caso não tenhas experimenta meter a query assim:

$query = "SELECT * FROM concelhos WHERE id=$concelho_id";

Além disso, verifica se estás a receber corretamente os valores dos id's (pode ser que tenhas um espaço ou algum erro comum).

O teu problema é bastante parecido, se não igual a este: http://stackoverflow.com/questions/5499739/syntax-error-for-around-limit

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.