1

Тема: Генеруємо одноразові посилання

Доброго дня я тепер сижу з задачков як розробити  одноразові посилання наприклад для розсилки знайшов посилання http://ruseller.com/lessons.php?rub_id=37&id=1705 але дуже багато помилок і стаття устарівша можливо є книги в якій ця тема є або посилання вже сижу 2 дня.

2

Re: Генеруємо одноразові посилання

наскільки я зрозумів це має бути посилання по якому ви можете зайти тільки один раз?
Якщо так тоді тут все дуже просто. В базі зберігаємо наприклад унікальні номери. Після того як відкрили посилання видаляємо цей номер з бази або записуємо йому статус "переглянули  - дата" і тоді наступного разу якщо хтось відкриває посилання вказуємо що його не знайдено ;)

Подякували: koala1

3

Re: Генеруємо одноразові посилання

Щось зрозумів але не все у Вас є книга в якій розписаний цей код хочу подивити але попробую зробити по Вашим словам

4

Re: Генеруємо одноразові посилання

Книги немає, можу так розписати ;)

5

Re: Генеруємо одноразові посилання

Давайте так розпешіть

6

Re: Генеруємо одноразові посилання

в першу чергу, як у вас буде генурватись список урл
1. народ заходить до вас на сайт і створює посилання
2. ви самі генеруєте тимчасові посилання

7

Re: Генеруємо одноразові посилання

зараз скину сюда код

8 Востаннє редагувалося Serhiy_Les (06.08.2014 19:48:12)

Re: Генеруємо одноразові посилання

Це перший файл наприклад index.php

<form method = "POST" action = "<?= $_SERVER['PHP_SELF']; ?>">
<lable>Введите email чтоб подписатса  расилке</lable><br/>
<input type="text" id = "email"  name = "email" value = "<?= $email?>"/><br/>
<input type = "submit" name = "submit" value = "Подписатса"/> 
 </form>

 
 
 <?php
 
        if(isset($_POST['submit'])){
        
        //------------------------
        require_once('blog/bd.php');
        $db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);//Подключения бази даних
        //------------------------
        
        //Проверка на пробели и витащуем з форми 
        $email = mysqli_real_escape_string($db,trim($_POST['email']));
        $error = false;
        //----------------------------------------------------------
        
    
        
if(!empty($email)){
//-----------------------------------------------------        
$token = sha1(uniqid($email, true));
$query = "INSERT INTO panding_users_ras (email, token, tstamp) VALUES (?,?,?)";
$result = mysqli_query($db,$query);
$url = "http://programik.loc/active.php?token=$token";

$message = "Спасибі що зарегстувались перейдіть по цьому посиланню для підтвердження свого акаунта $url";
$asd = "Все заработало";
mail($email,$asd,$message);
//--------------------------------------------------
echo "Сообщения отправлено на ваш електроную почту";
}
                
        mysqli_close($db);
        }
 ?>

9 Востаннє редагувалося Serhiy_Les (06.08.2014 19:48:42)

Re: Генеруємо одноразові посилання

Це другий файл наприклад active.php

<?php
require_once('blog/bd.php');
 if(isset($_GET['token']) && preg_match('/^[0-9A-F]{40}$/i',$_GET['token'])){
$token = $_GET['token'];
}
else{
echo 'токен не валиден. 43';
}

//проверяем токен
$query = "SELECT email, tstamp FROM panding_users_ras WHERE token = ?";
$result = mysqli_query($db,$query);
$row = fetch(PDO::FETCH_ASSOC); 
$query = closeCursor();
if($row){
extract($row);//Імпортує змінні з масиву в поточну таблицю символів
}
else{
echo 'токен не валиден.';//
}
//активируем пользовательський аккаунт
//----------------------------------
//-----Удаляем токен из  
$query = ("DELET FROM panding_users_ras WHERE email = ? AND token = ? AND tstamp = ?");
$query= mysqli_query($db,$query);

//-----------Такж нам нужно предусмотреть проверку токенов время жизни которых истекло
//----------токен будить жить 1 день в секундах = 60 секунд * 60 минут * 24 часа 


$delta = 86400;
//провекра

if($_SERVER['REQUEST_TIME'] - $tstamp > $delta){
throw new Exception('время жизни токена истекло.');

}
?>

10

Re: Генеруємо одноразові посилання

Я роЗумію тут є помилки але приблизно я хочу знати чи я на правельному шляху і що джалі б робити наприклад функція

$row = fetch(PDO::FETCH_ASSOC); 

видає помилку і так далі будь ласка допоможіть

11

Re: Генеруємо одноразові посилання

Код досить таки проблемний. Важко відповісти чи ви на вірному шляху
бачу тільки додавання пошти і тд. а ви говорите про генеруванян посилань

Розкажу як би я робив генерацію одноразових посилань.
1. заносимо в базу в таблицю links запис типу id = 1, token=$token, link=$link
2. даємо користувачу посилання виду: http://domain/link?token=$token
3. як тільки користувач відкриває сторінку по вищевказаному посиланню ми робимо наступне
3.1. якщо в базі є запис з відповідним токеном $_GET['token'] тоді видаляємо цей запис і відправляємо користувача на $link який було витягнено з бази
3.2. якщо немає запису показуємо 404
все :)

12

Re: Генеруємо одноразові посилання

3.1. якщо в базі є запис з відповідним токеном $_GET['token'] тоді видаляємо цей запис і відправляємо користувача на $link який було витягнено з бази
Я не зрозумів це

13

Re: Генеруємо одноразові посилання

користувач прийшов на сторінку http://domain/link?token=11123123098726130981632
в коді ви можете отримати токен $_GET['token']

дальше з бази даних витягуємо запис у якого поле token = 11123123098726130981632

якщо запис не знайдено - 404
якщо знайдено тоді ми знаємо яка урлка звязана з цим токеном так як вона зберігається у одному рядку.
видаляємо з бази запис  з цим токеном і користувача відправляємо на відповідний лінк ;)

Подякували: Serhiy_Les1

14

Re: Генеруємо одноразові посилання

index.php

<form method = "POST" action = "<?= $_SERVER['PHP_SELF']; ?>">
<lable>Введите email чтоб подписатса  расилке</lable><br/>
<input type="text" id = "email"  name = "email" value = "<?= $email?>"/><br/>
<input type = "submit" name = "submit" value = "Подписатса"/> 
 </form>

 
 
 <?php
 
        if(isset($_POST['submit'])){
        
        //------------------------
        require_once('blog/bd.php');
        $db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);//Подключения бази даних
        //------------------------
        
        //Проверка на пробели и витащуем з форми 
        $email = mysqli_real_escape_string($db,trim($_POST['email']));
        $error = false;
        //----------------------------------------------------------
        
    
        
if(!empty($email)){
//-----------------------------------------------------        
$token = sha1(uniqid($email, true));
$query = "INSERT INTO panding_users_ras (token, email, link) VALUES ('$token','$email','$link') WHERE token='$token', email = '$email', link = '$link'";
$result = mysqli_query($db,$query);
$url = "http://programik.loc/active.php/link?token=$token";

$message = "Спасибі що зарегстувались перейдіть по цьому посиланню для підтвердження свого акаунта $url";
$asd = "Все заработало";
mail($email,$asd,$message);
//--------------------------------------------------
echo "Сообщения отправлено на ваш електроную почту";
}
                
        mysqli_close($db);
        }
 ?>

15 Востаннє редагувалося Serhiy_Les (07.08.2014 15:45:48)

Re: Генеруємо одноразові посилання

active.php

<?php
require_once('blog/bd.php');
 if(isset($_GET['token']) && preg_match('/^[0-9A-F]{40}$/i',$_GET['token'])){
$token = $_GET['token'];
}
else{
echo 'токен не валиден. 43';
}

//проверяем токен
$query = "SELECT email, link FROM panding_users_ras WHERE token = '$token' ";
$result = mysqli_query($db,$query);

if($result == true){
$query = "DELET FROM panding_users_ras WHERE token = '$token'";
?>
<p>Спасибі ви підписалися на росилку</p>
<?php
}
else{
echo "404";
}
?>

16

Re: Генеруємо одноразові посилання

Подивіть чи правильно я увів бо воно не вводиться в базу даних

17

Re: Генеруємо одноразові посилання

Давате домовимось з вами що весь код який ви будете сюди скидувати ви кидаєте одним постом і якщо він великий тоді вставляємо це в спойлер
І ще одна штука: якщо є помилка - тоді вказуйте її. Причин чому не вноситься в базу може бути 100 ;)

18

Re: Генеруємо одноразові посилання

давайте ))

19

Re: Генеруємо одноразові посилання

на якій стадії ваш проект ;) ?
Уже навчились вносити дані в базу даних?

20

Re: Генеруємо одноразові посилання

но якщо Ви мені підскажете чи я правильно реалізував то що Ви мені підсказали бо в базу не заноситься нічого