PHP用户验证和标签推荐的简单使用
author:一佰互联 2019-04-26   click:169

本文给大家讲解一些最简单的验证知识。大家可以先看下效果图,如果大家感觉还不错,请参考实现代码。

效果图

bookmark_fns.php

<?php
require_once("output_fns.php");
require_once("db_fns.php");
require_once("data_valid_fns.php");
require_once("url_fns.php");
require_once("user_auth_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"].".<br />";
}else {
do_html_header("Problem:");
echo "You are not logged in.<br />";
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 
 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 
";
$mesg = "Your PHPBookmark password has been changed to ".$password."
"
."Please change it next time you log in.
";
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)."<br />";
$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
?>
<html>
<head>
<title><?php echo $title;?></title>
<style>
body { font-family: Arial, Helvetica, sans-serif; font-size: 13px }
li, td { font-family: Arial, Helvetica, sans-serif; font-size: 13px }
hr { color: #3333cc; width=300; text-align=left}
a { color: #000000 }
</style>
</head>
<body>
<img src="005.png" alt="PHPbookmark logo" border="0"
align="left" valign="bottom" height="55" width="57" />
<h1>PHPbookmark</h1>
<hr />
<?php
if($title) {
do_html_heading($title);
}
}
function do_html_footer() {
// print an HTML footer
?>
</body>
</html>
<?php
}
function do_html_heading($heading) {
// print heading
?>
<h2><?php echo $heading;?></h2>
<?php
}
function do_html_URL($url, $name) {
// output URL as link and br
?>
<br /><a href="<?php echo $url;?>"><?php echo $name;?></a><br />
<?php
}
function display_site_info() {
// display some marketing info
?>
<ul>
<li>Store your bookmarks online with us!</li>
<li>See what other users use!</li>
<li>Share your favorite links with others!</li>
</ul>
<?php
}
function display_login_form() {
?>
<p><a href="register_form.php">Not a member?</a></p>
<form method="post" action="member.php">
<table bgcolor="#cccccc">
<tr>
<td colspan="2">Members log in here:</td>
<tr>
<td>Username:</td>
<td><input type="text" name="username"/></td></tr>
<tr>
<td>Password:</td>
<td><input type="password" name="passwd"/></td></tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Log in"/></td></tr>
<tr>
<td colspan="2"><a href="forgot_form.php">Forgot your password?</a></td>
</tr>
</table></form>
<?php
}
function display_registration_form() {
?>
<form method="post" action="register_new.php">
<table bgcolor="#cccccc">
<tr>
<td>Email address:</td>
<td><input type="text" name="email" size="30" maxlength="100"/></td></tr>
<tr>
<td>Preferred username <br />(max 16 chars):</td>
<td valign="top"><input type="text" name="username"
size="16" maxlength="16"/></td></tr>
<tr>
<td>Password <br />(between 6 and 16 chars):</td>
<td valign="top"><input type="password" name="passwd"
size="16" maxlength="16"/></td></tr>
<tr>
<td>Confirm password:</td>
<td><input type="password" name="passwd2" size="16" maxlength="16"/></td></tr>
<tr>
<td colspan=2 align="center">
<input type="submit" value="Register"></td></tr>
</table></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;
?>
<br />
<form name="bm_table" action="delete_bms.php" method="post">
<table width="300" cellpadding="2" cellspacing="0">
<?php
$color = "#cccccc";
echo "<tr bgcolor="".$color.""><td><strong>Bookmark</strong></td>";
echo "<td><strong>Delete?</strong></td></tr>";
if ((is_array($url_array)) && (count($url_array) > 0)) {
foreach ($url_array as $url) {
if ($color == "#cccccc") {
$color = "#ffffff";
} else {
$color = "#cccccc";
}
//remember to call htmlspecialchars() when we are displaying user data
echo "<tr bgcolor="".$color.""><td><a href="".$url."">".htmlspecialchars($url)."</a></td>
<td><input type="checkbox" name="del_me[]"
value="".$url.""/></td>
</tr>";
}
} else {
echo "<tr><td>No bookmarks on record</td></tr>";
}
?>
</table>
</form>
<?php
}
function display_user_menu() {
// display the menu options on this page
?>
<hr />
<a href="member.php">Home</a>  | 
<a href="add_bm_form.php">Add BM</a>  | 
<?php
// only offer the delete option if bookmark table is on this page
global $bm_table;
if ($bm_table == true) {
echo "<a href="#" onClick="bm_table.submit();">Delete BM</a>  | ";
} else {
echo "<span style="color: #cccccc">Delete BM</span>  | ";
}
?>
<a href="change_passwd_form.php">Change password</a>
<br />
<a href="recommend.php">Recommend URLs to me</a>  | 
<a href="logout.php">Logout</a>
<hr />
<?php
}
function display_add_bm_form() {
// display the form for people to ener a new bookmark in
?>
<form name="bm_table" action="add_bms.php" method="post">
<table width="250" cellpadding="2" cellspacing="0" bgcolor="#cccccc">
<tr><td>New BM:</td>
<td><input type="text" name="new_url" value="http://"
size="30" maxlength="255"/></td></tr>
<tr><td colspan="2" align="center">
<input type="submit" value="Add bookmark"/></td></tr>
</table>
</form>
<?php
}
function display_password_form() {
// display html change password form
?>
<br />
<form action="change_passwd.php" method="post">
<table width="250" cellpadding="2" cellspacing="0" bgcolor="#cccccc">
<tr><td>Old password:</td>
<td><input type="password" name="old_passwd"
size="16" maxlength="16"/></td>
</tr>
<tr><td>New password:</td>
<td><input type="password" name="new_passwd"
size="16" maxlength="16"/></td>
</tr>
<tr><td>Repeat new password:</td>
<td><input type="password" name="new_passwd2"
size="16" maxlength="16"/></td>
</tr>
<tr><td colspan="2" align="center">
<input type="submit" value="Change password"/>
</td></tr>
</table>
<br />
<?php
}
function display_forgot_form() {
// display HTML form to reset and email password
?>
<br />
<form action="forgot_passwd.php" method="post">
<table width="250" cellpadding="2" cellspacing="0" bgcolor="#cccccc">
<tr><td>Enter your username</td>
<td><input type="text" name="username" size="16" maxlength="16"/></td>
</tr>
<tr><td colspan=2 align="center">
<input type="submit" value="Change password"/>
</td></tr>
</table>
<br />
<?php
}
function display_recommended_urls($url_array) {
// similar output to display_user_urls
// instead of displaying the users bookmarks, display recomendation
?>
<br />
<table width="300" cellpadding="2" cellspacing="0">
<?php
$color = "#cccccc";
echo "<tr bgcolor="".$color."">
<td><strong>Recommendations</strong></td></tr>";
if ((is_array($url_array)) && (count($url_array)>0)) {
foreach ($url_array as $url) {
if ($color == "#cccccc") {
$color = "#ffffff";
} else {
$color = "#cccccc";
}
echo "<tr bgcolor="".$color."">
<td><a href="".$url."">".htmlspecialchars($url)."</a></td></tr>";
}
} else {
echo "<tr><td>No recommendations for you today.</td></tr>";
}
?>
</table>
<?php
}
?>
login.php
<?php
require_once("bookmark_fns.php");
do_html_header("");
display_site_info();
display_login_form();
do_html_footer();
?>
logout.php
<?php

require_once("bookmark_fns.php");

// start session
session_start();
$old_user = $_SESSION["valid_user"];
unset($_SESSION["valid_user"]);
$result_dest = session_destroy();
do_html_header("Logging out");
if (!empty($old_user)) {
if ($result_dest) {
echo "Logged out.<br />";
do_html_url("login.php", "Login");
}else {
echo "Could not log you out.<br />";
}
}else {
echo "You are not logged in ,so have not been logged out.<br />";
do_html_url("login.php", "Login");
}
do_html_footer();
?>

register_form.php

<?php
require_once("bookmark_fns.php");
do_html_header("User Registration");
display_registration_form();
do_html_footer();
?>
register_new.php
<?php
require_once("bookmark_fns.php");
// vars
$email = $_POST["email"];
$username = $_POST["username"];
$passwd = $_POST["passwd"];
$passwd2 = $_POST["passwd2"];
// start session
session_start();
// valid data 
try {
if (!filled_out($_POST)) {
throw new Exception("You have not filled the form out correctly - please go back and try again.", 1);
}
if (!valid_email($email)) { 
throw new Exception("That is not a valid email address - please go back and try again.", 1);
}
if ($passwd != $passwd2) { 
throw new Exception("The passwords you entered do not match - please go back and try again.", 1);
}
if ((strlen($passwd) < 6) || (strlen($passwd) > 16)) { 
throw new Exception("Your password must be between 6 and 16 characters - please go back and try again.", 1);
}
register($username, $passwd, $email);
$_SESSION["valid_user"] = $username;
do_html_header("Rigistration successful");
do_html_url("member.php", "Go to members page");
do_html_footer();
} catch (Exception $e) {
do_html_header("Problem: ");
echo $e -> getMessage();
do_html_footer();
exit();
}
?>

forgot_form.php

<?php
require_once("bookmark_fns.php");
do_html_header("Reset password");
display_forgot_form();
do_html_footer();
?>
forgot_passwd.php
<?php
require_once("bookmark_fns.php");
do_html_header("Resetting password");
$username = $_POST["username"];
try {
// get random password 
$password = reset_password($username);
notify_password($username, $password);
echo "Your new password has been emailed to you.<br />";
}catch(Exception $e){
echo "Your password could not be reset - please try again later.";
}
do_html_url("login.php", "Login");
do_html_footer();
?>
change_passwd_form.php
<?php
require_once("bookmark_fns.php");
session_start();
do_html_header("Change password");
check_valid_user();
display_password_form();
display_user_menu(); 
do_html_footer();
?>
change_passed.php
<?php
require_once("bookmark_fns.php");
session_start();
do_html_header("Changing password");
$old_passwd = $_POST["old_passwd"];
$new_passwd = $_POST["new_passwd"];
$new_passwd2 = $_POST["new_passwd2"];
try {
check_valid_user();
if (!filled_out($_POST)) {
throw new Exception("You have not filled the form out correctly - please go back and try again.", 1);
}
if ($new_passwd != $new_passwd2) { 
throw new Exception("The passwords you entered do not match - please go back and try again.", 1);
}
if ((strlen($new_passwd) < 6) || (strlen($new_passwd) > 16)) { 
throw new Exception("Your password must be between 6 and 16 characters - please go back and try again.", 1);
}
change_password($_SESSION["valid_user"], $old_passwd, $new_passwd2);
echo "Password changed.";
}catch(Exception $e) {
echo $e -> getMessage();
}
display_user_menu(); 
do_html_footer();
?>
add_bm_form.php
<?php
// include function files for this application
require_once("bookmark_fns.php");
session_start();
// start output html
do_html_header("Add Bookmarks");
check_valid_user();
display_add_bm_form();
display_user_menu();
do_html_footer();
?>

add_bms.php

<?php
require_once("bookmark_fns.php");
session_start();
$new_url = $_POST["new_url"];
do_html_header("Adding bookmarks");
try {
check_valid_user();
if (!filled_out($_POST)) {
throw new Exception("Form not completely filled out.");
} 
if (strstr($new_url, "http://") === false) {
$new_url = "http://".$new_url;
} 
// check url is valid
if (!@fopen($new_url, "r")) {
throw new Exception("Not a valid URL.");
} 
add_bm($new_url);
echo "Bookmark added";
if ($mks = get_user_urls($_SESSION["valid_user"])) {
display_user_urls($mks);
}
}catch(Exception $e) {
echo $e -> getMessage();
}
display_user_menu();
do_html_footer();
?>

delete_bms.php

<?php
require_once("bookmark_fns.php");
session_start();
$del_me = $_POST["del_me"];
$valid_user = $_SESSION["valid_user"];
do_html_header("Deleting bookmarks");
check_valid_user();
if (!filled_out($_POST)) {
echo "<p>You have not chosen any bookmarks to delete.<br />
Please try again.</p>";
display_user_menu();
do_html_footer();
exit;
}else {
if (count($del_me) > 0) {
foreach ($del_me as $url) {
if (delete_bm($valid_user, $url)) {
echo "Deleted ".htmlspecialchars($url)."<br />";
}else {
echo "Could not deleted ".htmlspecialchars($url)."<br />";
}
}
}else {
echo "No bookmarks selected for deletion.";
}
}
if ($mks = get_user_urls($_SESSION["valid_user"])) {
display_user_urls($mks);
}
display_user_menu();
do_html_footer();
?>

recommend.php

<?php
require_once("bookmark_fns.php");

session_start();
do_html_header("Recommending URLS");
try {
check_valid_user();
$urls = recommend_urls($_SESSION["valid_user"], 1);
display_recommended_urls($urls);
}catch(Exception $e) {
echo $e -> getMessage();
}
display_user_menu();
do_html_footer();
?>

member.php

<?php
require_once("bookmark_fns.php");
session_start();
@$username = $_POST["username"];
@$passwd = $_POST["passwd"];
if ($username && $passwd) {
try {
// Log in 
login($username, $passwd);
$_SESSION["valid_user"] = $username;
}catch(Exception $e) {
do_html_header("Problem: ");
echo "You could not be logged in. You must be logged in to view this page.";
do_html_url("login.php", "Login");
do_html_footer();
exit;
}
}
do_html_header("Home");
check_valid_user();
if ($url_array = get_user_urls($_SESSION["valid_user"])) {
display_user_urls($url_array);
}
display_user_menu();
do_html_footer();
?>

以上所述是小编给大家介绍的PHP用户验证和标签推荐的简单使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网页设计网站的支持!