Jump to content
Sign in to follow this  
rjsma

Eliminar registos de uma listagem de dados

Recommended Posts

rjsma

Boas,

Tenho um problema ao eliminar os registos listados atraves do while. O que me dá a sensação é que a funcção que faz eliminar está dentro do ciclo do while e é assim que faz eliminar os registos da página actual cada vez que a pagina é carregada. O problema que não tenho a funcão que elimina os dados dentro do while, por isso não estou a compreender do problem.

Deixo aqui o meu codigo, pode ser que alguem consiga detectar a fonte do problema.


//Lista todos os dados da tabela
while($favoritos=mysql_fetch_array($consulta_ordem)){
$id_url=$favoritos['id'];
echo "
  	<table class='lista'>
		<tr>
			<td colspan=2 class='separador'></td>
		</tr>

		<tr>
			<td ><br><img width='16px' height='16px' src='".$favoritos['favicon']."'/> " .$favoritos['nome'] . "<br><br></td>
		</tr>

		<tr>
			<td class='limite'><label class='topico'>Categoria:  </label>". $favoritos['categoria'] . "<br><br>
								<label class='topico'>Descrição: </label><br>" .$favoritos['descricao'] . "<br></td>

			<td align=center valign=middle><a href=".$favoritos['url'] ." target='blank'/><input id='link' type='submit' name='submit' value=''/></a></td>
		</tr>

		<tr>
			<td><br><br>".$favoritos['data']."<br><br>";

				echo "<form name='eliminar' method='post' action='favoritos.php?pagina=1&ordem=3'>";
				echo "<input id='editar' type='submit' name='editar' value='' />";
				echo "<input id='eliminar' type='submit' name='eliminar' value=''/>";
				echo "</form>

				 <br>
			</td>
		</tr>
	</table>";
				}

	if (isset($_POST['editar'])) {
		echo "<meta http-equiv=\"refresh\" content=\"0;URL=inserir.php?favorito=$id_url\">";
	}

	if (isset($_POST['eliminar'])) {
		$eliminar = mysql_query("DELETE FROM favoritos WHERE id='$id_url'");
	}	

Cumprimentos

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Primeiro não percebi praticamente nada da tua dúvida, depois:

  • Para grandes blocos de texto é aconselhável que saias do modo de interpretação do PHP
  • Escreve HTML correctamente, isto é, utiliza sempre aspas ou plicas, de preferências aspas.
  • Vê a diferença entre utilizar aspas e plicas no PHP e começa a utilizar cada uma delas correctamente.
  • Os dois if's que tens no final da página, devem estar no início
  • Em vez de redireccionares com uma meta, utiliza o windows.location (javascript) ou o header() (PHP)

Por último, reestrutura melhor a tua pergunta, sff

Share this post


Link to post
Share on other sites
rjsma

Lfscoutinho eu quero que o código funcione correctamente, ele devia apagar o registo actual quando carrego no submit e em vez disso apaga todos os registos da página cada vez que a página é carregada.

Não sei onde tenho o html incorrecto visto que tenho  tudo com plicas. O meu professor já tinha dito uma vez que é sempre melhor usar aspas que plicas porque as vezes pode ter interpretações diferentes mas neste caso penso que não faça alguma diferença mudar para aspas.

Se colocar os dois ifs no inicio ele não consegue saber o id do registo que eliminar porque vou buscar o id dentro do while e por isso que tem que ficar sempre depois do ciclo.

Já ia mudar o header mas depois acabei por esquecer-me, o meta foi só para testar uma coisa.

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

colspan=2

<td align=center valign=middle>

Mentira!! O ID vem na url !!

Lógica: mostras -> escolhes o que queres apagar -> apagas -> tornas a mostrar, logo os if's vêm em cima. Para além disso, o header() nem vai funcionar correctamente se os tiveres no fim, pois para utilizares o header, não podes ter imprimido nada. E também vai continuar a mostrar o que apagaste, pois da forma que tens só vai apagar depois de mostrar.

Share this post


Link to post
Share on other sites
rjsma

Boas,

colspan=2

<td align=center valign=middle>

Mentira!! O ID vem na url !!

Lógica: mostras -> escolhes o que queres apagar -> apagas -> tornas a mostrar, logo os if's vêm em cima. Para além disso, o header() nem vai funcionar correctamente se os tiveres no fim, pois para utilizares o header, não podes ter imprimido nada. E também vai continuar a mostrar o que apagaste, pois da forma que tens só vai apagar depois de mostrar.

Tens razão esqueci-me desses.

Mentira?? Meu amigo ele vai eliminar o id do registo que neste caso esta na variavel id_url que esta dentro do while


while($favoritos=mysql_fetch_array($consulta_ordem)){
$id_url=$favoritos['id'];


}


$eliminar = mysql_query("DELETE FROM favoritos WHERE id='$id_url'");


O output do ciclo while é o seguinte

****************Registo 1****************

Nome:*******

categoria:****

descriçao:****

****************************************

Botao editar                                      botao eliminar

*****************************************

****************Registo 2****************

Nome:*******

categoria:****

descriçao:****

****************************************

Botao editar                                      botao eliminar

*****************************************

****************Registo 3****************

Nome:*******

categoria:****

descriçao:****

****************************************

Botao editar                                      botao eliminar

*****************************************

****************Registo 4****************

Nome:*******

categoria:****

descriçao:****

****************************************

Botao editar                                      botao eliminar

*****************************************

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Uma coisa é verdade ou mentira, nunca assim assim. Neste caso é mentira.

Vou-te explicar outra vez, espero que não seja preciso uma desenho.

É mentira porque:

[*]Mostras os dados

[*]Clicas no botão (botão, link ou imagem) para (neste caso) eliminar

[*]Apagas o que mandaste apagar

[*]Mostras os dados (JÁ SEM o registo que mandaste apagar)

Ao dizeres é verdade, estás a dizer o seguinte:

[*]Mostras os dados

[*]Clicas no botão (botão, link ou imagem) para (neste caso) eliminar

[*]Mostras os dados (AINDA com o registo que queres apagar)

[*]Apagas o que mandaste apagar

Espero que tenhas percebido ;)

Share this post


Link to post
Share on other sites
rjsma

Vou-te explicar outra vez, espero que não seja preciso uma desenho.

EM PRIMEIRO LUGAR PEÇO QUE NÃO ARMES EM CHICO ESPERTO.

Em segundo lugar não percebi nada dessa historia da mentira da verdade e do o ID vem na url porque nesta parte nem utilizo o GET nem nada.

Ou és tu que não percebeste realmente o meu problema ou sou não percebi o teu Super raciocinio.

Cumprimento

Share this post


Link to post
Share on other sites
scorch

Pessoal, peço que se acalmem, ok? ;)


PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Armar em chico esperto? Realmente, as pessoas são muito pobres e mal agradecidas.

Quando falei em fazer desenho, referia-me a um print screen com os resultados de modo a entenderes melhor o que estava a tentar dizer, se percebeste outra coisa, isso é problema teu e não estou nem para me preocupar com isso.

Depois, não é nenhum super-raciocínio, aliás é um raciocínio bem básico. Se não o entendeste e supondo que andas na escola/universidade a estudar programação e estando quase no final de um ano lectivo, mesmo que seja o teu primeiro, e não consegues perceber um raciocínio tão básico, então pensa em mudar de área.

Para terminar, espero que tenha sido realmente eu a não perceber a tua dúvida, por isso o meu pedido de desculpa ;)

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá azevedo,

Na minha óptica, eis o que o teu código está a fazer:

1 - No primeiro caso, ainda nao clicaste em botao nenhum, certo? Então vais listar e a tua variável $id_url vai ser alterada ficando com o id de cada linha que mostra....

2 - Quando clicas em "Eliminar", o que acontece é que ele vai, primeiro listar (e faz o processo no 1º passo) e depois verifica se foi clicado o eliminar.... na realidade, vais sempre eliminar o ultimo id da lista.... nunca o que pretendes.... deves usar uma variável diferente para o efeito ;):)

3 - Por fim, não encontro razão para que o script elimine todos os registos após clicar uma vez no eliminar (pelo menos foi o que percebi que era o problema). Efectivamente o if que elimina está fora do while(), mas pode ter-me escapado qualquer coisa:).

Como diz o Pedro Abrunhosa.... É preciso ter calma.... :)

Share this post


Link to post
Share on other sites
rjsma

Scorch estou calmissimo ;)

mAiN_iNfEcTiOn é mais ou menos isso que me está acontecer, eu também não consegui arranjar uma explicação para estar a eliminar todos os registo de uma, só vez. Por isso decidi fazer de outra forma esta parte visto não conseguir resolver esta questão e também tenho prazos a cumprir.

Ao clicar no botão eliminar ele vai fazer um redireccionamento para o eliminar.php?confirmar=id do link e depois nessa página ele vai pedir para confirmar se quero realmente eliminar esse registo.

Esta foi o método que me surgiu para simplificar a eliminação dos registos.

Enquanto a ti Lfscoutinho não vou entrar aqui em discussões em off-topics nem nada do genero porque tenho mais que fazer, mas só quero dizer que não é ser pobre e mal agradecido mas é que ao dizeres isso de fazer um desenho interpretei logo que estavas a fazer-me passar por burro e isso não admito que ninguem faça-me isso, alias penso que ninguem gosta disso.

Se estavas mesmo a referir num print screen penso que poderias muito bem ter dito logo isso e terias evitado um mal entendido. Se foi realmente isso peço desculpa.

Acho que não sabes nada da minha vida para andares a dar opniões, se devo ou não continuar nesta area ou sobre outra coisa qualquer. Como não sei nada da tua vida e mesmo se soubesse não andaria por ai a dizer o que penso sobre ti.

Penso que está tudo esclarecido.

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
Sign in to follow this  

×
×
  • 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.