eliminare record da db attraverso link

  • Creatore Discussione Creatore Discussione asevenx
  • Data di inizio Data di inizio

asevenx

Utente Attivo
7 Nov 2009
312
0
16
salve, vorrei permettere l'eliminazione dal mio guestbook di determinati record tramite un apposito link (ovvero accanto al messaggio vorrei inserire un bottone per eliminare il messaggio). So che per fare questo devo usare una quary con DELATE ma non so come impostarla, qualcuno può aiutarmi?
 
ciao
l'eliminazione di un record è semplice
PHP:
<?php
//....
$rq=mysql_query("DELETE FROM tabella WHERE id='$id_da_eliminare'");
//...
?>
però trattandosi di eliminazione devi fare vari controlli anche per vedere su l'utente è autorizzato
poi se passi il valore da un link è ancora più pericoloso in quanto usi il GET che è visibile
quindi stai attento a quello che fai
 
ti ringrazio per la risposta, mi sono letto un po di cose su internet sul metodo get, ma non capisco una cosa.
Allora ho inserito la mia img con il seguente codice
HTML:
<a href='img/elimina?id=$id.php'>
dopo di che ho creato un file elimina.php che dovrebbe riportare la variabile GET così $id_elimina = $_GET['id'];

ma quando vado a cliccare mi dice che il file (es: elimina?id=318.php). Che devo fare?
 
ciao
secondo me hai invertito php (non avevo visto alex mi ha preceduto)

PHP:
<a href='img/elimina.php?id=$id'>
due cose
1. ho visto che l'ai racchiuso tra i tag html, guarda che quel link deve essere in una pag. php
2. ti ribadisco stai attento perche passando sul link si vede (es.)
cosa succede se mi faccio un piccolo script che cicla un numero e richiama la tua pagina?
 
cosa succede se mi faccio un piccolo script che cicla un numero e richiama la tua pagina?

E come dovrebbe fare? E' quello il modo, a parte che dovresti inserire dei controlli sulla variabile di sessione per vedere se quel determinato utente ha i diritti di eliminare quel messaggio.
 
ciao
oltre alla verifica dei permessi, si può verificare la pag di provenienza dove è posto il link (mettiamo che si chiami lincaggi.php)

PHP:
$proviene=basename($_SERVER['HTTP_REFERER']);
if($proviene=="lincaggi.php"){
	//fai tutto quello che devi fare
}else{
	
	header("location:pagina_che_vuoi.php");
}
questo evita che uno possa accedere con l'url che ho detto prima
 
ciao
@alex
sistema sicuro al 100x100 non esiste, lo so (guarda che colossi riescono a akerare), ma tutto quello che può servire non fa mai male.
se uno stupidotto (che non conosce i sistemi sofisticati o meno) scrive sul bw l'url con un id cancella il record, valutando la provenienza qualcosa si evita.

p.s.
se qualcuno akera il mio sito so a chi rivolgermi :mavieni:
 
secondo voi può bastare un sistema di riconoscimento tramite password (magari inserita in un db) per rendere sicura l'eliminazione?

PS: cmq il link funziona, quindi l'errore era proprio quello, ma l'eliminazione non funziona, date un occhiata

PHP:
<form name='pass' method='post' action='#'>
	<table cellspacing='0' cellpadding='0'>
		<tr>
			<td class='box1'>Password: </td>										
			<td class='box' colspan="2"><input name='pass' type="password"></textarea></td>
		</tr>                       
		<tr>									
			<td colspan = "3" class='bottoni'>
				<input type='submit' name='invia' value='Conferma'>
				<input type='reset' name='annulla' value='Cancella'>
			</td>
		</tr>
	</table>	
</form>
<?php

$pass = $_POST['pass'];		
$id_elimina = $_GET['id'];

if ($pass == '') {
	echo "Per cancellare il seguente messaggio devi inserire la password di versifica";

	} else {
		if ($pass == 'password') {

//dati database
$host = "...";
$username = "...";
$password = "";
$database = "...";
$tabella = "forum";

//connessione e invio al DB
$connessione = mysql_connect($host, $username, $password) or die("Connessione DB fallita");
mysql_select_db($database, $connessione) or die("Selezione DB fallita");

//visualizza tutti i record nel DB
$elimina = mysql_query("DELETE FROM tabella WHERE id='$id_elimina' LIMIT 1");
		echo "Messaggio cancellato correttamente!";	
		
		} else {
		
		echo "Password errata!";	
		}
	}
?>
 
Ultima modifica:
Io ti consiglierei di sostituire questa riga:
PHP:
$elimina = mysql_query("DELETE FROM tabella WHERE id='$id_elimina' LIMIT 1");
con questa:
PHP:
$elimina = mysql_query("DELETE FROM tabella WHERE id=".$id_elimina." LIMIT 1");
E, come dice Borgo, potresti togliere anche il LIMIT visto che l'ID deve essere chiava primaria quindi univoca nella tabella.

P.S.
Se ancora non funge prova ad inserire il codice SQL in una variabile e, invece di eseguirla, prova a stamparla e il risultato mettilo direttamente nel database che segnala più chiaramente gli errori nel caso in cui ce ne fossero ancora.
 
ciao
come ha detto giustamente longo, verifica separando la query
PHP:
<?php
//.....
$qstringa="DELETE FROM tabella WHERE id='$id_elimina'";
var_dump($qstringa);
$elimina = mysql_query($qstringa);
var_dump($elimina);
//......
?>
il primo var_dump (ipotesi hai cliccato sul link con id == 2, se è tutto giusto ti riporta
string (32) "DELETE FROM tabella WHERE id='2'"
se invece
string (31) "DELETE FROM tabella WHERE id=''"
con molta probabilità non trasmetti/ricevi il $_GET
se tutto giusto, ma il secondo var_dump ti restituisce
bool (FALSE)
verifica i dati di connessione e la corrispondenza del nome della tabella
 
Secondo me il problema potrebbe essere nel nome della tabella

PHP:
$elimina = mysql_query("DELETE FROM tabella WHERE id='$id_elimina' LIMIT 1");


visto che dichiari una variabile $tabella = 'forum'

dovrai metter FROM $tabella o a limite FROM forum
 
Prova con l'asterisco:
PHP:
$elimina = mysql_query("DELETE * FROM tabella WHERE id='$id_elimina' LIMIT 1");
 
ciao
la sintassi del delete è
Codice:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM nome_tabella
[WHERE condizioni]
[ORDER BY ...]
[LIMIT numero_righe]
l'asterisco non c'entra.
se non elimina c'è un errore o nel nome della tabella o nel where, il limit, credo in questo caso, non serve in quanto l'id dovrebbe essere univoco
 

Discussioni simili