Cancellazione-Annulla Registrazione Dati appena Inseriti nel Form dall' Utente

  • Creatore Discussione Creatore Discussione ciopin
  • Data di inizio Data di inizio

ciopin

Utente Attivo
26 Mar 2010
59
0
0
Salve Ragazzi,

rieccomi nuovamente a disturbarvi. Vi spiego qul'è la mia esigenza. Allora io ho realizzato un form dove l'utente inserisce nome, cognome, mail, telefono e preme INVIO. I dati vengono registrati nel mio DB MySql grazie ad un file registraform.php che salva tutto nel mio DB e allo stesso tempo manda una mail riepilogativa con i dati appena inseriti all'utente ( Caro Utente questi sono i dati che hai appena inserito Nome Cognome Email Telefono) Fin quì tutto ok, adesso vorrei aggiungere nella mia mail la possibilità all'utente di Cancellarsi ( Per esempio: Se non vuoi confermarela tua registrazione clicca qui Non Confermo ). Devo perciò realizzare un file in php che vada a recuperare il numero progressivo con cui l'utente s'è registrato, la sua mail , telefono e nome cognome e lo cancello dal mio DB. Mi sapete indicare un file d'esempio dal quale predere spunto o qualche tutorial ...ve ne sarei grato. Grazie Mille a chi vorrà aiutarmi!!
 
ciao
nell'emeil di conferma devi mettere un link
se non vuoi confermare<a href="non_conferma.php?aa=xyz">clicca qui</a>
nella pagina non_conferma.php con $_get raccogli il valore xyx e fai la query delete wehre pinco='xyz'
attenzione però a mettere vari controlli e codifihe del valore es xyz potrebbe essere l'indirizzo email criptato
 
Ciao,

grazie come sempre per la tua pronta risposta. Spulciando in rete sono riuscito a risalire a questo codice
PHP:
   1.
      // sostituisci i valori, con quelli esatti del tuo database
   2.
      $hostame = 'nome_dell_host_di_mysql';
   3.
      $username = 'username di accesso al database';
   4.
      $password = 'password di accesso al database';
   5.
      $dbname = 'nome del database';
   6.
       
   7.
      // effettua la connessione al database
   8.
      $conn = mysql_connect($hostname, $username, $password) or die(mysql_error());
   9.
       
  10.
      // seleziona il database sulla quale lavorare
  11.
      $db= mysql_select_db($dbname, $conn) or die (mysql_error());
  12.
       
  13.
      // effettua la query... 
  14.
      $sql = "DELETE FROM `Nome_Tabella` WHERE `ID` = $_GET["id"]";
  15.
      $query = @mysql_query($sql);
  16.
       
  17.
      // feedback della query
  18.
      if(!$query) echo "La tabella non è stata cancellata! ERRORE: ".mysql_error(); // messaggio, con errore direttamente dal server mysql, così si capisce qual'è il problema, durante la fase di programmazione
  19.
      else echo "La tabella è stata cancellata";
  20.
       
  21.
      // chiudi la connessione con il server mysql
  22.
      mysql_close($conn) or die (mysql_error());
  23.

Ma come faccio col get a fare in modo che venga recuperato la mail ed il progressivo dell'utente che si vuole cancellare? Grazie Ancora
 
ciao
penso che potresti fare così (non sapendo cosa richiedi esattamente)
1. l'utente si iscrve tramite un form nome/cognome/email
2. regisri il suoi dati tramite php e gli invii l'email di conferema
PHP:
<?php
$nome=$_POST['nome'];
$cognome=$_POST['cognome'];
$email=$_POST['email'];
//fai la query di insert

//e recuperi l'id con cui viene inserito
$id_inserito=mysql_insert_id();
//poi prepari il testo dell'email da inviare in formato html

$testo="grazie di esserti iscritto<br>";
//e altre frasi
//alla fine
$testo.="se vuoi NON confermare clicca <a href=\"pag_non_conferma.php?aa=".$id_inserito."\">QUI</a><br>";
//e se l'utente non legge l'html
$testo.="oppure rispodi con oggetto NON CONFERMO";
//invio ecc....
?>
nella pag_non_conferma.php recuperi l'id
PHP:
<?php
//dati di connessione al db
$da_eliminare=htmlspecialchars($_GET['aa']);
//e altre verifiche poi cancelli

$result=mysql_query("DELETE FROM tabeella WHERE id=$da_eliminare";
//per esempio potresti mettere nella pagina un form che richiede l'indirizzo email
//fare la query
$result=mysql_query("DELETE FROM tabeella WHERE id=$da_eliminare AND email='$email'";

//ecc...
//e se vuoi puoi mettere il reindirizzamento alla tua home page o fai chiudere la pagina
?>


p.s.
nello script che hai inviato metti il get direttamente nella query, E' MOLTO PERICOLOSO, un maleintenzionato può canellarti tutto il db
il get DEVE essre sempre controllato e verificato, come minimo con htmlspecialchars
 
Ciao,

Grazie come sempre| hovisto che anche tu come me sei un mattiniero!! Non ho ancora testato il codice php della cancellazione ma mi chiedevo se una volta che l'utente clicca cancella lo volessi trasferire in una pagina di saluti come faccio? Cioè, lui clicca cancella e i dati appna inseriti vengono cancellati e allo stesso tempo gli si apre una paginetta con un logo e 2 o 3 righe di ringraziemnti e saluti....ho visto che l'hai inserito come commento nella parte finale del codice ma non ho idea di come si faccia.

Grazie

P.S
A proposito cosa vuol dire quel htmlspecalcharts? e soprattutto quali sarebbero le altre verifiche da fare prima di cancellare?
 
ciao
l'accesso al tuo db da parte di terzi è sempre potenzialmente pericoloso, quindi è bene verificare sempre cosa l'utente immette

htmlspecialchars trasforma in entità html alcuni caratteri, ad es il carattere < diventa &lt; analogamente il carattere > &gt; ecc.. accentati es. è &egrave; ....

se un maleintenzionato che si è iscritto e vuole disicriversi quando passa sul QUI vede

http//:www.tuo_sito/pag_non_conferma.php?aa=375
(dove 375 è il suo idi)

quindi, per farti un dispetto, scrive sul suo bw

http://www.tuo_sito.it/pag_non_conferma.php?aa=>0

per cui la query di eliminazione ti diventa

DELETE FROM tabella WEHRE id=>0

con conseguenze immaginabili (cancella tutti gli id con id==0 e maggiori di 0)
l'htmlspacialcahrs trasforma quel maggiore ">" in &gt;
per cui la query

DELETE FROM tabella WEHRE id=&gt;0

non esistendo un id di tale valore non viene eseguita

per altri controlli intendo, ad es, essere sicuri che il valore di $_GET sia un numero, oppure fare una funzione che lo ripulisca di tutti i caratteri che non siano numeri, verificare che esita e, come ti ho detto, a quell'id sia abbinato un altro valore.

poi sarebbe meglio avre un campo (corrispondente a quell'id) in cui al momento dell'iscrizione inserisci una stringa casuale (unica e bella lunga) ed usare quella al posto dell'id per eliminare.

per esempio che l'utente veda:

http://www.tuo_sito.it/pag_non_conferma.php?aa=aAbrh78UUn67HhJklo e non il suo id

questo per darti un'idea, poi se hai bisogno possiamo cercare di costruire insieme la pagina.



p.s.
si, di solito sono mattiniero
 
Ultima modifica:
ciao
scusa non avevo visto l'ultima tua domanda

...saluti....ho visto che l'hai inserito come commento....
per reindirizzare ad una pagina in automatico io uso questo codice
PHP:
<?php
//....
echo "<meta http-equiv='Refresh' content='3; URL=nome_pagina.php'>";
//....
?>
o se per refreshare la stessa
PHP:
<?php
//....
echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
//....
?>
dove content='3; il tre sono i secondi di attesa prima del refresh (puoi mettere da 0 in su, in questo caso 3 secondi)
potresti usare anche l'istruzione
header("location:... o header("refresh... ma dovresti metterli all'inizio della pagina (prima di ogni output html) o regolare il flusso con
ob_flush()...ob_end_flush()
 
Ciao,

grazie come sempre per le spiegazioni e la gentilezza. Ragionando su quanto tu mi hai detto stavo pensando che si potrebbe realizzare un'altra cosa e cioè questa. Allora l'utente compila il form ed inserisce i dati ; riceve una mail con un riepilogo dati e alla fine della mail c'è un link se i dati non sono i tuoi clicca CANCELLA. Da questo link noi mediante il get ripassiamo l'id e la mail ma non vado a cancellarli ma vado a fare un semplice UPDATE e ti spiego anche il perchè. In questo modo ho cmq uno storico. Allora quando un utente compila il form ci sono 2 campi del db : VALIDO e STATUS che diventano VALIDO=W e STATUS= Non Confermato. Noi potremmo fare in modo che quando un utente clicca il link CANCELLA io vado a recuperare l'id e la mail e trasformo VALIDO=N e STATUS=Cancellato. Ora tutto questo a livello logico...il mio problem acome sempre è quello di trasformarlo in php.......come posso fare? Uno straccio di codice da cui partire......AIUTOOOO!!
 
Ciao,

rieccomi dinuovo. Sono riuscito a recuperare uno straccio di vecchio codice ed ho provato a modificarlo per capire se andava bene. Allora nella mail di cui ti parlavo ( quella con il riepilogo dati che riceve l'utente alla compilazione del form) c'è la voce ANNULLA che linka alla pagina annulla.php:

<a href='http://www.XXXXXXX.it/annulla/annulla.php?idutente=$idutente&email=$email'>ANNULLA

il codice della pagina annulla.php ( quella vecchia che devo modificare) è questo:
PHP:
<?php
include("db_acc_form.php");
$ip = $_SERVER['REMOTE_ADDR']; 
$idcontatto = $_GET["idcontatto"];
$email = $_GET["email"];
$note = $_GET["note"];
$emailconferma = $_GET["value"];

$tablename = "formcompilati";

$link = mysql_connect($dbhost, $dbuser, $dbpass) or
        die("Could not connect");
    mysql_select_db($dbname);
  

// Controlla esistenza
         $result =  mysql_query ("
            SELECT *
                FROM $tablename
                  WHERE
                progr='$idcontatto' AND email='$email'")
                or die("Invalid query Result");
    $ri =  mysql_num_rows($result);
    $row = mysql_fetch_array($result, MYSQL_NUM);
    $idcontatto = $row[0];
    $nome = $row[1]; 
    $cognome = $row[2]; 
    $datareg = $row[3];
    $telf = $row[16];
    $telm = $row[17];
    $email = $row[7]; 
    $id = $row[6]; 
    $ileadid = $row[18]; // * FAX contiene ileadid * //
    $dayreg = $row[8];
    $monthreg = $row[9];
    $referrer = $row[25];  
    $net = $row[26];
    $prodotto = $row[36];
    $statoold = $row[38];
    $confermata = $row[42];
    if($ri==0) 
        {
        echo "\n\nNON ESISTE ALCUNA RICHIESTA DI INFORMAZIONI PER $email.";
        mysql_close($link); 
        exit();
        }
    if($confermata!="") 
        {
        echo "\n\nLA RICHIESTA DI INFORMAZIONI E' GIA' STATA $confermata.";
        mysql_close($link); 
        exit();
        }

// Inizia invio conferma email
$text = "ID: $idcontatto\nForm: $id\nStatus: $status \nEmailVerifica: $emailconferma \nNome: $nome \nCognome: $cognome";

$to = "[email protected]";
$oggetto = "VerificaEmail $idcontatto - ". $referrer ." - ". $id ." - ". $emailconferma;

#mail_attach($to, "EmailVerifica-AE <[email protected]>", $oggetto, $text);

// Fine invio conferma email
    
// Execute query
if ($valido!="W")
{
$result =   mysql_query ("
            UPDATE
                $tablename
                  SET
                  status = '$status', dataconf = NOW(), valido = '$valido', datareg = '$datareg', pref6='$emailconferma'
                WHERE email='$email' AND progr='$idcontatto'
                LIMIT 1")
                or die("Invalid query Update");
}
else
{
$result =   mysql_query ("
            UPDATE
                $tablename
                  SET
                  status = '$status', dataconf = NOW(), datareg = '$datareg', pref6='$emailconferma'
                WHERE email='$email' AND progr='$idcontatto'
                LIMIT 1")
                or die("Invalid query Update");
}

// Funzione mysql_close()
mysql_close($link);
?>

C'era un controllo con degli IF che però non credo servano più...sono questi:

PHP:
if ($emailconferma=="CONFERMATA") 
    {
    $status = "Confermato";
    $valido = "W";
    }

if ($emailconferma=="ANNULLATA") 
    {
    $status = "Annullato";
    $valido = "N";
    }    
    
if ($emailconferma=="NON_RICEVUTA") 
    {
    $status = "NonConfermato";
    $valido = "S";
    }    

if ($emailconferma!="ANNULLATA" && $emailconferma!="CONFERMATA" && $emailconferma!="NON_RICEVUTA") 
    {
    echo "\n\nC'E' STATO UN ERRORE, PROVA A CLICCARE NUOVAMENTE SUL LINK.";
    exit();
    }

Non so se questo ti potrà servire. Se lo eseguo mi dice INVALID QUERY! Dov'è che sbaglio?

Grazie come sempre
 
ciao
un minuto di pazienza e ti butto giu due righe

p.s.
penso che tu abbia gia fatto il form per l'iscrizione e l'invio dell'email e la tabella degli iscritti?
 
Si, praticamente è già tutto fatto:

ho il form ( che registra tranquillamente nel mio db)
ho anche il file annulla.php ( che è quello che t'ho girato prima) devo solo capire come aggiustarlo per renderlo funzionale e farlo in base alla mia esigenza e cioè facendo un UPDATE del campo Status e di quello Valido. Tutto questo prendendo dal get le info dell'utente e cioè email e id progressivo.

Grazie Ancora
 
ciao
io farei in questo modo, se hai messo nell'email il testo
per confermare o annullare clicca su<a href='http://www.XXXXXXX.it/annulla/annulla.php?idutente=$idutente&email=$email'>ANNULLA</a>

codice della pagina annulla.php
PHP:
<?php
ob_flush();
//uso ob_ perche header dopo input html (il get)
//funzione per la verifica dell'id, se è numerico come dovrebbe essere
function verifica_id($id){
	$id_v="".$id;//lo tratto come una stringa
	$lungo=strlen($id_v)-1;//meno uno perchè devo partire da 0
	//cliclo tutto l'id, carattere per carattere
	$id_valido="";//da ritornare se id è OK
	for($k=0;$k<=$lungo;$k++){
		if($id_v[$k] < 0 || $id_v[$k] >9){//verifico che il carattere sia un numero
			//non è un numero
			return FALSE; //esco subito dalla verifica
		}else{
			$id_valido.=$id_v[$k];//ricostruisco l'id
		}
	}
	//se non sono già uscito ritorno l'id che dovrebbe essere valido
	return (int)$id_valido;
}//fine function
//funzione di verifica indirizzo email (va bene se ver php >=5)
function verifica_email($email){
	$email=filter_var($email, FILTER_SANITIZE_EMAIL);//pulisco poi verifico
	if(!filter_var($email, FILTER_VALIDATE_EMAIL)){//indirizzo sintatticamente corretto
		return FALSE;//non è corretto
	}else{
		return $email;//è corretto
	}
}//fine function
//inizio le lettura
$idutente=htmlspecialchars($_GET['idutente'];
$emutente=htmlspecialchars($_GET['email'];
//e verifico
$ver_id=verifica_id($idutente);
$ver_em=verifica_email($emutente);
//se uno dei due inesatto esco immediatamente
if($ver_id==FALSE || $ver_em==FALSE){
	header("Location: http://www.tuo_sito.it/index.htm");
}else{//valori immessi sono sintatticamente corretti
	//qui metti i tuoi dati per la connessione
	//e poi fai la proma query di interrogazione
	//verifica i nomi dei campi e della tabella
	$query=mysql_query("SELECT id, email FROM tabella WHERE id=$ver_id AND email='$ver_em' AND valido='W'");
	//verifico che esista la coppia id/email
	$esiste=mysql_num_rows($query);
	if($esiste==0){// se = zero non esiste nel db
		//do il messaggio che non esiste ed esco
		echo "dati non presenti";
		echo "<meta http-equiv='Refresh' content='3; URL=index.htm'>";//oppure header("refresh....
	}else{//esistono e quindi uppi
		$query=mysql_query("UPDATE tabella SET valido='N' WHERE id=$ver_id AND email='$ver_em' AND valido='W'");
		echo "la tua iscrizione non è stata confermata";
		echo "<meta http-equiv='Refresh' content='3; URL=index.htm'>";
	}
}
ob_end_flush();
?>
p.s.
ma ti servono due campi? valido e status?
 
non mi gira....ma io vorrei realizzare solo un UPDATE. Senza controlli del caso
senza if o cicli solo
prendi dal get id e email e fai un update nel db dove trovi questi 2 parametri ( email appunto e id) e metti VALIDO=N e Staus=Cancellato.
tutto questo dentro un pezzo di html che dia un pò di "estetica"....un logo un titoletto...roba del genere. QUALCOSA TIPO QUESTO:

PHP:
<?php
$tablename = "formcompilati";
$idcontatto = $_GET["idcontatto"];
$email = $_GET["email"];
$link = mysql_connect($dbhost, $dbuser, $dbpass) or
        die("Could not connect");
    mysql_select_db($dbname);

mysql_select_db("my_db", $con);

mysql_query (" UPDATE   $tablename
                  SET
                  status = 'cancellato', dataconf = NOW(), valido = 'N'  WHERE email='$email' AND progr='$idcontatto'
                LIMIT 1")
                or die("Invalid query Update");

mysql_close($link);
?>
 
Ultima modifica:
ciao
se non vuoi fare controlli sul get, poi non puoi lamentarti se qualcuno ti manda in pallino il db.
quello che hai scritto uppa, ma vedi sopra
 

Discussioni simili