Domanda Problema pagina di registrazione

Stato
Discussione chiusa ad ulteriori risposte.

kekkox_

Utente Bronze
14 Aprile 2014
32
7
0
46
Premetto che ho usato il tasto cerca ma non ho trovato ciò che mi serviva. Sto tentando di creare una pagina di registrazione con tanto di e-mail di convalida sulla base di un codice PHP che ha postato un utente su questo forum. Il codice originale è questo:
PHP:
<div class="lbox_t"></div>        
<div class="lbox_m"><span class="headline">Registrazione</span><br><br>
<center><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"></center>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<center> <link rel="stylesheet" type="text/css" href="style.css" /></center>

        <?php    
//scripted by piraka2 NON MODIFICARE I CREDITI
                include 'conn.php';
                include 'functions.php';
                mysql_select_db(account) or die ("Il Database Non Risponde");

                if ($_GET['tipo']!=activate)
                {
if (isset($_POST['reg']))
{
$create_time=date('Y-m-d H:i:s');
$cash='500';
  $gold_expire = "2010-11-05 14.45.41";
  $silver_expire = "2010-11-05 14.45.41";
  $safebox_expire = "2012-11-05 14.45.41";
  $autoloot_expire = "2012-11-05 14.45.41";
  $fish_mind_expire = "2012-11-05 14.45.41";
  $marriage_fast_expire = "2012-11-05 14.45.41";
  $money_drop_rate_expire = "2010-11-05 14.45.41";

$login = $_POST['login_reg'];
$pass1 = $_POST['pass'];
$r_pass = $_POST['pass_2'];
$mail = $_POST['mail'];
$social_id = $_POST['delete'];
if ($login!="")
{
if ($pass!="")
{
if ($pass1!="" and $pass1==$r_pass)
{
if (checkEmail($mail))
{
if (is_numeric($social_id))
{

if
(mysql_query("INSERT INTO account (`id` ,`Login` ,`password` ,`real_name` ,`social_id` ,`email` ,`phone1` ,`phone2` ,`address` ,`zipcode` ,`create_time` ,`question1` ,`answer1` ,`question2` ,`answer2` ,`is_testor` ,`status` ,`securitycode` ,`newsletter` ,`empire` ,`name_checked` ,`availDt` ,`mileage` ,`cash` ,`gold_expire` ,`silver_expire` ,`safebox_expire` ,`autoloot_expire` ,`fish_mind_expire` ,`marriage_fast_expire` ,`money_drop_rate_expire` ,`ttl_cash` ,`ttl_mileage` ,`channel_company`)
                                    VALUES (NULL , '$login', PASSWORD('$pass1'), '', '$social_id', '$mail', NULL , NULL , NULL , '', '$create_time', NULL , NULL , NULL , NULL , '0', 'DEACTIVE', '', '0', '0', '0', '0000-00-00 00:00:00', '0','$cash' ,'$gold_expire' ,'$silver_expire' ,'$safebox_expire' ,'$autoloot_expire' ,'$fish_mind_expire' ,'$marriage_fast_expire' ,'$money_drop_rate_expire' , '0', '0', '')"))
                                    {
$mail_messaggio =
"
Ciao ".$login.", \r\n
 
Siamo felici che tu ti sia iscritto a RevolutionLokmt2, gioco d'azione orientale MMOG. \r\n
 
Per poter entrare in gioco devi usare i seguenti dati: \r\n
 
Nome utente: ".$login." \r\n
Password: ".$pass1." \r\n
 
 
Prima di iniziare a giocare devi confermare la tua iscrizione. \r\n
Sei pregatodi cliccare il seguente link: \r\n
http://93.190.139.103/reg.php?tipo=activate&active=".$login."  
";    

$messaggio =  "
<font color=\"red\">Benvenuto $login ATTIVA IL TUO ACCOUNT CLICCANDO NEL LINK NELL' EMAIL CHE TI ABBIAMO INVIATO</font><br><br>
Riepilogo Dati Account:<br><br>
<table style=\"border: 1px solid #ff0000;\">
<tr><td width=\"50%\" >Nome Account</td><td width=\"50%\" >$login</td></tr>
<tr><td width=\"50%\" >Passoword</td><td width=\"50%\" >$pass1</td></tr>
<tr><td width=\"50%\" >Email VERA DEVE ESSERE ATTIVATA</td><td width=\"50%\" >$mail</td></tr>
<tr><td width=\"50%\" >Social ID</td><td width=\"50%\" >$social_id</td></tr>
</table>";
echo $messaggio;
$subject = 'Registrazione Metin2';
$headers = 'From: [email protected]' . "\r\n" .
    'Reply-To: [email protected]' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($mail, $subject, $mail_messaggio, $headers);


}
else
{
echo "ID Gia Esistente";
}
}
else{echo "ID Personale non valido";}

}
else
{echo "Inserisci una mail Valida";}
}
else
{echo "Errore Password";}
}
else
{
echo "Inserisci una Passowrd Valida";
}


}
else{echo "Devi inserire un Username Valido";}

}
else
{
echo "
<form action=\"reg.php?tipo=reg\" method=\"post\">
<label>Nome Account:</label><br>
<input type=\"text\" name=\"login_reg\">&nbsp; Massimo 9 Caratteri<br><br>
<label>Password:</label><br>
<input type=\"password\" name=\"pass\">&nbsp; Massimo 9 Caratteri<br><br>
<label>Ripeti Password:</label><br>
<input  type=\"password\" name=\"pass_2\">&nbsp; Massimo 9 Caratteri<br><br>
<label>E-Mail (Valida):</label><br>
<input type=\"text\" name=\"mail\">&nbsp; Inserisci Email Valida devi convalidarla<br><br>
<label>Codice ID Account:</label><br>
<input type=\"text\" name=\"delete\">&nbsp; Massimo 7 numeri<br><br>
<input class=\"button\" type=\"submit\" value=\"Registrati\" name=\"reg\">
<input class=\"button\" type=\"reset\" name=\"Reset\">
</form>
";
}
}
else
{
$nome_da_attivare = $_GET['active'];
$query90 = mysql_query("select * from account where login='".$nome_da_attivare."'");
if (mysql_num_rows($query90)>0)
{
$fetch80 = mysql_fetch_object($query90);
if ($fetch80->status=="DEACTIVE")
{
$sql_active = mysql_query("UPDATE `account` SET `status` = 'OK' WHERE `login` = '".$nome_da_attivare."' LIMIT 1");
if ($sql_active)
{
echo "Il Tuo Account è stato attivato";
}
else
{
echo "Errore Query!";
}
}
else
{
echo "Il Tuo Account è stato gia attivato";
}
}
else
{
echo "Account inesistente";
}
}
//scripted by piraka2 all right reserved Copy 2011
?>                
</div>         <div class="lbox_b"></div>

Questo è il file conn.php associato al codice di sopra
PHP:
<?php
    $host = "QUI HO INSERITO IL MIO IP DI HAMACHI TERMINANTE IN .100";      $user = "root";      $pass = "QUI HO INSERITO LA PASSWORD DEL DB";     $destinazione="../error.php";mysql_connect($host, $user, $pass) or die( '<script language=javascript>document.location.href="'.$destinazione.'"</script>'); // Connect
?>

E infine il file functions.php, associato sempre al primo codice:
PHP:
 <?php
function checkEmail($str)
{    
return preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $str);
}
?>

Io in seguito ai seguenti errori:
Codice:
[B]Notice:[/B] Use of undefined constant account - assumed 'account' in [B]C:\xampp\htdocs\reg.php[/B] on line [B]13
[/B]
[B]Notice: Undefined index: tipo in [B]C:\xampp\htdocs\reg.php on line [B]15
[/B][/B][/B]
[B]Notice: Use of undefined constant activate - assumed 'activate' in [B]C:\xampp\htdocs\reg.php on line [B]15[/B][/B][/B]

Ho apportato le seguenti modifiche:
- Nella riga 13 (primo errore) ho messo tra apici account e quindi la riga 13 ora è:
PHP:
mysql_select_db('account') or die ("Il Database Non Risponde");
- Nella riga 15 invece (secondo e terzo errore) ho inserito la funzione isset(Su quale base? Boh, l'aveva messa sull'if di sotto e quindi pensavo ci volesse anche qui :asd: ) e racchiuso tra apici activate(non so perchè l'ho fatto, ma almeno così non dà più errore :\ Penso di aver fatto una cazzata :asd: ) ottenendo quindi:
PHP:
if (isset($_GET['tipo'])!='activate')

Ora però ho un problema. Quando inserisco i dati (Username,password,e-mail ecc.) e clicco su "registrati" mi esce un altro errore:
PHP:
Notice: Undefined index: active in C:\xampp\htdocs\reg.php on line 131

Per i pigri la riga 131 è questa:
PHP:
$nome_da_attivare = $_GET['active'];

E inoltre mi viene visualizzato il messaggio "Account inesistente" e non mi arriva nessuna e-mail.
Qualcuno mi sa aiutare? Mi andrebbe bene anche un altro script con controllo e-mail se proprio non si riuscisse a risolvere.
 
Non riesco a capire il senso di convalidare account in locale...
In ogni caso... Prova con questa: PHP code - 116 lines - codepad
Sia chiaro, non ho fatto altro che riordinare e modificare in parte il codice.
Questo codice è una schifezza, andrebbe riscritto da 0. Inoltre mancano tutti gli escape.
Sia chiaro che ti volendo, ti creano problemi ugualmente :D
Non mi son sprecato a sistemarlo per bene in quanto con un codice pulito come questo, puoi farlo da te.
 
Non riesco a capire il senso di convalidare account in locale...
In ogni caso... Prova con questa: PHP code - 116 lines - codepad
Sia chiaro, non ho fatto altro che riordinare e modificare in parte il codice.
Questo codice è una schifezza, andrebbe riscritto da 0. Inoltre mancano tutti gli escape.
Sia chiaro che ti volendo, ti creano problemi ugualmente :D
Non mi son sprecato a sistemarlo per bene in quanto con un codice pulito come questo, puoi farlo da te.

Principalmente la convalida la volevo inserire per far si che una persona non si crei più di un account.
Comunque ho questo errore:
PHP:
Notice: Undefined index: active
sia sulla riga 17 che 102.
 
Ecco qui: PHP code - 116 lines - codepad
E' solo un notice, niente di che comunque.
Undefined index: ... indica che tale variabile non viene definita e quindi è nulla.
I notice puoi anche ignorarli, a meno che nn li dichiari ad inizio pagina e poi vengono sovrascritti da quello che effettivamente dovrà essere.
In alternativa per nascondere l'errore anteponi @ alla variabile.
 
Ecco qui: PHP code - 116 lines - codepad
E' solo un notice, niente di che comunque.
Undefined index: ... indica che tale variabile non viene definita e quindi è nulla.
I notice puoi anche ignorarli, a meno che nn li dichiari ad inizio pagina e poi vengono sovrascritti da quello che effettivamente dovrà essere.
In alternativa per nascondere l'errore anteponi @ alla variabile.
Non lo sapevo, grazie! :D Comunque, ora apro la pagina di registrazione e non mi compaiono i vari campi da compilare ma solo la scritta "Impossibile convalidare questo account."
 
Ultima modifica:
Il codice scritto presenta molte falle, prima di tutto ti consiglio di usare MySQLi o ancora meglio PDO, e come scritto da [MENTION=100189]Ryosaku[/MENTION], mancano tutti gli escape, quindi ancora peggio, SQL Injection a volontà, nel caso di una pagina di login, scopriranno di tutto e di più, lol.

Ho coretto alcune cose, e fatto funzionare questo codice, brutto, ma comunque funzionante, dovresti fare più controlli..

Ecco lo script corretto su Pastebin. (ripeto, il codice e da riscrivere da 0, se non hai voglia o non sai farlo, consiglio di trovarti qualche codice già scritto.)

Come invio email ti consiglio di trovarti qualche classe buona, tipo PHPMailer e impostarlo con GMAIL. @kekkox_
 
Stato
Discussione chiusa ad ulteriori risposte.
Indietro
Top Bottom