簡體   English   中英

在 PHP 中創建關聯 URL

[英]Create affliate URL in PHP

我正在嘗試創建一個像http://example.com/ref/referrer這樣的附屬網址。

我有 2 個 php 文件和一個 .htaccess 文件。 我有一個名為“referral”的數據庫表,它將用戶的用戶名存儲在名為“referrer”的字段中。

索引.php

<?php
$conn = new mysqli($servername, $username, $password, $dbname);
$query = "SELECT referrer FROM referral";
$result = $conn->query($query);
$ref=mysqli_fetch_array($result);
$referrer=$ref['referrer'];

//Create referral URL
$refurl="http://example.com/ref/$referrer";
?>

Welcome.php (通過引用鏈接訪問站點的人的登陸頁面)。

<?php
$referrer=mysqli_real_escape_string($con,$_GET["referrer"]);
$counted = "clicks"; 
//select user
$query="SELECT * FROM referral WHERE referrer='$referrer'";
$result=mysqli_query($con,$query) or die('error');
$user_ref=mysqli_fetch_array($result);
$user=$user_ref['user'];

if(!isset($_COOKIE[$counted])) { 

    //cookie for visitor
    setcookie("clicks", $counted, time() + (86400 * 7), "/refer/"); //7days

    //page view Counts
    $sql = "UPDATE referral SET clicks=clicks+1 WHERE referrer='$referrer'";
    $result_set=mysqli_query($con, $sql);
}
if($user_ref == false) {
    echo 'Sorry, the user does not exist.';
} else {  
    echo You were referred by $user;  
?>

.htaccess 文件

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ welcome.php?referrer=$1

問題是推薦網址不起作用。 單擊時,它應該加載歡迎頁面,但它沒有。 請有人告訴我我做錯了什么或錯過了什么?

看起來這是您的 mod-rewrite 語句。 ^([a-zA-Z0-9_-]+)$將不匹配/ref/myrefcode01 你可以試試^ref/([a-zA-Z0-9_-]+)$

將 url 加載到字符串變量中不是重定向!

您需要使用header()函數調用進行重定向

<?php
$conn = new mysqli($servername, $username, $password, $dbname);
$query = "SELECT referrer FROM referrals";
$result = $conn->query($query);
$ref=mysqli_fetch_array($result);
$referrer=$ref['referrer'];

//Create referral URL
$refurl="http://example.com/ref/$referrer";

// Now you have to tell PHP to redirect to this other page
header("Location: $refurl");
?>

根據@RiggsFolly 和@UTAlan 的建議,為了可能需要相同解決方案的其他人,這是我為使其工作所做的工作。

在您的數據庫中運行以下查詢

CREATE TABLE IF NOT EXISTS `referral` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(500) NOT NULL,
  `referrer` varchar(500) NOT NULL,
  `clicks` int(11) DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `user` (`user`,`referrer`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

數據庫文件

<?php
session_start();
error_reporting(0);
$dbhost = 'localhost';
$dbuser = 'admin';
$dbpass = 'password';
$dbname = 'my_database';

$con=mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) //connect to the database server
or die ("Could not connect to mysql because ".mysqli_error());
mysqli_select_db($con,$dbname) //select the database
or die ("Could not select to mysql because ".mysqli_error());
?>

索引.php

<?php
include('db.php');
$conn = new mysqli($servername, $username, $password, $dbname);
$query = "SELECT referrer FROM referral";
$result = $conn->query($query);
$ref=mysqli_fetch_array($result);
$referrer=$ref['referrer'];

//Create referral URL
$refurl="http://example.com/ref/$referrer";
//redirect to welcome page
header("Location: $refurl");
}
?>

Welcome.php //通過推薦鏈接訪問網站的人的登陸頁面

<?php
include('db.php');
$referrer=mysqli_real_escape_string($con,$_GET["referrer"]);
$counted = "clicks"; 
//select user
$query="SELECT * FROM referral WHERE referrer='$referrer'";
$result=mysqli_query($con,$query) or die('error');
$user_ref=mysqli_fetch_array($result);
$user=$user_ref['user'];

if(!isset($_COOKIE[$counted])) { 

    //cookie for visitor
    setcookie("clicks", $counted, time() + (86400 * 7), "/ref/"); //7days

    //page view Counts
    $sql = "UPDATE referral SET clicks=clicks+1 WHERE referrer='$referrer'";
    $result_set=mysqli_query($con, $sql);
}
if($user_ref == false) {
    echo 'Sorry, the user does not exist.';
} else {  
    echo 'You were referred by $user';  
?>

.htaccess 文件

RewriteEngine On
RewriteRule ^ref/([a-zA-Z0-9_-]+)$ welcome.php?referrer=$1 

感謝 AllWebTuts ( http://allwebtuts.com ) 的 Santhosh Veer 的洞察力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM