PHP и с чем его едят....

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
У меня была мысль типа:
PHP:
function num($s) {
	if (preg_match("/[.,]/", $s) == 0)
		return $s."00";
	return str_replace(array(".",","), "", $s);
}
Но вообще задание странное.
Точку желательно бы экранировать, ибо потом гадость всякая вылазит(без \ точка=любой символ) по идее в этом варианте оно будет хватать все-подряд. И вообще, в перловых регулярках она - самый мерзкий символ+)
 

Del

Member
Точку желательно бы экранировать, ибо потом гадость всякая вылазит(без \ точка=любой символ) по идее в этом варианте оно будет хватать все-подряд. И вообще, в перловых регулярках она - самый мерзкий символ+)
Насколько я помню, в данном случае спецсимволы не являются спецсимволами если идут в начале.

По мне такое написание функции неправильно по логике.

С виду похоже, что допустим есть суммы зарплат: 123 грн, 123,32 грн.
Нужно получить их же, но в копейках, типа: 12300 коп., 12332 коп.

Т.е. при использовании предложенного варианта, если ввести сумму 123.234 грн, то получим 123234 коп, вместо 12323,4 коп, что неправильно.

Поэтому я и отказался от этого варианта. Хотя кто его знает, что там имелось ввиду.
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Спецсимволы без экранировки они и в африке спецсимволы.
 

Del

Member
Спецсимволы без экранировки они и в африке спецсимволы.
Ну мы ж не в Африке...

Внутри символьного класса специальные значения символов, в основном, игнорируются. Особые случаи:
Чтобы добавить символ ^ в набор, его следует поместить туда не первым.
Чтобы добавить символ - в набор, его следует поместить туда первым или последним. Например:
шаблон DNS-имени, куда могут входить буквы, цифры, минус и точка-разделитель: [-0-9a-zA-Z.];
любой символ, кроме минуса и цифры: [^-0-9].
 

Cris

Member
такс, вот сейчас я проект в котором нужно реализовать систему прав доступа для модераторов
так вот и чтоб было проще я сделал небольшой класс для работы с правами доступа:
permissions.php
PHP:
<?php
class Permissions
{
	private $code_file;
	private $separator_character;
	private $permissions;
	private $permissions_code_array;
	private $permissions_array;
	public $error;
	public $error_description;
	function Permissions($code_file,$separator,$permissions)
	{
		$this->code_file=$code_file;
		$this->separator_character=$separator;
		$this->permissions=$permissions;
		$this->parse_code();		
		$this->parse_permissions();
	}
	private function set_error($code,$description)
	{
		$this->error=$code;
		$this->error_description=$description;
	}
	private function parse_code()
	{
		$code_array=file($this->code_file);
		if(!$code_array)
			$this->set_error(1,"Не возможно открыть файл с кодами прав доступа!");
		else
		{
			$this->set_error(0,"");
			foreach($code_array as $row)
			{
				$row=ltrim(rtrim($row));
				$space_row=strpos($row," ");
				if($space_row!=0)
					$this->permissions_code_array[ltrim(rtrim(strtolower(substr($row,$space_row+1))))]=ltrim(rtrim(strtolower(substr($row,0,$space_row))));
			}
		}
	}
	private function parse_permissions()
	{
		$array=explode($this->separator_character,$this->permissions);
		foreach($array as $code)
		{
			$this->permissions_array[$code]=1;
		}
		$this->set_error(0,"");
	}
	public function delete_permission($code)
	{
		$this->permissions_array[$code]=false;
		$this->set_error(0,"");
	}
	public function create_permission($code)
	{
		$this->permissions_array[$code]=true;
		$this->set_error(0,"");
	}
	public function parse_permissions_array()
	{
		$return_string="";
		$i=0;
		foreach($this->permissions_array as $code=>$param)
		{
			if($param) 
			{
				if($i!=0)$return_string.=$this->separator_character;
				$return_string.=$code;
				$i++;
			}
		}
		$this->set_error(0,"");
		return $return_string;
	}
	function __call($name_permission,$parameters)
	{
		$name_permission=strtolower($name_permission);
		$code=$this->permissions_code_array[$name_permission];
		if($this->permissions_array[$code]) return true; else return false;
	}
}
?>
permissions_code.txt
PHP:
0 CreateNewUser
1 EditMenu
2 EditTemplates
3 EditNews
4 EditLeftBlock
use_perm.php
PHP:
<?php
include permissions.php
$user_perm=new Permissions('permissions_code.txt',';','0;2;3');
echo $user_perm->parse_permissions_array()."<br>";
if($user_perm->CreateNeWUser())
{
	echo "Вы можете создавать новый пользователей<br>";
}
$user_perm->delete_permission(0);
if(!$user_perm->CREATENewUser())
{
	echo "Вы не имеете права создавать польльзователей<br>";
}
$user_perm->create_permission(4);
if($user_perm->editleftblock())
{
	echo "Вы можете редактировать левый блок<br>";
}
echo $user_perm->parse_permissions_array();
?>
Вывод use_perm.php
PHP:
0;2;3
Вы можете создавать новый пользователей
Вы не имеете права создавать польльзователей
Вы можете редактировать левый блок
2;3;4
небольшие пояснения:
-работает только в PHP 5 так как в PHP 4 не было реализовано __call для классов
-для работы нужен файл в котором записано код-название прав доступа (permissions_code.txt), .txt для примера, это в ваших инетерсах - безопасность :), в строке один пробел-разделитель
-и так есть у нас файл с code-name правами доступа, в конструктор нужно передать "файл с code-name", "символ разделения", "права текущего юзера - в кодах"
-чтобы узнать есть право name у текущего пользователя - $екземпляр_класса->name() - true=есть_право, false=нету_права
-чтобы удалить право c кодом code - $екземпляр_класса->delete_permission(code);
-добавить новое право - $екземпляр_класса->create_permission(code);
-возвратить список прав после изменений - $екземпляр_класса->parse_permissions_array();
-регист букв в названии права рли не играет
-ошибки - $екземпляр_класса->error и $екземпляр_класса->error_description
над длинной названий функций надо еще поработать :)
могу добавить чтобы проверка права была не $екземпляр_класса->name(), а просто $екземпляр_класса->name

если что не понятно спрашивайте :)

критика приветствуется!!!
 

dreamer

Member
такс, вот сейчас я проект в котором нужно реализовать систему прав доступа для модераторов
так вот и чтоб было проще я сделал небольшой класс для работы с правами доступа:
permissions.php
Много кода, мало смысла.
Чем тебе не угодил:
PHP:
class AccessManager {
  var $rules = array(
    create => 1,
    delete => 2,
    view   => 3,
    edit    => 4,
  );
  function __constructor($rights) {
    $this->rights = explode(';', $rights);
  }
  function can($do) {
    return in_array($this->rules[$do], $this->right);
  }
}
assert(new AccessManager("1;3")->can("view"));
Какой смысл хранить имена в файле? Большая часть кода занимается именно парсингом файла.
 

Cris

Member
Много кода, мало смысла.
Чем тебе не угодил:
PHP:
class AccessManager {
  var $rules = array(
    create => 1,
    delete => 2,
    view   => 3,
    edit    => 4,
  );
  function __constructor($rights) {
    $this->rights = explode(';', $rights);
  }
  function can($do) {
    return in_array($this->rules[$do], $this->right);
  }
}
assert(new AccessManager("1;3")->can("view"));
Какой смысл хранить имена в файле? Большая часть кода занимается именно парсингом файла.
ну файл с именами можно перенести, но у меня ж там еще назвачение прав, удаление, потом все назад запарсить в строку , вот код и разросся :)
 

Storm

Member
Подскажите пожалуйста.

Есть такой кусок кода:

PHP:
foreach($data as $key => $value) {
	
	$table->addRow( $data[$key], 'class="hza"', 'td', true );
}
Я не разбираюсь в PHP но вроде понял что именно эта функция создает строку с столбцами из существующих данных в таблице(?) table. При этом через стили колонкам присваивается стиль отображения.

Но мне надо прописать стиль именно строке. А еще интересно узнать как сделать чередование, то есть цвет фона у строчек меняется через одну ?



И еще такой нюанс, у родителя(таблица - колонка) прописано через класс отсутствие рамки, при попытке прописать в выше упомянутом коде айди или класс с рамкой - она не отображается. В чем я накосячил?

Спасибо.
 
Останнє редагування:

dreamer

Member
Подскажите пожалуйста.

Есть такой кусок кода:

PHP:
foreach($data as $key => $value) {
	
	$table->addRow( $data[$key], 'class="hza"', 'td', true );
}
Я не разбираюсь в PHP но вроде понял что именно эта функция создает строку с столбцами из существующих данных в таблице(?) table. При этом через стили колонкам присваивается стиль отображения.

Но мне надо прописать стиль именно строке. А еще интересно узнать как сделать чередование, то есть цвет фона у строчек меняется через одну ?



И еще такой нюанс, у родителя(таблица - колонка) прописано через класс отсутствие рамки, при попытке прописать в выше упомянутом коде айди или класс с рамкой - она не отображается. В чем я накосячил?

Спасибо.
При чем тут PHP? Это какой-то класс и как именно он работает знает только автор класса. Читайте мануал или исходник класса.
Чередование делается просто:
PHP:
$row = 0;
for (...) {
    $row_class = ($row++ % 2 == 0) ? "odd" : "even";
    echo "<tr class=$row_class><td>...";
}
В CSS большую силу имеют более специфичные стили, т.е. стиль #that-table .row сильнее чем table .column, возможно дело в этом, без конкретного кода сказать тяжело.
 

=RiZo=

ONE SHOT - ONE HIT
Подскажите, как можно организовать редактирование базы мускула в окне браузера, то есть что бы человек, который зарегестрирован на сайте смог создать страницу с табличкой и мог ее редактировать. Что бы это было похоже на лист Excel или Google Docs.
 
Зверху