balaico Posted August 13, 2013 at 03:13 PM Report #521626 Posted August 13, 2013 at 03:13 PM 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.
AJBM Posted August 13, 2013 at 04:09 PM Report #521628 Posted August 13, 2013 at 04:09 PM Boas! Ve este link http://dev.mysql.com/doc/refman/5.1/en/select.html.
N3lson Posted August 13, 2013 at 07:32 PM Report #521651 Posted August 13, 2013 at 07:32 PM 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.
balaico Posted August 15, 2013 at 12:12 AM Author Report #521780 Posted August 15, 2013 at 12:12 AM 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 🙂
N3lson Posted August 15, 2013 at 05:04 AM Report #521787 Posted August 15, 2013 at 05:04 AM 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 = .... You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.
oxyzero Posted August 15, 2013 at 07:37 PM Report #521833 Posted August 15, 2013 at 07:37 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now