Ir para o conteúdo
balaico

Erro de Sintaxe

Mensagens Recomendadas

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.

Editado por Rui Carlos
Ajustes na formatação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 = ....

Editado por 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.