Deleting data from mysql

REDDIO

Power Member
Estou a tentar apagar utilizadores, no entanto quando carrego em delete aparece a mensagem a dizer que foi apagado com sucesso, mas na verdade não apagou na base de dados.
Gostaria que dessem uma vista de olhos no codigo, porque não estou a encontrar o erro.

Apagar_utilizador.php:

<?php

$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="agencia_de_viagens"; // Database name
$tbl_name="utilizadores"; // Table name


// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


// select record from mysql
$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);


?>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><table width="400%" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Apagar Utilizadores</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF"><strong>Id utilizador</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Nome</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Email</strong></td>
<td align="center" bgcolor="#FFFFFF">&nbsp;</td>
</tr>


<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td bgcolor="#FFFFFF"><? echo $rows['ID_UTILIZADOR']; ?></td>
<td bgcolor="#FFFFFF"><? echo $rows['NOME']; ?></td>
<td bgcolor="#FFFFFF"><? echo $rows['EMAIL']; ?></td>


<td bgcolor="#FFFFFF"><a href="apaga.php?Id=<? echo $rows['ID_UTILIZADOR']; ?>">delete</a></td>

</tr>
<?


// close while loop
}


// close connection;
mysql_close();


?>
</table></td>
</tr>
</table>


apaga.php:

<?php

$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="agencia_de_viagens"; // Database name
$tbl_name="utilizadores"; // Table name


// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


// get value of id that sent from address bar
$id=$_GET['ID_UTILIZADOR'];


// Delete data in mysql from row that has this id
$sql="DELETE FROM $tbl_name WHERE ID_UTILIZADOR='$ID_UTILIZADOR'";
$result=mysql_query($sql);


// if successfully deleted
if($result){
echo "Deleted Successfully";
echo "<BR>";
echo "<a href='Apagar_utilizador.php'>Back to main page</a>";
}


else {
echo "ERROR";
}


// close connection
mysql_close();
?>
 
// get value of id that sent from address bar
$id=$_GET['ID_UTILIZADOR'];

// Delete data in mysql from row that has this id
$sql="DELETE FROM $tbl_name WHERE ID_UTILIZADOR='$ID_UTILIZADOR'";

O que é que acontece no caso de o user enviar
Código:
ID_UTILIZADOR = "0' OR id_utilizador <> '0"
?
Resultado:
Código:
DELETE FROM tbl_name WHERE id_utilizador = '0' OR id_utilizador <> '0'
 
O que é que acontece no caso de o user enviar
Código:
ID_UTILIZADOR = "0' OR id_utilizador <> '0"
?

Uma query sem grandes resultados no caso (mais que provável) de o criador da thread não ter desactivado a directiva magic_quotes_gpc que vem activa por defeito nas últimas releases do PHP.

Resultado:
Código:
DELETE FROM tbl_name WHERE id_utilizador = '0' OR id_utilizador <> '0'

Código:
DELETE FROM tbl_name WHERE id_utilizador = '\"0\' OR id_utilizador <> \'0\"'

De qualquer forma, é sempre bom alertar para esse tipo de problemas, devido ao facto do magic_quotes_gpc não resolver tudo :007:.
 
Última edição:
devido ao facto do magic_quotes_gpc não resolver tudo
Não só não resolve como cria uma carrada de problemas maiores que aqueles que tenta resolver (é que nem todos os programadores de PHP são noobs ;-) ) Tanto quanto sei, vai ser removido no PHP6.

a directiva magic_quotes_gpc que vem activa por defeito nas últimas releases do PHP.
hum... aqui não:
Código:
Slackware 12.0

[me@mybox ] grep magic_quotes_gpc /etc/httpd/php.ini
; - magic_quotes_gpc = Off         [Performance]
magic_quotes_gpc = Off

[me@mybox ] grep magic_quotes_gpc /etc/httpd/php.ini-recommended
; - magic_quotes_gpc = Off         [Performance]
magic_quotes_gpc = Off

[me@mybox ] grep magic_quotes_gpc /etc/httpd/php.ini-dist
magic_quotes_gpc = On
 
RE:

Boas,

Altera o seguinte
Código:
[FONT=Arial][SIZE=2]// Delete data in mysql from row that has this id 
$sql="DELETE FROM $tbl_name WHERE ID_UTILIZADOR='$ID_UTILIZADOR'";
$result=mysql_query($sql);
[/SIZE][/FONT]

para
Código:
[FONT=Arial][SIZE=2]// Delete data in mysql from row that has this id 
$sql="DELETE FROM $tbl_name WHERE ID_UTILIZADOR='$ID_UTILIZADOR'";
$result=mysql_query($sql) or die(mysql_error());
[/SIZE][/FONT]


Informa do erro....


Saudações
 
Boas,

Altera o seguinte
Código:
[FONT=Arial][SIZE=2]// Delete data in mysql from row that has this id [/SIZE][/FONT]
[SIZE=2][FONT=Arial]$sql="DELETE FROM $tbl_name WHERE ID_UTILIZADOR='$ID_UTILIZADOR'";[/FONT][/SIZE]
[SIZE=2][FONT=Arial]$result=mysql_query($sql);[/FONT][/SIZE]
para
Código:
[FONT=Arial][SIZE=2]// Delete data in mysql from row that has this id [/SIZE][/FONT]
[SIZE=2][FONT=Arial]$sql="DELETE FROM $tbl_name WHERE ID_UTILIZADOR='$ID_UTILIZADOR'";[/FONT][/SIZE]
[SIZE=2][FONT=Arial]$result=mysql_query($sql) or die(mysql_error());[/FONT][/SIZE]

Informa do erro....


Saudações


Fiz desta forma e continua a dizer que foi eliminado, mas quando volto a listar continua a constar na lista...
 
Código:
[FONT=Arial][SIZE=2]<?php[/SIZE][/FONT]
 
[FONT=Arial][SIZE=2]$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="agencia_de_viagens"; // Database name 
$tbl_name="utilizadores"; // Table name [/SIZE][/FONT]
 
[FONT=Arial][SIZE=2]// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");[/SIZE][/FONT]
 
[FONT=Arial][SIZE=2]// get value of id that sent from address bar 
$id=$_REQUEST['Id'];[/SIZE][/FONT]

[FONT=Arial][SIZE=2]// Delete data in mysql from row that has this id 
$sql="DELETE FROM $tbl_name WHERE ID_UTILIZADOR='$id'";
$result=mysql_query($sql);[/SIZE][/FONT]
 
[FONT=Arial][SIZE=2]// if successfully deleted
if($result && $id){
echo "Deleted Successfully";
echo "<BR>";
echo "<a href='Apagar_utilizador.php'>Back to main page</a>";
}[/SIZE][/FONT]
 
[FONT=Arial][SIZE=2]else {
echo "ERROR";
}[/SIZE][/FONT]
 
[FONT=Arial][SIZE=2]// close connection 
mysql_close();
?>[/SIZE][/FONT]

EDIT: Este código deve funcionar.
 
Última edição:
Posso estar a ver mal :p mas acho nunca passas a variável "ID_UTILIZADOR"
por ex.:

PHP:
<a href="apaga.php?Id=<? echo $rows['ID_UTILIZADOR']; ?>">delete</a>

Mas depois vais buscar como
PHP:
$id=$_GET['ID_UTILIZADOR'];

Não deveria antes ser ...
PHP:
// get value of id that sent from address bar
$id=$_GET["Id"];

// Delete data in mysql from row that has this id
$sql="DELETE FROM $tbl_name WHERE ID_UTILIZADOR='$id' ";
 
Código:
[FONT=Arial][SIZE=2]<?php[/SIZE][/FONT]
 
[FONT=Arial][SIZE=2]$host="localhost"; // Host name [/SIZE][/FONT]
[SIZE=2][FONT=Arial]$username="root"; // Mysql username [/FONT][/SIZE]
[SIZE=2][FONT=Arial]$password=""; // Mysql password [/FONT][/SIZE]
[SIZE=2][FONT=Arial]$db_name="agencia_de_viagens"; // Database name [/FONT][/SIZE]
[SIZE=2][FONT=Arial]$tbl_name="utilizadores"; // Table name [/FONT][/SIZE]
 
[FONT=Arial][SIZE=2]// Connect to server and select databse.[/SIZE][/FONT]
[SIZE=2][FONT=Arial]mysql_connect("$host", "$username", "$password")or die("cannot connect"); [/FONT][/SIZE]
[SIZE=2][FONT=Arial]mysql_select_db("$db_name")or die("cannot select DB");[/FONT][/SIZE]
 
[FONT=Arial][SIZE=2]// get value of id that sent from address bar [/SIZE][/FONT]
[SIZE=2][FONT=Arial]$id=$_REQUEST['Id'];[/FONT][/SIZE]
 
[FONT=Arial][SIZE=2]// Delete data in mysql from row that has this id [/SIZE][/FONT]
[SIZE=2][FONT=Arial]$sql="DELETE FROM $tbl_name WHERE ID_UTILIZADOR='$id'";[/FONT][/SIZE]
[SIZE=2][FONT=Arial]$result=mysql_query($sql);[/FONT][/SIZE]
 
[FONT=Arial][SIZE=2]// if successfully deleted[/SIZE][/FONT]
[SIZE=2][FONT=Arial]if($result && $id){[/FONT][/SIZE]
[SIZE=2][FONT=Arial]echo "Deleted Successfully";[/FONT][/SIZE]
[SIZE=2][FONT=Arial]echo "<BR>";[/FONT][/SIZE]
[SIZE=2][FONT=Arial]echo "<a href='Apagar_utilizador.php'>Back to main page</a>";[/FONT][/SIZE]
[SIZE=2][FONT=Arial]}[/FONT][/SIZE]
 
[FONT=Arial][SIZE=2]else {[/SIZE][/FONT]
[SIZE=2][FONT=Arial]echo "ERROR";[/FONT][/SIZE]
[SIZE=2][FONT=Arial]}[/FONT][/SIZE]
 
[FONT=Arial][SIZE=2]// close connection [/SIZE][/FONT]
[SIZE=2][FONT=Arial]mysql_close();[/FONT][/SIZE]
[SIZE=2][FONT=Arial]?>[/FONT][/SIZE]

EDIT: Este código deve funcionar.

Hey obrigado, com este codigo ja funciona!!
 
Back
Topo