- Home
- Categorie
- Coding e Sistemistica
- PHP
- Link attivazione account con nome variabile comprensiva di underscore???
-
Link attivazione account con nome variabile comprensiva di underscore???
Salve,
ho il seguente problema e mi chiedevo se esiste una soluzione
si tratta di spedire nella mail di attivazione account un link che rimanda ad altra pagina in cui si esegue un UPDATE e si aggiorna il valore di un campo
fin qui è chiaro
il problema è nel link che arriva nella mail
http://nomedominio.it/attiva.php?user=$user&id=$id
dove ho posto
$user = $_POST['nome'];se il valore del campo nome è intero e formato da una sola parola
non ci sono problemi es: Gianlucase invece è formato da 2 parole es: Gian Luca
il link che arriva viene spezzato e, di fatto, non funziona
questo è quello che arriva:
http://nomedominio.it/attiva.php?user=Gian Luca&id=10
c'è un modo affinchè questo non avvenga ed ottenere un valore del tipo
Gian_Luca e quindi un link non spezzato del tipo
http://nomedominio.it/attiva.php?user=Gian_Luca&id=10Un saluto
-
Se vuoi semplicemente sostituire gli spazi con underscore puoi usare str_replace
Se invece vuoi essere tranquillo anche con le accentate eccetera eccetera devi usare urlencode
Vai su php.net e trovi tutto.
-
Grazie margheritebianche,
ho utilizzato la funzione urlencode ed ho risolto il problema alla grande
Un saluto
-
Salve Ragazzi ho l'ho stesso problema. Allora, invio l'email di attivazione account, ma non riesco a mandare i dati per farmi entrare nel sito. Mi potete dare una mano per favore ??? Vi posto qualche codice, in modo tale che a qualcuno possa essere d'aiuto.
Tabella utenti:
[PHP]
create table utenti (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
nome VARCHAR(30) NOT NULL,
cognome VARCHAR(30) NOT NULL,
username VARCHAR(30) NOT NULL,
email VARCHAR(40) NOT NULL,
password VARCHAR(255) NOT NULL,
attivo ENUM('1', '0') DEFAULT '0',
PRIMARY KEY (id)
);
[/PHP]Questa è la pagina di attivazione.php:
[PHP]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Account attivato</title>
</head>
<body>
<?php
// includiamo il file di configurazione
require_once("connetti.php");// qui bisognera decriptare $email = $_GET['email']; $password = $_GET['password']; // controlliamo se i parametri sono presenti in tabella $ctrl_login = @mysql_query("SELECT id FROM utenti WHERE email='$email' AND password='$password'") or die(mysql_error()); if (@mysql_num_rows($ctrl_login) == 0) { // esito login positivo quindi rendiamo l'utente attivo $obj = @mysql_fetch_object($ctrl_login) or die(mysql_error()); $query_attivo = @mysql_query("UPDATE utenti SET attivo='1' WHERE id=" . $obj->id) or die(mysql_error()); var_dump($query_attivo) ?> <center> <h1> Ora il tuo account è stato attivato. Ti arriverà un'altra emaail con i dati relativi alla tua connessione. Conserva l'emaile non cestinarla. Una volta persa, non potrai più accedere al tuo account. </h1> </center> <?php } else { // esito login negativo echo "Dati non validi Accesso negato."; } ?>
</body>
</html>
[/PHP]Questa è la pagina dove c'è il link dell'invio email e si chiama iscrizione2.php:
[PHP]
<?php
require_once("connetti.php");
if (!isset($_POST['reg'])) {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Modulo d'iscrizone</title><center> <H1>BENVENUTO NEL SITO D'ISCIRIZIONE PROVA</H1> <form action= '' method="POST"> <font face="Comic Sans MS"> Nome: <input type="text" name="nome" maxlength="30" size ="32"> <br> <br> Cognome: <input type="text" name="cognome" maxlength="30" size ="32"> <br> <br> Username: <input type="text" name="username" maxlength="30" size ="32"> <br> <br> Email: <input type="text" name="email" maxlength="40" size ="42"> <br> <br> Rip-Email: <input type="text" name="ripemail" maxlength="40" size ="42"> <br> <br> Password: <input type="password" name="password" maxlength="12" size ="14"> <br> <br> Rip-Passw: <input type="password" name="passw" maxlength="12" size ="14"> <br> <br> </font> <center> <input type="submit" name="reg" value="Invio iscrizione" /> <input type="submit" name="uscita" value="Uscita" /> </center> </form> </head> <body> <?php
} else {
$nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));
$cognome = mysql_real_escape_string(strtolower(trim ($_POST['cognome'])));
$username = mysql_real_escape_string(strtolower(trim ($_POST['username'])));
$password = mysql_real_escape_string(trim ($_POST['password']));
$passw = mysql_real_escape_string(trim ($_POST['passw']));
$email = mysql_real_escape_string(trim ($_POST['email']));
$ripemail = mysql_real_escape_string(trim ($_POST['ripemail']));//crittografa la passowrod
$pass = mysql_real_escape_string(md5(trim($_POST['password'])));
// verifico la presenza dei campi obbligator
$ok_ko ="";
//controllo campi compilati
if($nome ==""){$ok_ko .= "Attenzione: il campo nome deve essere compilato. <br> <br>";}
if($cognome ==""){$ok_ko .= "Attenzione: il campo cognome deve essere compilato. <br> <br>";}
if($username ==""){$ok_ko .= "Attenzione: il campo username deve essere compilato. <br> <br>";}
if($email ==""){$ok_ko .= "Attenzione: il campo email deve essere compilato. <br> <br>";}
if($password ==""){$ok_ko .= "Attenzione: il campo password deve essere compilato. <br><br>";}if($password != $passw){$ok_ko .= "Attenzione: le due password non coincidono. <br> <br>";}
// Controllo se lo username è presente nel db
$checkusername=mysql_query("SELECT username FROM utenti WHERE username='$username'");
$vuota=mysql_num_rows($checkusername);
if($vuota > 0){
echo "<br> <br> <h1> Attenzione: lo username: ".$username." è già presente nell'archivio. Si prega di cambiare email. Grazie !!! </h1>";
echo "<meta http-equiv='Refresh' content=4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();}
//controllo scrittura corretta dell'email
if(!filter_var($email, FILTER_VALIDATE_EMAIL)||!filter_var($ripemail,FILTER_VALIDATE_EMAIL)){
$ok_ko .= "indirizzo email non valido<br>";
// } //chiude il controllo scrittura corretta dell'email
// Controlla se le due email coincidono
if($email != $ripemail){$ok_ko .= "Attenzione: le due email non coincidono. <br> <br>";}
} //chiude il controllo scrittura corretta dell'email// Controllo se esiste l'email nel db
$checkemail=mysql_query("SELECT email FROM utenti WHERE email='$email'");
$vuota=mysql_num_rows($checkemail);
if($vuota > 0){
echo "<br> <br> <h1> Attenzione: l'email: ".$email." è già presente nell'archivio. Si prega di cambiare email. Grazie !!! </h1>";
echo "<meta http-equiv='Refresh' content=4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();}
if($ok_ko !=""){
echo "<h1>$ok_ko</h1>";
echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();
}else{$query="INSERT INTO utenti(nome, cognome, username, email, password) VALUES('$nome','$cognome','$username','$email','$pass')";
//var_dump($query);//qui dovresti vedere se la query si forma come dovrebbe
$q_i=mysql_query($query);//qui se registra, se bool false errore, se resuorce... è a posto
var_dump($q_i);
// Parte riguardante l'invio email//require_once ("/class.phpmailler.php");
require_once 'phpmailer/class.phpmailer.php';
//phpmailer
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP$mail->SetFrom("[email protected]");
$mail->Subject = "Attivazione account.";
//$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
//$mail->AltBody = "Iscrizione avvenuta correttamente. "; // optional, comment out and test
$mail->CharSet = "UTF-8"; //Content-Type" content="text/html;
$mail->MsgHTML('Grazie di esserti iscritto. <a href="utenti/fabio/MegaLaboratorio/attivazione.php">clicca qui per attivare</a></b>'." "."per attviare l'account. Grazie.");
$mail->AddAddress($_POST['email']);
if(!$mail->Send()) {
echo "Errore nell'inviare l'email: " . $mail->ErrorInfo;
} else {
echo "Messaggio inviatro correttamente!";
}echo "<h1> <br>Utente registrato correttamente. E' stata inviata un'email di conferma per attivare l'account</h1>";
//e torno al form
//header("Refresh: 2;URL=paginaris.php");
header("Refresh: 2;URL=login.php");
}
}
?>
[/PHP]
Poi c'è la pagina di login.php:[PHP]
<?php
require_once("connetti.php");if (!isset($_POST['log'])) {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Loggati</title><center> <H2>DIGITARE USERNAME & PASSWORD. PREMERE <a href="iscrizione.php"> QUI</a> </H2> <form action= '' method="POST"> <font face="Comic Sans MS"> Username: <input type="text" name="username" maxlength="30" size ="32"> <br> <br> Password: <input type="password" name="password" maxlength="12" size ="14"> <br> <br> </font> <center> <input type="submit" name="log" value="Loggati" /> </center> </form> </head> </body> <?php
} else {
session_start();
//Query originale
$query = "SELECT id,username, nome, attivo FROM utenti WHERE username='" . $_POST['username'] . "' AND password='" . md5($_POST['password']) . "'";
$cerco = mysql_query($query);
if (!isset($_POST['esci'])) {
if (!$cerco) { echo "Errore query: <br/>$query<br/>" . mysql_error(); mysql_error(); } else { if (mysql_num_rows($cerco) == 0) { $row = mysql_fetch_assoc($cerco); $_SESSION['nome'] = $row['nome']; $_SESSION['id'] = $row['id']; //$_SESSION['autorizzato'] = $row['autorizzato']; $_SESSION['attivo'] = 1; $query = "SELECT id,username, nome, attivo FROM utenti WHERE attivo = 1 AND username='" . $_POST['username'] . "' AND password='" . md5($_POST['password']) . "'"; header("Refresh: 0;URL=paginaris.php"); } else { echo "<h2> <center>";
echo 'Premere su <a href="javascript:history.back();">back</a> Indietro per riprovare </h2>';
echo "Utente non trovato";header("Refresh: 1;URL=login.php");
echo "</h2> <center>";
}
}
}
}?>
[/PHP]
In ultimo c'è la paginaris.php (che sarebbe la pagina riservata per chi si logga con i dati corretti).
[PHP]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>benvenuto</title><body>
<?php
echo "<div class=\"messaggio\"><h1>"; echo "BENVENUTO ".$stringa." <br />"; echo $me; echo "</h1></div>"; echo "</body></html>"; }else{ header("Location:failed.html"); exit();
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body><center> <br> <br>
<input type="button" onClick="window.location.href='logout.php';" style='padding:10px' value="Logout" />
</center>
</body>
</html>[/PHP]
Una cosa nella pagina iscrizione2.php, non mi fa la verifica delle due email, se la provate, e ci mettete prima pippo@gmail e poi superpippo@gmail, la da per buona e fa passare con la conseguenza che registra l'utente. Non riesco a capire dove sta l'errore. E' tale e qiuale alla verifica della password quindi.... Boh.
La parte riguardante alla verifica dell'email è la seguente:
[PHP]
//controllo scrittura corretta dell'email
if(!filter_var($email, FILTER_VALIDATE_EMAIL)||!filter_var($ripemail,FILTER_VALIDATE_EMAIL)){
$ok_ko .= "indirizzo email non valido<br>";
// } //chiude il controllo scrittura corretta dell'email
// Controlla se le due email coincidono
if($email != $ripemail){$ok_ko .= "Attenzione: le due email non coincidono. <br> <br>";}
}
[/PHP]
A me servirebbe una cosa del genere con il link di conferma che mando via email:attivazione.php?email=email&psw=password la password ovviamente dovrebbe essere criptata. mi potete dare una manoi per favore ??? Grazie a tutti della collaborazione. Spero di ricevere aiuti....