Что-то я давненько ничего не пейсал.
Клас голосовань, ну там лайков дизлайков и прочей хрени. Пример в следующем посте.
<?php
/*
* Клас голосовань
* Автор: BoGdAn/ARMYbodya <armybodya@gmail.com>
* Дата: 29 вересня 2014р
* Написаний за допомогою мобільного телефону. Вибачте, без табуляції.
*/
class Vote {
var $col_vote_in_string;
function __construct($col_vote = 1) {
$this->col_vote_in_string = $col_vote;
}
function add($id, $str, $cheng = 1) {
$arr = $this->string_to_array($str);
if($this->col_vote_in_string == 1) {
if(in_array($id, $arr)) {
$arr_flip = array_flip($arr);
unset($arr_flip[$id]);
$arr = array_flip($arr_flip);
}
else
$arr[] = $id;
return $this->array_to_string($arr);
}
$arr_p = array();
foreach($arr as $mas)
if(in_array($id, $mas)) {
$noadd = 1;
$mas_flip = array_flip($mas);
unset($mas_flip[$id]);
$mas = array_flip($mas_flip);
$arr_p[] = $mas;
}
else
$arr_p[] = $mas;
if(!isset($noadd))
$arr_p[$cheng] = empty($arr_p[$cheng]) ? array($id) : $id;
return $this->array_to_string($arr_p);
}
function view($str) {
$arr = $this->string_to_array($str);
if($this->col_vote_in_string == 1)
return count($arr);
$r_arr = array();
foreach($arr as $mas)
$r_arr[] = count($mas);
return $r_arr;
}
function in_vote($id, $str) {
$arr = $this->string_to_array($str);
if($this->col_vote_in_string == 1)
if(in_array($id, $arr))
return 1;
else
return 0;
$r_arr = array();
foreach($arr as $mas)
if(in_array($id, $mas))
$r_arr[] = 1;
else
$r_arr[] = 0;
return $r_arr;
}
function uslist($str, $cheng = 1) {
$arr = $this->string_to_array($str);
if($this->col_vote_in_string == 1)
return $arr;
else
return $arr[$cheng];
}
function array_to_string($arr) {
if($this->col_vote_in_string == 1)
return implode(',', $arr);
$str = '';
$count = count($arr);
$i = 0;
foreach($arr as $v) {
$str .= implode(',' ,$v);
if(++$i != $count)
$str .= '|';
}
return $this->string($str);
}
function string_to_array($string) {
$string = $this->string($string);
if($this->col_vote_in_string === 1) {
if(empty($string)) return array();
return explode(',', $string);
}
$arr = array();
$v = $string ? explode('|', $string) : array();
for($i = 0; $i <= ($this->col_vote_in_string-1); ++$i)
$arr[] = !empty($v[$i]) ? explode(',', $v[$i]) : array();
return $arr;
}
function string($string) {
$arr = array(',,' => '', ' ' => '', "\n" => '', "\r" => '');
if($this->col_vote_in_string == 1)
$arr['|'] = '';
return strtr($string, $arr);
}
}
Результат можно писать не только в файл ;)
Временный пример
http://haker.e3w.ru/code/?
<?php
include '../system/vote.php';
function getIP() { if(isset($_SERVER ['HTTP_X_FORWARDED_FOR' ])) return $_SERVER ['HTTP_X_FORWARDED_FOR' ]; if(isset($_SERVER['HTTP_X_REAL_IP' ])) return $_SERVER['HTTP_X_REAL_IP' ]; return $_SERVER['REMOTE_ADDR']; }
$ip = getIP();
$db = file('test_file_db.txt');
$like = new Vote(1);
if(isset($_GET['like'])) {
$db[0] = $like->add($ip, $db[0])."\r\n";
file_put_contents('test_file_db.txt', implode('', $db));
header('Location: ./?');
exit;
}
$vote = new Vote(5);
if(isset($_POST['add']) && in_array(intval($_POST['vote']), array(1,2,3,4,5)) && !in_array(1, $vote->in_vote($ip, $db[1]))) {
$db[1] = $vote->add($ip, $db[1], $_POST['vote']-1)."\r\n";
file_put_contents('test_file_db.txt', implode('', $db));
header('Location: ./?');
exit;
}
echo 'Сподобалось: '.$like->view($db[0]).' ', $like->in_vote($ip,$db[0]) ? '<a href="?like">Більше не подобається(</a>' : '<a href="?like">Мені теж =)</a>';
echo '<hr />';
echo '<h2>Ви користуєтесь класом рейтингу від BoGdAn?</h2>';
$mas = $vote->view($db[1]);
echo '<form method="post">';
echo '<p><input type="radio" name="vote" value="1" /> Так, чудовий клас ('.$mas[0].')</p>';
echo '<p><input type="radio" name="vote" value="2" /> Так, але потрібно допрацювати ('.$mas[1].')</p>';
echo '<p><input type="radio" name="vote" value="3" /> Норм, але я напишу краще свій ('.$mas[2].')</p>';
echo '<p><input type="radio" name="vote" value="4" /> Клас потребує серйозних допрацювань ('.$mas[3].')</p>';
echo '<p><input type="radio" name="vote" value="5" /> Фуфло Мля, афтар редіско ('.$mas[4].')</p>';
echo '<p><input type="submit" name="add" value="ПРОКРИЧАТИ" /></p></form>';
.$mas[4].
Вместо var правильней будет public
Rakovskiy, Ок. Спасибо, учту.
# Rakovskiy (29.09.2014 / 19:01)
Вместо var правильней будет public
Это так сказать новый подход к ОПП появившийся в пхп5. Хотя в той же джаве так изначально было, не знаю зачем надо было это var придумывать... В пхп5 же решили всё сделать как в джаве, я бы даже сказал "слизать".
комментарии лучше бы на русском или хотя бы англ, эти языки больше народа знает, чем украинский...
мне не понятно
Jane, Так учите украинский
, мне русский только для этого и нужен
.
Там нет коментариев, я писал с телефона, у меня симбиан, я даже такой класик без глюков написать не смог. А еслиб еще коменты, тел короче вырубился бы.
Пример есть, что не так, спрашываем...
BoGdAn, а у тебя только мобильник или и ПК есть?