Jump to content
speedy

[PROBLEMA] MySQL e PHP

Recommended Posts

speedy

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

Share this post


Link to post
Share on other sites
djthyrax

Mete:

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

E vê qual é o erro.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
speedy

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

Share this post


Link to post
Share on other sites
cyclop

onde tens a connecção?

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


"Quando eu for grande quero ser como o Celso"

Share this post


Link to post
Share on other sites
speedy

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"?

Share this post


Link to post
Share on other sites
estrucida

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


Há duas coisas infinitas: o Universo e a estupidez humana... embora não haja certezas quanto ao primeiro.

Share this post


Link to post
Share on other sites
speedy

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

Share this post


Link to post
Share on other sites
estrucida

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.


Há duas coisas infinitas: o Universo e a estupidez humana... embora não haja certezas quanto ao primeiro.

Share this post


Link to post
Share on other sites
speedy

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)

Share this post


Link to post
Share on other sites
cyclop

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 :)


"Quando eu for grande quero ser como o Celso"

Share this post


Link to post
Share on other sites
estrucida

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?


Há duas coisas infinitas: o Universo e a estupidez humana... embora não haja certezas quanto ao primeiro.

Share this post


Link to post
Share on other sites
speedy

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.

Share this post


Link to post
Share on other sites
estrucida

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

Bom trabalho!


Há duas coisas infinitas: o Universo e a estupidez humana... embora não haja certezas quanto ao primeiro.

Share this post


Link to post
Share on other sites
speedy

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

Share this post


Link to post
Share on other sites
speedy

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.

Share this post


Link to post
Share on other sites
edsousa

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


Tharis Fan ClubMay Tharis bless you

Share this post


Link to post
Share on other sites
speedy

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!

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.