PHP之用户验证和标签推荐的简单使用
本篇主要是讲解一些最简单的验证知识
效果图

bookmark_fns.php
data_valid_fns.php
<?php
// Test that each variable has a value
function filled_out(\(form_vars) {
foreach (\)form_vars as $key => \(value) {
if ((!isset(\)key)) || ($value == '')) {
return false;
}
}
return true;
}
// Valid email
function valid_email(\(address) {
if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+\)', $address)) {
return true;
}else {
return false;
}
}
?>
db_fns.php
<?php
//Conncet to db
function db_connect() {
\(db = new mysqli('127.0.0.1', 'bm_user', 'password', 'bookmarks');
if (!\)db) {
throw new Exception("Could not connect to database server", 1);
}else {
return $db;
}
}
?>
user_auth_fns.php
<?php
require_once('db_fns.php');
// register
function register($username, $email, $password) {
$conn = db_connect();
$results = \(conn -> query("select * from user where username = '".\)username."'");
if (!$results) {
throw new Exception("Could not execute query", 1);
}
if ($results -> num_rows > 0) {
throw new Exception("That username is taken - go back and choose another one.", 1);
}
$results = \(conn -> query("insert into user values ('".\)username."', sha1('".\(email."'), '".\)password."')");
if (!$results) {
throw new Exception('Could not register you in database - please try again later.');
}
return true;
}
// Log in
function login($username, $password) {
$conn = db_connect();
$results = \(conn -> query("select * from user where username = '".\)username."' and passwd = sha1('".$password."')");
if (!$results) {
throw new Exception('Could not log you in.');
}
if ($results -> num_rows > 0) {
return true;
}else {
throw new Exception('Could not log you in.');
}
}
// Check valid user
function check_valid_user() {
if (isset(\(_SESSION['valid_user'])) {
echo "Logged in as ".\)_SESSION['valid_user'].".
";
}else {
do_html_header('Problem:');
echo "You are not logged in.
";
do_html_url('login.php', 'Login');
do_html_foot();
exit;
}
}
// change password
function change_password($username, $old_password, \(new_password) {
login(\)username, $old_password);
$conn = db_connect();
$result = \(conn -> query("update user set passwd = sha1('".\)new_password."') where username = '".$username."'");
if (!$result) {
throw new Exception('Password could not be changed.');
} else {
return true; // changed successfully
}
}
function get_random_word($min_length, $max_length) {
// grab a random word from dictionary between the two lengths
// and return it
// generate a random word
$word = '';
// remember to change this path to suit your system
$dictionary = '/usr/dict/words'; // the ispell dictionary
\(fp = @fopen(\)dictionary, 'r');
if(!$fp) {
return false;
}
\(size = filesize(\)dictionary);
// go to a random location in dictionary
$rand_location = rand(0, \(size);
fseek(\)fp, $rand_location);
// get the next whole word of the right length in the file
while ((strlen($word) < \(min_length) || (strlen(\)word)>\(max_length) || (strstr(\)word, "'"))) {
if (feof(\(fp)) {
fseek(\)fp, 0); // if at end, go to start
}
\(word = fgets(\)fp, 80); // skip first word as it could be partial
\(word = fgets(\)fp, 80); // the potential password
}
\(word = trim(\)word); // trim the trailing \n from fgets
return $word;
}
function reset_password($username) {
// set password for username to a random value
// return the new password or false on failure
// get a random dictionary word b/w 6 and 13 chars in length
$new_password = get_random_word(6, 13);
if($new_password == false) {
throw new Exception('Could not generate new password.');
}
// add a number between 0 and 999 to it
// to make it a slightly better password
$rand_number = rand(0, 999);
$new_password .= $rand_number;
// set user's password to this in database or return false
$conn = db_connect();
$result = \(conn->query("update user
set passwd = sha1('".\)new_password."')
where username = '".\(username."'");
if (!\)result) {
throw new Exception('Could not change password.'); // not changed
} else {
return $new_password; // changed successfully
}
}
function notify_password($username, $password) {
// notify the user that their password has been changed
$conn = db_connect();
$result = \(conn->query("select email from user
where username='".\)username."'");
if (!\(result) {
throw new Exception('Could not find email address.');
} else if (\)result->num_rows == 0) {
throw new Exception('Could not find email address.');
// username not in db
} else {
$row = $result->fetch_object();
$email = $row->email;
$from = "From: support@phpbookmark \r\n";
\(mesg = "Your PHPBookmark password has been changed to ".\)password."\r\n"
."Please change it next time you log in.\r\n";
if (mail($email, 'PHPBookmark login information', $mesg, $from)) {
return true;
} else {
throw new Exception('Could not send email.');
}
}
}
?>
url_fns.php
<?php
require_once('db_fns.php');
// Get user urls
function get_user_urls($username) {
$conn = db_connect();
$results = $conn -> query("select bm_URL
from bookmark
where username = '" . $username . "'");
if (!$results) {
return false;
}
\(url_array = array();
for (\)i = 1;$row = \(results -> fetch_row();++\)i) {
\(url_array[\)i] = $row[0];
}
return $url_array;
}
// Add url to db
function add_bm(\(new_url) {
echo "Attempting to add ".htmlspecialchars(\)new_url)."
";
$valid_user = $_SESSION['valid_user'];
$conn = db_connect();
$results = \(conn -> query(" select * from bookmark
where username = '".\)valid_user."'
and bm_URL = '".$new_url."'");
if (\(results && (\)results -> num_rows > 0)) {
throw new Exception("Bookmark already exists.", 1);
}
$insert_result = \(conn -> query("insert into bookmark values ('".\)valid_user."', '".addslashes($new_url)."')");
if (!$insert_result) {
throw new Exception("Bookmark could not be inserted.", 1);
}
return true;
}
// Delete url
function delete_bm($user, $url) {
$conn = db_connect();
$results = \(conn -> query(" delete from bookmark
where username = '".\)user."'
and bm_URL = '".\(url."'");
if (!\)results) {
throw new Exception("Bookmark could not be deleted.", 1);
}
return true;
}
function recommend_urls($valid_user, $popularity = 1) {
$conn = db_connect();
// \(query = "select bm_URL
// from bookmark
// where username in
// (select distinct(b2.username)
// from bookmark b1, bookmark b2
// where b1.username='".\)valid_user."'
// and b1.username != b2.username
// and b1.bm_URL = b2.bm_URL)
// and bm_URL not in
// (select bm_URL
// from bookmark
// where username='".\(valid_user."')
// group by bm_url
// having count(bm_url)>".\)popularity;
\(query = "select bm_URL
from bookmark
where username in
(select distinct(b2.username)
from bookmark b1, bookmark b2
where b1.username='".\)valid_user."'
and b1.username != b2.username
and b1.bm_URL = b2.bm_URL)
and bm_URL not in
(select bm_URL
from bookmark
where username='".\(valid_user."')
group by bm_url
having count(bm_url)>".\)popularity;
if (!($result = \(conn->query(\)query))) {
throw new Exception('Could not find any bookmarks to recommend.');
}
if ($result->num_rows==0) {
throw new Exception('Could not find any bookmarks to recommend.');
}
\(urls = array(); // build an array of the relevant urls for (\)count=0; $row = $result->fetch_object(); $count++) {
\(urls[\)count] = $row->bm_URL;
}
return $urls;
}
?>
output_fns.php
<?php
function do_html_header($title) {
// print an HTML header
?>

PHPbookmark
<?php
if(\(title) { do_html_heading(\)title);
}
}
function do_html_footer() {
// print an HTML footer
?>
<?php
}
function do_html_heading($heading) {
// print heading
?>
<?php
}
function do_html_URL($url, $name) {
// output URL as link and br
?>
<?php
}
function display_site_info() {
// display some marketing info
?>
- Store your bookmarks online with us!
- See what other users use!
- Share your favorite links with others!
<?php
}
function display_login_form() {
?>
<?php
}
function display_registration_form() {
?>
<?php
}
function display_user_urls($url_array) {
// display the table of URLs
// set global variable, so we can test later if this is on the page
global $bm_table;
$bm_table = true;
?>
<?php
}
function display_user_menu() {
// display the menu options on this page
?>
Home |
Add BM |
Delete BM | "; } else { echo "Delete BM | "; } ?>
Change password
Recommend URLs to me |
Logout
<?php
}
function display_add_bm_form() {
// display the form for people to ener a new bookmark in
?>
<?php
}
function display_password_form() {
// display html change password form
?>

浙公网安备 33010602011771号