• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

speedy

[PROBLEMA] MySQL e PHP

17 mensagens neste tópico

boas

este é o meu primeiro topico aqui no forum, pelo que espero que haja muitos mais.

Ora, venho-vos pedir ajuda por tar num impasse com o meu projecto para a PAT, marcada para de quinta a 2 semanas, cujo projecto tenhod e entregar ate dia 23 (8 dias uteis antes).

passando à frente, to com um problema na ligação do PHP ao mysql. É este o codigo:

<?
if(isset($_POST['del']))
{
$pwd= $_POST['passwd'];

$link= mysqli_connect("localhost","root","npt");
mysqli_select_db($link, "npt");
$sql= "SELECT passwd FROM utilizador WHERE nfunc = 0";
$q= mysqli_query($link, $sql);
$row= mysqli_fetch_assoc($q);
if($row['passwd'] == $pwd )
{
	$nr= $_GET['nf'];

	$sql1="SELECT * FROM ractivas WHERE id = $nr ";
	$q1=mysqli_query($link,$sql1);// or die(mysql_error());
	$r= mysqli_fetch_assoc($q1);

	$sql2= "SELECT * FROM ".$r['tab_org']." WHERE rins= '".$r['ractivas']."'";
	$q2=mysqli_query($link,$sql2);
	$r2= mysqli_fetch_assoc($q2);

	exec($r2['rdel']);

	$sql3= "DELETE FROM ".$r['tab_org']." WHERE rins = '".$r['ractivas']."'";
	if(!mysqli_query($link,$sql3))
		$i="Erro ao eliminar a regra";
	else{
		//$i="Regra eliminada com sucesso";
		$sql4="DELETE FROM ractivas WHERE id = $nf";
			if(!mysqli_query($link,$sql4))
				$i="Erro ao eliminar a regra";
			else
				$i="Regra eliminada com sucesso";
	}
}else
	$e= "Palavra-pase Inválida!";

mysqli_close($link);
}
?>

Este codigo vai originar os seguintes erros:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /var/www/admin/delrule.php on line 34

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /var/www/admin/delrule.php on line 38

Warning: exec() [function.exec]: Cannot execute a blank command in /var/www/admin/delrule.php on line 39

ora, o objectivo é guardar a maior parte da informação em  2 tabelas distintas. isto oriunda da ideia inicial, so que pela necessidade  de ter tudo numa tabela, começou-se a adaptação, pelo que nao tive tempo de a acabar. e neste momento interessa-me mais que isto funcione (mesmo que mal) do que nao funcionar.

Ora, este código é suposto ir à tabela principal ( a tal que era para ser unica) e  ler o nome da outra tabela, executar um comando que la ta escrito (atraves do exec), apagar a linha na tabela secundária e a da principal. o meu problema é que nao ta a dar.

antes de mais obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mete:

$q1=mysqli_query($link,$sql1) or die(mysql_error());

E vê qual é o erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mete:

$q1=mysqli_query($link,$sql1) or die(mysql_error());

E vê qual é o erro.

nao da... a unica coisa que´dá é uma pagina em branco

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

onde tens a connecção?

PS: um join aí tambem não ficava mal...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

onde tens a connecção?

PS: um join aí tambem não ficava mal...

pera que meto aqui o php todo.

if(isset($_POST['del']))
{
$pwd= $_POST['passwd'];

$link= mysqli_connect("localhost","root","npt");
mysqli_select_db($link, "npt");
$sql= "SELECT passwd FROM utilizador WHERE nfunc = 0";
$q= mysqli_query($link, $sql);
$row= mysqli_fetch_assoc($q);
if($row['passwd'] == $pwd )
{
	$nfunc= $_GET['nf'];

	$sql1="SELECT * FROM ractivas WHERE id = $nf ";
	$q1=mysqli_query($link,$sql1) or die(mysql_error());
	$r= mysqli_fetch_assoc($q1);

	$sql2= "SELECT * FROM ".$r['tab_org']." WHERE rins= '".$r['ractivas']."'";
	$q2=mysqli_query($link,$sql2);
	$r2= mysqli_fetch_assoc($q2);
	exec($r['rdel']);

	$sql3= "DELETE FROM ".$r['tab_org']." WHERE rins = '".$r['ractivas']."'";
	if(!mysqli_query($link,$sql3))
		$i="Erro ao eliminar a regra";
	else
		$i="Regra eliminada com sucesso";

	$sql4="DELETE FROM ractivas WHERE id = $nf";
	if(!mysqli_query($link,$sql4))
		$i="Erro ao eliminar a regra";
	else
		$i="Regra eliminada com sucesso";
}else
	$e= "Palavra-pase Inválida!";

mysqli_close($link);
}


?>

PS: um "join"?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O teu id 'e um número ou uma string?

Se for string tem de estar

$sql1="SELECT * FROM ractivas WHERE id = '".$nf."' ";

Agora, se a página te aparece em branco experimenta fazer um

print $sql1;

e correr o resultado no mysql query browser / phpmyadmin

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o id é INT e ta ta sempre a incrmentar sozinho. as variaveis, nao consigo fazer nenhum echo, pk o php nao cosnegue ir à DB

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o php nao cosnegue ir à DB

Ou seja, o teu primeiro problema é que não consegues fazer um mysql_connect, sim? não?

Desculpa estar a perguntar-te isto, mas é para ver se te consigo dar uma ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao desculpo :)

passando a coisas serias, agradeço toda a ajuda que vier, e respondo a todas as perguntas que souber responder. nao têm de me pedir desculpa a mim, quanto muito peço eu a voces pelo incomodo que to a dar e, ao mesmo tempo, agradeço bastante.

o meu problema nao é ligar é o mysqli_connect. como se pode ver no inicio de codigo, ele liga-se à base de dados para verificar a passwd do admin (é o que to a pedir). se ele nao desse, ele mostrava uma mensagem a dizer password errada ( o else la em baixo). o que ele nao ta a conseguir fazer bem é o que ta dentro do IF.

passando para imagens (uma imagem vale 1000 palavras):

o erro que to a ter é isto:

error1p.th.jpg

e este é a prova que ele ta a ir à BD.

error2s.th.jpg

ele ta a ir comparar a password. se a meter bem, ele vai tentar fazer o que ta dentro do IF. senao, mostra a mensagem de password invalida (2ª imagem). Portanto, ele ta a começar bem, verifica tudo, mas quando chega dentro do IF... não sei porque, ele nao ta a fazer os querys q1 e q2.

as linhas que dá erro são as do q1, as do q2, e do exec depois do q2. (o codigo está 2 posts acima e vo por aora no 1º post para melhor organização)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o problema, pelo que está a dizer, é que o comando que que  o comando que queres executar(O QUE vem da db) vem em branco, e as outras querys nao tem valor para serem corridas... pelo que pude reparar estas a fazer uma verificação where .... = $nf... não querias dizer $nfunc?

penso que assim resolve :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como se pode ver no inicio de codigo, ele liga-se à base de dados para verificar a passwd do admin (é o que to a pedir). se ele nao desse, ele mostrava uma mensagem a dizer password errada

Ok, também era isso que eu pensava (que estavas a fazer a ligação à bd).

agora, se fizeres:

if($row['passwd'] == $pwd )

  {

      $nfunc= $_GET['nf'];

     

      $sql1="SELECT * FROM ractivas WHERE id = $nf ";

      print $sql1;

      die();

...

o que te aparece na página?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem, o amigo ciclop ja me resolveu parte dos problemas. isto foi uma pagina copiada da que é para eliminar o utilizador. agora apenas da erro na linha do exec.

estrucida, exprimentei o que me disse, e ele imprimiu o seguinte

SELECT * FROM ractivas WHERE id = 104

isto em relação ao $sql1. exprimentei o mesmo para o $sql2 e imprimio o seguinte:

SELECT * FROM site WHERE rins= '/sbin/iptables -I OUTPUT 1 -p tcp -d www.google.pt -j DROP'

exprimentei ainda para a variavel que é suposto ter o codigo a executar (também tinha o array mal, era o $r2 e nao o $r), mas este nao devolveu valor nenhum.

PS: actualizei o codigo no 1º post. as diferenças nao sao muitas, mas são o suficiente para poupar 2 erros.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, a esta hora já deves ter o problema resolvido!

Bom trabalho!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, a esta hora já deves ter o problema resolvido!

Bom trabalho!

acabei agora. ja ta o problema resolvido. Muito obrigado a todos os que me ajudaram, salvaram-me a vida!

e ate gostei do ambiente por cá, acho que vo ficar por aqui ;)

mais uma vez, obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma duvida, não há maneira de fazer um for que precorre determinados valores salteados? em Shell Script, linux, ha o for $i in 1 2 3 4, ou coisa assim parecida, nao ha nada do genero em PHP?

PS: sei que é double post, mas senao ninguem me via.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

assim de repente lembro-me da sintaxe do foreach

$ar = array(1,2,3,4,5);
foreach($ar as $elem){

  echo $elem."\n";

}

Output:

1
2
3
4
5

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

assim de repente lembro-me da sintaxe do foreach

$ar = array(1,2,3,4,5);
foreach($ar as $elem){

  echo $elem."\n";

}

Output:

1
2
3
4
5

pois, foi o que também me lembrei depois de colocar a duvida, ficou a funcionar, esqueci-me foi de por aqui :P mas obrigado na mesma.

e bem, ja o projecto ta a funcionar, graças a uma grande ajuda vossa naquela pagina. sem aquilo, era impossivel isto funcionar em pleno. MUITO OBRIGADO A TODOS!

0

Partilhar esta mensagem


Link 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