Autor Zpráva
Sylar
Profil
zdravím,
mám v DB uložený nějaký text
např.
testovací kód mojí stránky

[include=soubor]

další testovací text mojí stránky

potřebuji takový regulár který mi z textu [include=soubor] udělá soubor a ten pak změnit na <?php include_once "soubor.php"; ?> budu includovat do stránky samotné.
S tímto typem regulárů si ještě moc nerozumím ... mohl by mi někdo píchnout ?
díky moc
Majkl578
Profil
$input = <<< 'DBTEXT'
qwsdefrg
elrqstauwerk
[include=./dir/file.ext]
efgrmhnyo
mferig
DBTEXT;
var_dump(preg_replace('~\[include=(.[^\]]+)\]~', '<?php include_once \'$1\'; ?>', $input));
Sylar
Profil
Majkl578
okey tj super .. díky moc ...
a ještě bych potřeboval poradits tím jak to ./dir/file.ext "vyndat" z toho celkovýho textu do nějakýho pole, protože já ten název ještě musím před includem zkontrolovat v DB, jestli je povolen, aby si každý neincludoval co chce
Majkl578
Profil
Sylar
tak tedy preg_replace_callback

$input = <<< 'DBTEXT'
qwsdefrg
elrqstauwerk
[include=./dir/file.ext]
efgrmhnyo
mferig
DBTEXT;
var_dump(preg_replace_callback('~\[include=(.[^\]]+)\]~', function($match) {
$file =& $match[1];
//tady si overis, zda muze nebo nemuze
//$checkQ = mysql_query(... WHERE filename = $file);//overovaci dotaz
//if(!mysql_num_rows($checkQ)) {//pokud nebylo v db nalezeno, vymaze se inkriminovany include
//return '';
//}
return '<?php include_once \'' . $file . '\'; ? >';
}, $input));


pokud pouzivas starsi verzi php nez 5.3, nahrad si anonymni funkci za create_function
Sylar
Profil
  var_dump(preg_replace_callback('~\[include=(.[^\]]+)\]~', create_function($match) {
  $file =& $match[1];
  $check = mysql_query("SELECT count(id) FROM e_modules WHERE link = '".$file."' AND zobraz = '1'") or die (error());
  if (mysql_result($check, 0) != 1) return "";
  return "<?php include_once \"./pages/".$file."\".php\"; ? >";
  }, $p['obsah']));


takhle jsem si to upravil ale phpko mi hlásí syntax chybku hned na tom pvním řádku ... nelíbí se mu tam ta { ... koukal jsem i do manuálu ... tam mají ( , tu jsem tam taky zkoušel dát ale hlásí toto samý ...
Majkl578
Profil
zkus to takto:

$input = <<< 'DBTEXT'
qwsdefrg
elrqstauwerk
[include=./dir/file.ext]
efgrmhnyo
mferig
DBTEXT;
var_dump(preg_replace_callback('~\[include=(.[^\]]+)\]~', create_function('$match', '
$file =& $match[1];
//tady si overis, zda muze nebo nemuze
$check = mysql_query("SELECT count(id) FROM e_modules WHERE link = \'".mysql_real_escape_string($file)."\' AND zobraz = 1") or die (mysql_error());
if (mysql_result($check, 0) != 1) {
return "";
}
return \'<?php include_once \\\'./pages/\' . $file . \'.php\\\'; ? >\';'), $p['obsah']));
Sylar
Profil
jj tedka už je to OK žádnou chybku to nehází ale zase to ještě neprovede ten include :( ... vyhodí mi to zpátky text a na místo [include=soubor] je tam <?php include_once './pages/soubor.php'; ?> ale je to ve zdrojáku růžovou kurzívou ...
var_dump jsem dal pryč a výstup z preg_replace_callback echuju, ale pak mi to právě jen vypíše ale neprovede ten include :( ...
ten soubor tam ale je ...
Majkl578
Profil
v prvnim prispevku jsi uvedl, ze chces <?php include_once "soubor.php"; ?>, tak jsem to tak udelal.

zkus tedy toto:

$input = <<< 'DBTEXT'
qwsdefrg
elrqstauwerk
[include=./_x]
efgrmhnyo
mferig
DBTEXT;

$input = preg_split('~(\[include=.[^\]]+\])~', $input, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

foreach($input as $data) {
	if(preg_match('~^\[include=(.[^\]])+\]$~', $data, $match)) {
		$check = mysql_query("SELECT count(id) FROM e_modules WHERE link = \'".mysql_real_escape_string($file)."\' AND zobraz = 1") or die (mysql_error());
		if (mysql_result($check, 0) != 1) {
			continue;
		}
		@include './pages/' . $match[1] . '.php';
		continue;
	}
	echo $data;
}
Sylar
Profil
ok tedka to už funguje includuje stránku se zápisem [include=kontakt_form] ale tu se zápisem [include=ref_vypis] to includnout nechce ... hodil jsem stránku na http://beta.inbo.cz jsou to stránky http://beta.inbo.cz/kontakt/ a http://beta.inbo.cz/reference/ . Na kontakt je includovaný ten formulář ale na reference je pořád zápis [include=ref_vypis] ... je to úplně to samý, nechápu proč to reference nebere ... jak kontakt_form.php tak ref_vypis.php jsou ve složce /pages/, v tomhle chyba není ...
Sylar
Profil
Okey už to jde :-))) díky moc, snad jsi o moc nezestárl :-)
Majkl578
Profil
Sylar
jen o par minut, ale zase jsem ziskal nove zkusenosti ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: