Who user only DB class from PERA? - database
I want to use only PEAR DB class, I try follow:
$pearPfad ="PEAR_DB-1.7.14/DB-1.7.14/DB.php";
error_reporting(E_ALL);
require_once($pearPfad);
$DB_dbType ="mysql";
$DB_user = "myuser";
$DB_pass = "mypassword";
$DB_host = "localhost";
$DB_dbName ="mydatabase";
$dsn = $DB_dbType . "://" // Build a DSN string (Data Source Name)
. $DB_user . ":" // Required by DB::connect()
. $DB_pass . "#"
. $DB_host . "/"
. $DB_dbName;
$db = DB::connect($dsn, TRUE);
if (DB::isError($db)) {
die("FEHLER: ".$db->getMessage() );
}
$sql = "SELECT id, title , created FROM h1z4e_content";
$res = $db->query($sql);
if (DB::isError($res)) {
die($res->getMessage());
}
while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
if (DB::isError($row)) {
die($row->getMessage());
}
print ("<p>Hey, it s:<br />" . $row->id . " " . $row->title . " ... and their freaky et: " . $row->created. "</p>\n");
}
$res->free();
// Similar to: mysql_free_resul
$db->disconnect();
But I get this error:
Warning: require_once(PEAR.php): failed to open stream: No such file or directory in /var/www/PEAR/PEAR_DB-1.7.14/DB-1.7.14/DB.php on line 30 Fatal error: require_once(): Failed opening required 'PEAR.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/PEAR/PEAR_DB-1.7.14/DB-1.7.14/DB.php on line 30
I found here in Stack Overflow this link: PHP-PEAR require_once('DB.php');
I don't want install PEAR on my computer.
I want only user PEAR DB class, is this possible without install PEAR?
Yes, but you need to set the include path correctly - in your case, to /full/path/to/PEAR_DB-1.7.14/DB-1.7.14/
Related
Need help to populate a structs array in perl
I need some help to populate an array made of structs in perl. The data for the array comesfrom a .SH file with the following format : 108,Country,Location,ap17,ip_149,ssh,model,12/8/2020 The code I am using is as follows: use strict; use warnings; use Class::Struct; struct(Net_Node => [hostname => '$', dir_ip => '$', access => '$', user => '$', pass => '$']); my $node = Net_Node->new(); my #nodes; my $user = "hjack"; my $pass = 'butstalion'; my $line; my #all; my $counter=0; open(my $fh, '<', "exaple.sh") or die "Failed to open especified file"; #system('clear'); foreach $line (<$fh>) { #all=split(',', $line); $node->hostname ($all[3]); $node->dir_ip ($all[4]); $node->access ($all[5]); $node->user ($user); $node->pass ($pass); $nodes[$counter] = $node; $counter++; } my $size = #nodes; print "\n \n"; print ("array size = $size\n\n"); $counter = 0; while ($counter < 20) { print ($counter,"\n\n"); print ($nodes[$counter]->hostname,"\n"); print ($nodes[$counter]->dir_ip, "\n"); print ($nodes[$counter]->access, "\n"); print ($nodes[$counter]->user, "\n"); print ($nodes[$counter]->pass, "\n\n"); $counter++; } close($fh); The output of this code is a populated array but only with the last element generated in the foreach loop, is there any way to populate this array with the data of the .SH file? Thanks in advance the data of the file is as follows 89,Country,Location,sw01,ip_10,ssh,model,12/8/2020 90,Country,Location,sw02,ip_18,ssh,model,12/8/2020 91,Country,Location,sw03,ip_26,ssh,model,12/8/2020 92,Country,Location,sw04,ip_27,ssh,model,12/8/2020 93,Country,Location,sw05,ip_28,ssh,model,12/8/2020 94,Country,Location,sw06,ip_29,ssh,model,12/8/2020 95,Country,Location,ap02,ip_13,ssh,model,12/8/2020 96,Country,Location,ap03,ip_12,ssh,model,12/8/2020 97,Country,Location,ap04,ip_20,ssh,model,12/8/2020 98,Country,Location,ap05,ip_14,ssh,model,12/8/2020 99,Country,Location,ap06,ip_15,ssh,model,12/8/2020 100,Country,Location,ap07,ip_16,ssh,model,12/8/2020 101,Country,Location,ap08,ip_17,ssh,model,12/8/2020 102,Country,Location,ap09,ip_18,ssh,model,12/8/2020 103,Country,Location,ap10,ip_19,ssh,model,12/8/2020 104,Country,Location,ap11,ip_24,ssh,model,12/8/2020 105,Country,Location,ap12,ip_25,ssh,model,12/8/2020 106,Country,Location,ap14,ip_27,ssh,model,12/8/2020 107,Country,Location,ap15,ip_37,ssh,model,12/8/2020 108,Country,Location,ap17,ip_149,ssh,model,12/8/2020
my $node = Net_Node->new(); ... foreach $line (<$fh>) { ... $nodes[$counter] = $node; } creates a single Net_Node instance and overwrites its data in every iteration of the foreach loop. It sounds like you want to create a new instance for each line of the loop. So you should move your Net_Node->new() call inside the loop. foreach $line (<$fh>) { my $node = Net_Node->new(); ... $nodes[$counter] = $node; } With a simpler data structure like a native Perl hash, you could have appended a copy of the data structure to your list like $nodes[$counter] = { %$node }; but I would be more reluctant to do that with an object, which might not even be represented internally as a hash reference.
Perhaps the code could be implemented in the following shape Comment: define structure of node for readability define an array with descriptive fields of interest read file line by line place temporary the data of interest into a hash create a new node on each iteration fill the node with data from hash store the node in an array generate an output for nodes data #!/usr/bin/env perl # # vim: ai ts=4 sw=4 use strict; use warnings; use feature 'say'; use Class::Struct Net_Node => [ hostname => '$', dir_ip => '$', access => '$', user => '$', pass => '$' ]; my #fields = qw/hostname dir_ip access/; my($user,$pass) = qw/hjack bustalion/; my #nodes; while( <DATA> ) { next if /^$/; # skip empty lines chomp; my %data; my $node = new Net_Node; #data{#fields} = (split(',',$_))[3..5]; $node->hostname( $data{hostname} ); $node->dir_ip( $data{dir_ip} ); $node->access( $data{access} ); $node->user( $user ); $node->pass( $pass ); push #nodes, $node; } say "\nTotal nodes = " . #nodes; my $counter = 10; for my $node ( #nodes ) { last unless $counter--; say " Hostname : " . $node->hostname . " Dir_IP : " . $node->dir_ip . " Access : " . $node->access . " Userid : " . $node->user . " Passwd : " . $node->pass; } __DATA__ 89,Country,Location,sw01,ip_10,ssh,model,12/8/2020 90,Country,Location,sw02,ip_18,ssh,model,12/8/2020 91,Country,Location,sw03,ip_26,ssh,model,12/8/2020 92,Country,Location,sw04,ip_27,ssh,model,12/8/2020 93,Country,Location,sw05,ip_28,ssh,model,12/8/2020 94,Country,Location,sw06,ip_29,ssh,model,12/8/2020 95,Country,Location,ap02,ip_13,ssh,model,12/8/2020 96,Country,Location,ap03,ip_12,ssh,model,12/8/2020 97,Country,Location,ap04,ip_20,ssh,model,12/8/2020 98,Country,Location,ap05,ip_14,ssh,model,12/8/2020 99,Country,Location,ap06,ip_15,ssh,model,12/8/2020 100,Country,Location,ap07,ip_16,ssh,model,12/8/2020 101,Country,Location,ap08,ip_17,ssh,model,12/8/2020 102,Country,Location,ap09,ip_18,ssh,model,12/8/2020 103,Country,Location,ap10,ip_19,ssh,model,12/8/2020 104,Country,Location,ap11,ip_24,ssh,model,12/8/2020 105,Country,Location,ap12,ip_25,ssh,model,12/8/2020 106,Country,Location,ap14,ip_27,ssh,model,12/8/2020 107,Country,Location,ap15,ip_37,ssh,model,12/8/2020 108,Country,Location,ap17,ip_149,ssh,model,12/8/2020 Output Total nodes = 20 Hostname : sw01 Dir_IP : ip_10 Access : ssh Userid : hjack Passwd : bustalion Hostname : sw02 Dir_IP : ip_18 Access : ssh Userid : hjack Passwd : bustalion Hostname : sw03 Dir_IP : ip_26 Access : ssh Userid : hjack Passwd : bustalion Hostname : sw04 Dir_IP : ip_27 Access : ssh Userid : hjack Passwd : bustalion Hostname : sw05 Dir_IP : ip_28 Access : ssh Userid : hjack Passwd : bustalion Hostname : sw06 Dir_IP : ip_29 Access : ssh Userid : hjack Passwd : bustalion Hostname : ap02 Dir_IP : ip_13 Access : ssh Userid : hjack Passwd : bustalion Hostname : ap03 Dir_IP : ip_12 Access : ssh Userid : hjack Passwd : bustalion Hostname : ap04 Dir_IP : ip_20 Access : ssh Userid : hjack Passwd : bustalion Hostname : ap05 Dir_IP : ip_14 Access : ssh Userid : hjack Passwd : bustalion Otherwise a slightly different approach can be taken to achieve similar result without Class::Struct module #!/usr/bin/env perl # # vim: ai ts=4 sw=4 use strict; use warnings; use feature 'say'; my #fields = qw/hostname dir_ip access/; my($user,$pass) = qw/hjack bustalion/; my #nodes; while( <DATA> ) { next if /^$/; chomp; my $node; $node->#{#fields} = (split(',',$_))[3..5]; $node->#{qw/user pass/} = ($user, $pass); push #nodes, $node; } say "\nTotal nodes = " . #nodes; for my $node ( #nodes ) { say " Hostname : " . $node->{hostname} . " Dir_IP : " . $node->{dir_ip} . " Access : " . $node->{access} . " Userid : " . $node->{user} . " Passwd : " . $node->{pass}; } __DATA__ 89,Country,Location,sw01,ip_10,ssh,model,12/8/2020 90,Country,Location,sw02,ip_18,ssh,model,12/8/2020 91,Country,Location,sw03,ip_26,ssh,model,12/8/2020 92,Country,Location,sw04,ip_27,ssh,model,12/8/2020 93,Country,Location,sw05,ip_28,ssh,model,12/8/2020 94,Country,Location,sw06,ip_29,ssh,model,12/8/2020 95,Country,Location,ap02,ip_13,ssh,model,12/8/2020 96,Country,Location,ap03,ip_12,ssh,model,12/8/2020 97,Country,Location,ap04,ip_20,ssh,model,12/8/2020 98,Country,Location,ap05,ip_14,ssh,model,12/8/2020 99,Country,Location,ap06,ip_15,ssh,model,12/8/2020 100,Country,Location,ap07,ip_16,ssh,model,12/8/2020 101,Country,Location,ap08,ip_17,ssh,model,12/8/2020 102,Country,Location,ap09,ip_18,ssh,model,12/8/2020 103,Country,Location,ap10,ip_19,ssh,model,12/8/2020 104,Country,Location,ap11,ip_24,ssh,model,12/8/2020 105,Country,Location,ap12,ip_25,ssh,model,12/8/2020 106,Country,Location,ap14,ip_27,ssh,model,12/8/2020 107,Country,Location,ap15,ip_37,ssh,model,12/8/2020 108,Country,Location,ap17,ip_149,ssh,model,12/8/2020
CakePHP - Saving and serving files outside of webroot
Using Cake version 2.4.3 stable So I am having a time here, I have modified this plug in to save files to the app folder https://github.com/srs81/CakePHP-AjaxMultiUpload/ The uploaded files are being saved to /public_html/app/files Now the strange thing is, when trying to serve these files to the view, I can read the file name, the file size, but not the file itself, image, pdf, etc. When I try to access the file via direct url, i get this error : Error: FilesController could not be found. How can it be that I can read the file name, the file size, but not the file itself? There is a need to save the files in the app folder. These files should be protected and therefore only be accessed by users who are logged into the application. I have tried to use cake send file response with no outcome. Edit : I guess the real question at hand here is how can I read files from APP . DS . 'files' ? View code : public function view ($model, $id, $edit=false) { $results = $this->listing ($model, $id); $directory = $results['directory']; $baseUrl = $results['baseUrl']; $files = $results['files']; $str = "<dt>" . __("Pictures") . "</dt>\n<dd>"; $count = 0; $webroot = Router::url("/") . "ajax_multi_upload"; foreach ($files as $file) { $type = pathinfo($file, PATHINFO_EXTENSION); $filesize = $this->format_bytes (filesize ($file)); $f = basename($file); $url = $baseUrl . "/$f"; if ($edit) { $baseEncFile = base64_encode ($file); $delUrl = "$webroot/uploads/delete/$baseEncFile/"; $str .= "<a href='$delUrl'><img src='" . Router::url("/") . "ajax_multi_upload/img/delete.png' alt='Delete' /></a> "; } $str .= "<img src='$url' /> "; $str .= "<a href='$url'>" . $f . "</a> ($filesize)"; $str .= "<br />\n"; } $str .= "</dd>\n"; return $str; } And the upload / save public function upload($dir=null) { // max file size in bytes $size = Configure::read ('AMU.filesizeMB'); if (strlen($size) < 1) $size = 20; $relPath = Configure::read ('AMU.directory'); if (strlen($relPath) < 1) $relPath = "files"; $sizeLimit = $size * 1024 * 1024; $this->layout = "ajax"; Configure::write('debug', 0); $directory = APP . DS . $relPath; if ($dir === null) { $this->set("result", "{\"error\":\"Upload controller was passed a null value.\"}"); return; } // Replace underscores delimiter with slash $dir = str_replace ("___", "/", $dir); $dir = $directory . DS . "$dir/"; if (!file_exists($dir)) { mkdir($dir, 0777, true); } $uploader = new qqFileUploader($this->allowedExtensions, $sizeLimit); $result = $uploader->handleUpload($dir); $this->set("result", htmlspecialchars(json_encode($result), ENT_NOQUOTES)); } The only real change from the original plug in is changing WWWROOT to APP to make the switch. Saving works fine and lovely. But its just weird that I can read the file name, file size in the view no problem but cannot view an image, pdf, etc.
The problem: You cannot display files that are outside the webroot via a direct URL - that's the whole point in putting them above the webroot in the first place - to make them NOT directly accessible. So building the image src path in the controller first (not good practice anyway) won't change the fact that when that path gets to the browser, and it reads the source of the image as trying to pull an image from above webroot, it won't/can't. The Solution: The solution is to use a CakePHP's Sending files (what used to be Media Views). Then, you set your img's "src" to a controller/action. In that action, it basically says "display this action as an image" (or pdf, or whatever else). Path to use in Controller: took this from one of my apps which is doing exactly the above, and here's the path I used for a file in 'files' (same level as webroot): file_exists(APP . 'files' . DS . $your_filename)
Create a symbolic link to your folder inside of the webroot ;-)
Drupal 7 file module + php ftp function
I am using the file module to get some files from a form locally and upload to another server. When i try to upload large files it gives me timeout error (i have tried changing php.ini but that's not how i want it to work). That's why I am trying to upload the files via ftp functions. However, i cannot get the source path of the file that i just selected to upload (e.g filepath, not uri). I want to pass this filepath into fopen() function as a source. But i keep getting the error: *ftp_nb_fput() [function.ftp-nb-fput]: Can't open that file: No such file or directory in assets_managed_file_form_upload_submit() (line 303 of FILE_DIRECTORY).* function assets_managed_file_form_upload_submit($form, &$form_state) { for ($i = 0; $i < $form_state['num_files']; $i++) { if ($form_state['values']['files_fieldset']['managed_field'][$i] != 0) { // Make the file permanent. $file = file_load($form_state['values']['files_fieldset']['managed_field'][$i]); $local_path = file_create_url($file->uri); //drupal_set_message(t("file->uri: " . $file->uri . " local path: " . $local_path)); $file->status = FILE_STATUS_PERMANENT; $directory = 'private://cubbyhouse/'. $form_state['values']['allowed_user']; file_prepare_directory($directory, FILE_CREATE_DIRECTORY); $source = fopen($local_path,"r"); $conn = ftp_connect("FTP SERVER") or die("Could not connect"); ftp_login($conn,"USERNAME", "PASS"); $ftp_directory = TheDirectoryIwantToPutTheFile . $form_state['values']['allowed_user']; $uri_parts = explode("/",$file->uri); $filename = $uri_parts[sizeof($uri_parts)-1]; $target = $ftp_directory . "/" . $filename; //drupal_set_message(t($target . " " . $file->uri)); $ret = ftp_nb_fput($conn,$target,$source,FTP_ASCII); while ($ret == FTP_MOREDATA) { // Do whatever you want //echo "."; // Continue upload... $ret = ftp_nb_continue($conn); } ftp_close($conn); //$file->uri = file_unmanaged_copy($file->uri, $directory, FILE_EXISTS_REPLACE); $file->uid = $form_state['values']['allowed_user']; drupal_chmod($file->uri); file_save($file); // Need to add an entry in the file_usage table. file_usage_add($file, 'assets', 'image', 1); drupal_set_message(t("Your file has been uploaded!")); } } }
I solved the problem. The problem was mainly because I gave the wrong path as the target. it had to be /public_html/...... instead of /home/our_name/public_html
how to perform cron job in cakephp?
# Cron Job for Cakephp # I have create 1 file cron_scheduler.php which is copy of wamp/www/projectname/app/webroot/index.php file and it is also in the same folder i have tried to run throw command prompt but didn't get any result. how to run cronjob for Cakephp ? i don't have any idea if anyone knows , please help me. Thanks in advance. <?php if (!defined('DS')) { define('DS', DIRECTORY_SEPARATOR); } /** * These defines should only be edited if you have cake installed in * a directory layout other than the way it is distributed. * Each define has a commented line of code that explains what you would change. * */ if (!defined('ROOT')) { //define('ROOT', 'FULL PATH TO DIRECTORY WHERE APP DIRECTORY IS //LOCATED DO NOT ADD A TRAILING DIRECTORY SEPARATOR'; //You should also use the DS define to seperate your directories define('ROOT', dirname(dirname(__FILE__))); } if (!defined('APP_DIR')) { //define('APP_DIR', 'DIRECTORY NAME OF APPLICATION'; define('APP_DIR', basename(dirname(__FILE__))); } /** * This only needs to be changed if the cake installed libs are located * outside of the distributed directory structure. */ if (!defined('CAKE_CORE_INCLUDE_PATH')) { //define ('CAKE_CORE_INCLUDE_PATH', FULL PATH TO DIRECTORY WHERE //CAKE CORE IS INSTALLED DO NOT ADD A TRAILING DIRECTORY SEPARATOR'; //You should also use the DS define to seperate your directories define('CAKE_CORE_INCLUDE_PATH', ROOT); } /////////////////////////////// //DO NOT EDIT BELOW THIS LINE// /////////////////////////////// if (!defined('WEBROOT_DIR')) { define('WEBROOT_DIR', 'webroot'); } if (!defined('WWW_ROOT')) { //define('WWW_ROOT', dirname(__FILE__) . DS); define('WWW_ROOT', dirname(__FILE__) . DS . 'webroot' . DS); } if (!defined('CORE_PATH')) { if (function_exists('ini_set')) { ini_set('include_path', CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path')); define('APP_PATH', null); define('CORE_PATH', null); } else { define('APP_PATH', ROOT . DS . APP_DIR . DS); define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS); } } require CORE_PATH . 'cake' . DS . 'bootstrap.php'; define('CRON_DISPATCHER',true); if($argc == 2) { $Dispatcher= new Dispatcher(); $Dispatcher->dispatch($argv[1]); } ?> > i have tried to run throw command promt but didn't get any result > how to run cronjob for Cakephp ? i don't have any idea if anyone knows , please help me. Thanks
Step1: Create a shell file with name ReminderShell.php and Path should be PROJECT_DIR_PATH/PROJECT_NAME/app/Console/Command/ReminderShell.php Copy below script and paste it class ReminderShell extends Shell { var $tasks = array('Mail'); function main() { $this->Mail->enroll_reminder(); } } Step2: Create Task file with name MailTask.php and path should be PROJECT_DIR_PATH/PROJECT_NAME/app/Console/Command/Task/MailTask.php <?php App::uses('CakeEmail', 'Network/Email'); class MailTask extends Shell { var $uses = array('Contact'); public function enroll_reminder() { $Email = new CakeEmail(); $Email->config('default'); $reminder = $this->Contact->find('all'); if (!empty($reminder)) { foreach ($reminder as $val) { $id = $val['Contact']['id']; $name = $val['Contact']['first_name']; $email = $val['Contact']['email']; $Email->template('reminder') ->viewVars(array('fname' => $name)) ->emailFormat('html') ->subject('xyz.com: Enrollment Reminder') ->to($email) ->from('noreply#xyz.com'); if ($Email->send()) { $update_val['Contact']['id'] = $id; $update_val['Contact']['enroll_reminder'] = 'sent'; $update_val['Contact']['enroll_reminder_date'] = date("Y-m-d H:i:s"); $this->Contact->save($update_val['Contact']); $this->out($email.' Mail Sent'); } } } } Step3: Create a email template with name reminder.ctp and path should be PROJECT_DIR_PATH/PROJECT_NAME/app/View/Emails/html/reminder.ctp Step4: Create email.php in config directory Step5: Run below command in Terminal: Console/cake Reminder PROJECT_DIR_PATH/PROJECT_NAME/app Console/cake Reminder For complete files checkout from https://github.com/pankajkumarjha2010/cronjob-in-cakephp2.3.x
For cronjobs in CakePHP, you may have a look at http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html. This works fine for me. But please note, sometimes there are not all the environmental parameters available. I ran into this problem when accessing env('HTTP_HOST') within the cronjob methods. But when considering this, it should be no problem.
How to send email after registering
After that someone registers in a site, a mail is usually sent to his mail account. But to generate this link or what info can be placed in this link so that it can be used to activate the user account??
you can place any thing which can identify a valid user 1- A Hash Value 2- An Encrypted String 3- A Guid and when user clicks on the link , you can validate the value.
Check this part of code: Generate code and e-mail: /* if $acces = 0 everything is perfect so the system send a confirmation mail */ if($acces == 0) { print("<br>A mail has been send to " . $mail . "<br><br>") ; /* prepare the vars */ $activ = $user . $pass ; $code = md5($activ) ; /* to how send to mail */ $to = $mail ; /* prepare the subject */ $subject = "You need to confirm you registration to " . $_SERVER['HTTP_HOST'] ; /* start writing the message */ $message = "Hello " . $user . ",\r\n\r\n" ; $message .= "Thank you for registering at " . $_SERVER['HTTP_HOST'] . " Your account is created and must be activated before you can use it.\r\n" ; $message .= "To activate the account click on the following link or copy-paste it in your browser :\r\n\r\n" ; $message .= "http://" . $_SERVER['HTTP_HOST'] . "/~carron/registration/register_send.php?user=" . $user . "&activation=" . $code . "\r\n\r\n" ; $message .= "After activation you may login to http://" . $_SERVER['HTTP_HOST'] . " using the following username and password:\r\n\r\n" ; $message .= "Username - " . $user . "\r\nPassword - " . $pass . "\r\n" ; /* To send HTML mail, you can set the Content-type header. */ $headers = "MIME-Version: 1.0"; $headers .= "Content-type: text/html; charset=iso-8859-1"; /* set up additional headers */ $headers .= "To: " . $to . "<br>\n" ; $headers .= "From: " . $from . $addmail ; /* writing data in the base */ $query = "INSERT INTO registration (user, pass, activ, mail) VALUES ('$user', '$pass', '$code', '$mail') ;" ; $result = mysql_query($query, $db); if ($result == false) die("Failed " . $query); else { /* everything went well so we can mail it now */ mail($to, $subject, $message, $headers); } } Check activation: /* controle if the validation link is right */ $x = 0 ; $query = "SELECT user, pass, activ, mail FROM registration WHERE user = '" . $username . "';" ; $result = mysql_query($query, $db); if ($result == false) die("Failed " . $query); while ($fields = mysql_fetch_row($result)) { for ($i=0, $max=sizeof($fields) ; $i < $max ; $i++) { $tmp[$i] = $fields[$i] ; } /* the activation link is right so we can update the datas in the data base */ if($activation == $tmp[2] AND $username == $tmp[0]) { $x = 1 ; $query2 = "UPDATE registration SET activated = '1' WHERE user = '" . $username . "' AND activ = '" . $activation . "' ;" ; $result2 = mysql_query($query2, $db); if ($result2 == false) die("Failed " . $query2); } else $x = -1 ; } /* give a confirmation message to the user */ if($x == 1) print($username . " your activation has been done perfectly<br> Thank you...") ; else print($username . " your activation has not been done corectly<br> Please try again later...") ; Script from PHPclasses.org
The idea is to have a link that only the recipient of the email knows. So when that link is visited on your site, you know that someone has read the email you sent and clicked on the link and so you can presume that the person who registered and the person who read the email are the same. As such, you just need a link that can't be easily guessed. Pick something random (and record it in the user's profile) or hash the user name + a seed, or something.
When user registered, you can use uniqid() to create an activate code and stored in database. Then in mail, give a link like: http://....../activate.php?code=[uniqid()] In activate.php, you can read activate code from database and check it.