Folkmir 0 Denunciar post Postado Março 26, 2009 Salve amigos. Tenho um script onde o administrador seleciona os direitos de uso de cada usuário, o problema é que quando chega na linha 30 ele acusa este erro: Parse error: syntax error, unexpected T_VARIABLE in /home/XXXXXX/public_html/rights.php on line 30 O script é este: <? include "config.php"; if (empty($_SESSION['id'])) { include "index.php"; die(); } check_login(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>KaTroops - <?= text('rights_header') ?></title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <? include "menu.php"; ?> <p></p> <div align="center"> <table class="tabella" cellpadding="2" cellspacing="1"> <tr> <th bordercolor="#F8E8AA" bordercolordark="#F8E8AA" bordercolorlight="#FF9933" bgcolor="#FFD57D" colspan="3"><?= text('edit_rights') ?></th> </tr> <? $sql ="select u.name, u.level "; $sql.="from ".PREFIX."user u "; $sql.="where u.id =" $idu; $result = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($result); echo " <tr>\n"; echo " <td width=170>".text('name')."</td>"; echo " <td>".$row['name']."</td>"; echo " <td title=\"".text('level'.$row['level'])."\">".$row['level']."</td>"; echo " </tr>\n"; ?> </table> <p></p> <form method="post" action="post_rights.php"> <input type=hidden name=idu value=<?= $idu ?>> <p></p> <?= text('rights_change') ?> <select name="change_rights"> <option value=1><?= text('level1') ?></option> <option value=10><?= text('level10') ?></option> <option value=99><?= text('level99') ?></option> </select> <p></p> <input type="submit" class="bottone" value="<?= text('save') ?>"> </form> </div> <? include "bottom.php"; ?> </body> </html> Como resolvo este problema? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 26, 2009 Concatene a variável da linha 30: $sql.= 'WHERE u.id ='.$idu;E aqui nessa linha, é melhor prática, usar a tag completa: <input type="hidden" name="idu" value="<?php echo $idu; ?>" />Não se esqueça tb, se delimitar atributos HTML com aspas duplas. Compartilhar este post Link para o post Compartilhar em outros sites
Folkmir 0 Denunciar post Postado Março 26, 2009 William obrigado por estar tentando ajudar... O erro agora mudou está assim: Notice: Undefined variable: idu in /home/a2242136/public_html/rights.php on line 30 Diz que a variável não foi definida, como faço e em que linha coloco a definição? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 26, 2009 Boa pergunta amigo.. ^^ Eu que te pergunto de volta.. quem era pra ser essa variável ? Pode definir ela em qualquer lugar do bloco php, antes de usá-la. Apenas atribuir valor, já define e cria variáveis para o php. Compartilhar este post Link para o post Compartilhar em outros sites
Folkmir 0 Denunciar post Postado Março 26, 2009 A função dela é selecionar somente um usuário do BD, tenho uma lista com 10 nomes por exemplo, clico no 3º ela abrirá uma nova tela onde poderei editar os direitos deste usuário somente. Exclui da linha o valor = $idu deixando assim: $sql.="where u.id "; Funcionou. Porém qualquer alteração feita independente do usuário muda para todos do BD. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 26, 2009 Isso está errado mesmo. Vamos lá, você "clica num link".. ? hum.. detalhe importante hein!? E como é esse link? tá passando um ?uid=10 onde 10 é o id do usário? isso é uma query string. Captura, e joga lá na tua query !! $$sql.= 'WHERE u.id ='.$_GET['idu']; Veja, você, fez/pegou esse script, e não eu.Não sei oque se passa, e nem como você espera que ele funcione. você precisa explicar, e dizer oque queria fazer.. e não esperar que eu adivinhe. Compartilhar este post Link para o post Compartilhar em outros sites
Folkmir 0 Denunciar post Postado Março 26, 2009 Desculpe William, não queria criar embaraços, sou leigo em PHP e estou aprendendo aos poucos, resolvi muitos erros deste Script, mas enrosquei neste. O Script completo é um site onde os jogadores do KingsAge de uma determinada aliança irão postar suas tropas e seus edifícios. Já testei o site inteiro e está tudo funcionando, cadastro os usuários, tropas e edifícios normalmente, mas quando vou fazer qualquer tipo de alteração dá este tipo de erro, sempre nesta mesma variável. O clique é dado em cima de um link que direciona para a página de edição. E este erro é apresentado justamente na hora em que deveria abrir a página. Ao colocar o mouse sobre o link aparece /nomedosite/rights.php?id=32 Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 26, 2009 beleza.. então oque você vai precisar fazer é o seguinte: <? include "config.php"; $uid = $_GET['id']; /* já que você vai utilizar esse id várias vezes, coloca logo no topo de tudo */ if (empty($_SESSION['id'])) { include "index.php"; die(); } check_login(); ?>Isso vai resolver.Lembre-se, sempre que estiver passando algo para a URL, capture isso, com o ARRAY $_GET. Compartilhar este post Link para o post Compartilhar em outros sites
Folkmir 0 Denunciar post Postado Março 26, 2009 Putz irmão, realmente funcionou está entrando no BD selecionando o usuário que pedi certinho. Mas na hora de substituir o valor dos direitos ele dá erro no post. Notice: Undefined variable: idu in /home/a2242136/public_html/post_rights.php on line 6 <? include "config.php"; $sql ="update ".PREFIX."user set "; $sql.="level=".$_POST['change_rights']." "; $sql.="where u.id=".$idu; mysql_query($sql); forward_link('member.php'); ?> Se acertar este aqui resolvo todo o resto do site. Muito obrigado de coração pela ajuda irmão. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 26, 2009 Cria um input hidden, para armazenar o valor do ID, e depois capturar isso via POST na outra página. <input type="hidden" name="idu" value="<?php echo $uid; ?>" />Esse hidden, fica na mesma página que tem o /nomedosite/rights.php?id=32 !!E ai nessa tua outra, você muda a query, pra ficar assim: ... $sql .= " WHERE u.id = ".$_POST['idu']; mysql_query( $sql )or die( mysql_error() ); forward_link('member.php'); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Folkmir 0 Denunciar post Postado Março 26, 2009 Certo, esse hidden é pra criar em que altura do arquivo rights.php? porque ele já existe neste arquivo. <html> <head> <title>KaTroops - <?= text('rights_header') ?></title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <? include "menu.php"; ?> <p></p> <div align="center"> <table class="tabella" cellpadding="2" cellspacing="1"> <tr> <th bordercolor="#F8E8AA" bordercolordark="#F8E8AA" bordercolorlight="#FF9933" bgcolor="#FFD57D" colspan="3"><?= text('edit_rights') ?></th> </tr> <? $sql ="select u.name, u.level "; $sql.="from ".PREFIX."user u "; $sql.="where u.id =" .$idu; $result = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($result); echo " <tr>\n"; echo " <td width=170>".text('name')."</td>"; echo " <td>".$row['name']."</td>"; echo " <td title=\"".text('level'.$row['level'])."\">".$row['level']."</td>"; echo " </tr>\n"; ?> </table> <p></p> <form method="post" action="post_rights.php"> <input type="hidden" name="idu" value="<? $idu; ?>"> E com a segunda linha que você solicitou faz com que ele dê a impressão que funcionou, porém, ao retornar ao site vê-se que não registrou o valor, continua com o mesmo direito. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 26, 2009 Okay.. se não tá atualizando, é pq a query falhou.. vamos ver o motivo: <?php include "config.php"; $sql = "UPDATE `user` SET "; $sql .= " `level` = {$_POST['change_rights']} "; $sql .= " WHERE `id` = ".$_POST['idu']; mysql_query( $sql )or die( mysql_error() ); echo '<br />'; echo $sql; // forward_link('member.php'); /* comente essa linha, para permanecer na página, e ver o pq falhou */ ?>Posta o resultado disso.. se o php retornar um erro, diga qual.. e tb diga oque voltou do echo $sql. Qual é o tipo de dados da coluna `level` ? Int? Varchar ? se for string, coloque aspas simples. Compartilhar este post Link para o post Compartilhar em outros sites
Folkmir 0 Denunciar post Postado Março 26, 2009 Certo, vamos lá. Os dados utilizados nesta coluna level são numéricos sem a necessidade de operações matemáticas, tendo somente 3 tipos de valores. 1 - Sem direitos 10 - Usuario basico 99 - Administrador Utiliza type int(3) Não é retornado nenhum tipo de erro. Quando selecionado o level, clico no botão salvar, o site solicite que aguarde, posterior volta a tela de onde lista os usuários mostrando os privilégios e tudo continua do mesmo jeito, sem nenhuma alteração. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 26, 2009 Posta o resultado disso.. se o php retornar um erro, diga qual.. e tb diga oque voltou do echo $sql.Você testou com o código que postei ?me diz o valor que voltou do echo $sql.. e se retornou algum erro, apartir do trecho que postei acima. Compartilhar este post Link para o post Compartilhar em outros sites
Folkmir 0 Denunciar post Postado Março 26, 2009 Não acusou nada em lugar nenhum, simplesmente após selecionar o level, ele volta a página de usuários e não muda o level para o que eu havia selecionado, ou seja nada acontece. Usei as linhas que você colocou aqui. Em outros arquivos de post que eu tenho que fazem parte deste mesmo site e que davam o mesmo erro, resolvi colocando esta linha no início do Script. <? include "config.php"; $idu = $_POST['idu']; $sql ="update ".PREFIX."troops set "; $sql.="user_id=".$_SESSION['id'].", "; $sql.="village='".$_POST['village']."', "; $sql.="continent='".$_POST['continent']."', "; $sql.="x=".$_POST['x'].", "; $sql.="y=".$_POST['y']; for ($i=1; $i<=10; $i++) { $value=$_POST['t'.$i]; $sql.=", t".$i."=".$value; } $sql.=" where id=".$idu; mysql_query($sql); $sql ="update ".PREFIX."user set change_date = '".date("d/m/Y")."' "; $sql.=" where id=".$_SESSION['id']; mysql_query($sql); forward_link('user.php'); ?> Só que neste arquivo post_rights.php não funcionou. Se quiser dar uma olhada realmente no que está acontecendo, cadastre-se no site que te dou privilégios de Administrador aí você verá o que ocorre. demolidores.co.cc Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 26, 2009 Me mostra oque está na variável $sql !! dá um echo nela, na página em que tem o UPDATE.. me diz oque tem !! Já tô pedindo isso tem 2 posts.. fica difícil ajudar assim. Compartilhar este post Link para o post Compartilhar em outros sites
Folkmir 0 Denunciar post Postado Março 26, 2009 Desculpe William, mas como te disse sou leigo. O que é dar um echo nela? o arquivo agora está assim: <? include "config.php"; $sql ="update ".PREFIX."user set "; $sql.="level=".$_POST['change_rights']." "; $sql.="where 'id'=".$_POST['idu']; mysql_query($sql); forward_link('member.php'); ?> Agora o que tenho que fazer para dar o echo que você pediu? Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Março 26, 2009 coloca no final do código isso aqui echo $sql; Executa o arquivo no servidor e envia os resultados pra ca. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 26, 2009 Troca esse código ai, por esse: <?php include "config.php"; $sql = "UPDATE `user` SET "; $sql .= " `level` = {$_POST['change_rights']} "; $sql .= " WHERE `id` = ".$_POST['idu']; mysql_query( $sql )or die( mysql_error() ); echo '<br />'; echo $sql; /* aqui o echo, é apenas um comando de "imprimir" na tela */ // forward_link('member.php'); /* comente essa linha, para permanecer na página, e ver o pq falhou */ ?>Vai dar algumas mensagens.. é elas que eu quero q você me mostre. Compartilhar este post Link para o post Compartilhar em outros sites
Folkmir 0 Denunciar post Postado Março 26, 2009 Voltando a resposta ficou muito mais fácil. Problema resolvido e site rodando normalmente. Bruno muito obrigado pela paciência e pelo o apoio. Seu nome está constante no site, se quiser que eu inclua seu e-mail passe que colocarei com o maior prazer. Fiquem todos em paz, e obrigado pelos excelentes serviços pretados. Arnaldo de Oliveira Compartilhar este post Link para o post Compartilhar em outros sites