Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

URGENTE: Scriipt PHP e cancellazione in mySQL

Discussioni e opinioni costruttive sul mondo dell'informatica.
Per la soluzione di problemi specifici fare riferimento alle sezioni di assistenza!

Moderatori: aurelio37, axelrox

URGENTE: Scriipt PHP e cancellazione in mySQL

Postdi Dylan666 » 17/10/04 02:54

È veramente urgente, se potessi risolvere prima di lunedì sarebbe la mia salvezza... :P Chiedo scusa per la lunghezza di questo post ma devo riportare molto codice.

Questo sotto è la parte di mySQL di questo script, al quale io ho aggiunto la riga in rosso per il cognome

CREATE TABLE `membri_newsletter` (
`membro_ID` int(11) NOT NULL auto_increment,
`nome` varchar(60) NOT NULL default '',
`cognome` varchar(60) NOT NULL default '',
`mail` varchar(120) NOT NULL default '',
PRIMARY KEY (`membro_ID`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;



Quello che riporto ora invece è lo script per eliminare il record dal database se i dati immessi in un form del nome e della mail sono uguali. Io vorrei che il controllo fosse fatto anche sul campo "cognome" (e quindi i 3 dati devono corrispondere per permettere la cancellazione), ma come devo fare? Ecco lo script:

<?php
include("header.php");
include("config.inc.php");

function controllo_mail() {
global $mail;

return(ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_a-z{|}~]+'. '@'. '[-!#$%&\'*+\\./0-9=?A-Z^_a-z{|}~]+\.' . '[-!#$%&\'*+\\./0-9=?A-Z^_a-z{|}~]+$', $_POST['mail']));
}



echo"<form action=$_SERVER[PHP_SELF] method=post>
<center><table border=1 bgcolor=$sfondo1 cellspacing=0 cellpadding=0 bordercolor=$bordo1 width=600>
<td>
<table border=1 cellspacing=0 cellpadding=2 bgcolor=$sfondo2 bordercolor=$bordo2 width=600>
<td width=550><font face=verdana size=2>Inserisci il tuo nome e l'e-mail con cui ti sei iscritto per cancellarti.</td>
<td width=50><font size=2 face=verdana><a href=index.php>Iscrivimi</a></td>
</table></td></table>
<p>
<p>
<table border=1 bgcolor=$sfondo1 cellspacing=0 cellpadding=2 bordercolor=$bordo1 width=600>
<td>
<table border=0 cellspacing=0 cellpadding=0 bgcolor=$sfondo2 bordercolor=$bordo2 width=600>
<td width=250 height=95><img src=newsletter.jpg></td>
<td><font face=verdana size=1>Nome: <input type=text name=nome class=input size=20><br>Email:
<input type=text name=mail class=input size=20><br><input type=submit name=submit value=Cancellami class=bottone></td>
</table></td></table></form>
";


if(isset($_POST['submit'])) {
$db = mysql_connect($db_host, $db_user, $db_password) or die('Errore connessione database');

mysql_select_db($db_name, $db) or die('Errore selezione database');

if(!controllo_mail()) {

echo"<script>alert('Controlla di aver inserito un indirizzo e-mail valido.');</script>";
}

elseif(!$_POST['nome'] && controllo_mail()) {
echo"<script>alert('Compilare il campo Nome.');</script>";

} elseif(isset($_POST['nome']) && controllo_mail()) {

$query1 = "SELECT membro_ID FROM membri_newsletter WHERE mail = '$_POST[mail]'";
$ris = mysql_query($query1);
$numero = mysql_num_rows($ris);

if($numero>0) {

$query2 = "DELETE FROM membri_newsletter WHERE mail = '$_POST[mail]' AND nome = '$_POST[nome]'";
$risultato2 = mysql_query($query2);

if($risultato2) {
echo"<font face=verdana size=1><strong><br>Sei stato cancellato dal database.</strong></font>";
} else {
echo"<font face=verdana size=1><strong><br>Errore durante l'operazione.</strong></font>";
}

} else {
echo"<script>alert('I dati che hai inserito non esistono, l\'utente non può essere cancellato.');</script>";
}
}
}

include("footer.html");
?>


Grazie a chi avrà la pazienza di leggere tutto questo e cercare di aiutarmi...
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Sponsor
 

Postdi Dylan666 » 17/10/04 04:09

Procedo "alla Marzullo", cioè dopo essermi fatto la domanda mi do la risposta:

if(isset($_POST['submit'])) {
$db = mysql_connect($db_host, $db_user, $db_password) or die('Errore connessione database');

mysql_select_db($db_name, $db) or die('Errore selezione database');

if(!controllo_mail()) {

echo"<script>alert('Controlla di aver inserito un indirizzo e-mail valido.');</script>";
}

elseif(!$_POST['nome'] && controllo_mail()) {
echo"<script>alert('Compilare il campo Nome.');</script>";

}elseif(!$_POST['cognome'] && controllo_mail()) {
echo"<script>alert('Compilare il campo Cognome.');</script>";

} elseif(isset($_POST['nome']) && controllo_mail()) {

$query1 = "SELECT membro_ID FROM membri_newsletter WHERE mail = '$_POST[mail]'";
$ris = mysql_query($query1);
$numero = mysql_num_rows($ris);

if($numero>0) {

$query2 = "DELETE FROM membri_newsletter WHERE mail = '$_POST[mail]' AND nome = '$_POST[nome]' AND nome = '$_POST[nome]'";
$risultato2 = mysql_query($query2);


IL codice ovviamente lo avevo già provato ma... non funzionava perché nel form di immissione avevo pasticciato invertendo il campo nome col cognome... Quindi al database arrivavano al contrario (tipo "nome=Bond Cognome =James") e mettendoli giusti nel form di cancellazione ovviamente lo script non trovava il record :P
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Dylan666 » 17/10/04 05:42

No, ho sbagliato, così non va... Anche se i Nome cognome sono errati basta che la mail sia giusta per far apparire il messaggio di avvenuta acncellazione, anche se questa non avviene (mentre coi 3 dati corretti sì): dove sbaglio?



Codice: Seleziona tutto
if(isset($_POST['submit'])) {
$db = mysql_connect($db_host, $db_user, $db_password) or die('Errore connessione database');

mysql_select_db($db_name, $db) or die('Errore selezione database');

if(!controllo_mail()) {

echo"<script>alert('Controlla di aver inserito un indirizzo e-mail valido.');</script>";
 }

elseif(!$_POST['nome'] && controllo_mail()) {
echo"<script>alert('Compilare il campo Nome.');</script>";

}elseif(!$_POST['cognome'] && controllo_mail()) {
echo"<script>alert('Compilare il campo Cognome.');</script>";

[color=red][b]} elseif(isset($_POST['nome']) && $_POST['cognome'] && controllo_mail()) {[/b][/color]

$query1 = "SELECT membro_ID FROM membri_newsletter WHERE mail = '$_POST[mail]'";
$ris = mysql_query($query1);
$numero = mysql_num_rows($ris);

if($numero>0) {

$query2 = "DELETE FROM membri_newsletter WHERE mail = '$_POST[mail]' AND nome = '$_POST[nome]' AND cognome= '$_POST[cognome]'";
$risultato2 = mysql_query($query2);

if($risultato2) {
echo"<div align=center><font face=verdana size=1><strong><br>Sei stato cancellato dal database.</strong></font></div>";
} else {
echo"<div align=center><font face=verdana size=1><strong><br>Errore durante l'operazione.</strong></font></div>";
}

} else {
echo"<script>alert('I dati che hai inserito non esistono, l\'utente non può essere cancellato.');</script>";
  }
 }
}


La riga rossa sono sicuro di averla scritta sbagliata... come devo correggerla?
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi pjfry » 17/10/04 12:51

non ho capito perchè usi isset solo per il nome e non per il cognome :undecided:
non è che magari la query di delete ritorna qualcosa anche se non cancella?
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi Dylan666 » 17/10/04 13:25

pjfry ha scritto:non ho capito perchè usi isset solo per il nome e non per il cognome :undecided:
non è che magari la query di delete ritorna qualcosa anche se non cancella?


Brravissimo, la riga rossa doveva essere quella solo che poi ho messo il tag CODE invece di QUOTE per postare :aaah
Riassumendo:

} elseif(isset($_POST['nome']) && controllo_mail()) {

Come lo cambio per aggiungere pure il controllo sul cognome?
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi pjfry » 17/10/04 13:48

mica me lo ricordo tanto bene il php... cmq isset dovrebbe dirti se è stata specificata nel form, giusto?
mettici anche &&isset($cognome) prima di lanciare la query... poi devi controllare cosa ti ritorna la delete, se ritorna 0 quando non riesce magari puoi anche risparmiarti la select sulla mail, diventa inutile (oppure devi inserire nella select anche nome e cognome, no? ;) )
spero di esserti utile, ma sono almeno 3 anni che non uso 'sta roba... :roll:
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi Triumph Of Steel » 17/10/04 15:59

a prescindere dal fatto che di solito i controlli di aver inserito qualcosa si fanno PRIMA di inviare il form... quando uno clicca sul bottone INVIA, viene lanciato un JS che Valida il form.. se devi fare un controllo in questo modo.. a volte non basta solo

Codice: Seleziona tutto
isset($VAR)

che in più non è necessario a meno che il php.ini non sia stato configurato come E_ALL per gli errori, ma anche
Codice: Seleziona tutto
 isset($VAR) && $VAR != ""


il tuo codice dovrebbe funzionare così

Codice: Seleziona tutto
if ( isset($_POST['nome']) && $_POST['nome'] != "" && isset($_POST['cognome']) && $_POST['cognome'] != "" && controllo_mail() ) {
 //qualcosa
}


in ogni caso, quando non funziona qualcosa, chi programma fa sempre degli OUTPUT per vedere dove si blocca o perchè non ha funzionato...
io farei degli ECHO su $_POST['nome'],['cognome'] e altro... per vedere se veramente arrivano pieni dal form..

e se vuoi essere sicuro che li prenda giusti, puoi usare anche $_REQUEST al posto di $_POST...

per tua informazione, $_REQUEST prende le variabili nell'ordine specificato nel PHP.INI (get, post, global ecc..), in teoria appena trova una di queste piene, si ferma e riempie la variabile (se non ricordo male)
Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00


Torna a Discussioni


Topic correlati a "URGENTE: Scriipt PHP e cancellazione in mySQL":

Aiuto urgente!!!
Autore: templare77
Forum: Software Windows
Risposte: 1

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti