str заменить кучей кода php
У меня есть некоторый контент, поступающий из базы данных. И я хочу заменить конкретное слово контента кучей кода.
Содержимое, поступающее из базы данных, например:
Благодарим вас за проявленный интерес к нашему веб-сайту.
{ФОРМИНСЕРТ}
Вы также можете связаться с нами по телефону 1234567890
Я хочу заменить строку {FORMINSERT}
кучей PHP-кода. Если это обычная текстовая строка, я могу просто заменить ее с помощью str_replace
.
Но замена содержимого - это не простой текст, это код формы.
Хотите заменить это {FORMINSERT}
С примером:
<form method="post" id="form1" action="<?php echo KT_escapeAttribute(KT_getFullUri()); ?>">
<table cellpadding="5" cellspacing="2" >
<tr>
<td width="84" ><a name="contact" id="contact"></a></td>
<td width="384"> </td>
</tr>
<tr>
<td colspan="2" ><h1>Contact Us</h1></td>
</tr>
<tr>
<td ><label for="fullname">Name:</label></td>
<td>
<input type="text" name="fullname" id="fullname" value="<?php echo KT_escapeAttribute($row_rsscotts_contact['fullname']); ?>" size="47" />
<?php echo $tNGs->displayFieldHint("fullname");?> <?php echo $tNGs->displayFieldError("scotts_contact", "fullname"); ?>
</td>
</tr>
<tr>
<td ><label for="phone">Phone:</label></td>
<td>
<input type="text" name="phone" id="phone" value="<?php echo KT_escapeAttribute($row_rsscotts_contact['phone']); ?>" size="47" />
<?php echo $tNGs->displayFieldHint("phone");?> <?php echo $tNGs->displayFieldError("scotts_contact", "phone"); ?>
</td>
</tr>
<tr>
<td><label for="email">Email:</label></td>
<td>
<input type="text" name="email" id="email" value="<?php echo KT_escapeAttribute($row_rsscotts_contact['email']); ?>" size="47" />
<?php //echo $tNGs->displayFieldHint("email");?> <?php echo $tNGs->displayFieldError("scotts_contact", "email"); ?>
</td>
</tr>
<tr>
<td><label for="tellus">Looking for:</label></td>
<td>
<textarea name="tellus" id="tellus" cols="37" rows="5"><?php echo KT_escapeAttribute($row_rsscotts_contact['tellus']); ?></textarea>
<?php echo $tNGs->displayFieldHint("tellus");?> <?php echo $tNGs->displayFieldError("scotts_contact", "tellus"); ?>
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="KT_Insert1" id="KT_Insert1" value="Submit" class="button-blue" />
<input name="Reset" type="reset" value="Reset" class="button-grey" />
</td>
</tr>
</table>
</form>
5 answers
Test1.php :
$database_content = 'Thank you for interest on our web site.
{FORMINSERT}
You can also contact us by calling us to 1234567890';
if(stripos($database_content, '{FORMINSERT}') !== FALSE){
ob_start();
include 'test2.php';
$result = ob_get_clean();
}
$database_content = str_replace("{FORMINSERT}", $result, $database_content);
echo $database_content;
Test2.php (код, в который вы пытаетесь вставить):
echo 'hello world';
Результат:
Благодарим вас за проявленный интерес к нашему веб-сайту. привет, мир, Вы также можете связаться с нами по телефону 1234567890
Таким образом, это похоже на то, как если бы код "эхо "привет, мир";" сидел прямо там, где был {FORMINSERT}. Вы можете просто создать кучу PHP-файлов, чтобы включить их подобным образом, и сделать несколько операторов if для обработки замен.
Вы можете использовать ob_start()
если вы хотите объединить код HTML и PHP и сохранить выходные данные в одной переменной:
ob_start();
?>
<form action="contact.php" method="post">
Few fields here
and submit button
</form>
<?php
$forminsert = ob_get_clean();
Затем вы можете выполнять свои str_replace()
как обычно.
Однако, если {FORMINSERT}
может появиться или не появиться, вы можете использовать preg_replace_callback()
для снижения затрат на создание данных формы в случае, если в этом нет необходимости:
$content = preg_replace_callback('/{(.*?)}/', function($match) {
if ($match[1] == 'FORMINSERT') {
// code to generate $forminsert
return $forminsert;
}
return $match[0];
}, $content_from_db);
Кстати, эту функцию также можно использовать более обобщенно для замены чего-либо между фигурными скобками.
Давайте предположим, что содержимое, поступающее из вашей базы данных, хранится в переменной $db_content
и php-код, который вам нужно заменить, находится в custom_code.php
, поэтому
if(strpos($db_content, "{FORMINSERT}") === true){
//remove the tag
str_replace("{FORMINSERT}", '',$db_content)
//load the php code
require_once("custom_code.php")
}
//if need, you can add more conditions using else-if & replace more tags.
Но лучше перейти к шаблону MVC
, где вы можете легко выполнять такую работу с помощью шаблонов. Вот пример Я использую для простых сценариев
Хорошо, как насчет этого. Приведенный ниже код позволяет вам определять пользовательские {слова} внутри вашего контента, и они будут заменены другим контентом при анализе.
$contentFromDB = "Etiam porta sem malesuada magna mollis euismod. Donec ullamcorper nulla non metus auctor fringilla. {FORMINSERT}";
echo matchTags($contentFromDB);
function matchTags($content) {
$pattern = '/{(\w+)}/i';
$content = preg_replace_callback($pattern,"transformTags",$content);
return $content;
}
function transformTags($word) {
if ($word[1] == "FORMINSERT") {
ob_start();
?>
<form action="contact.php" method="post">
Few fields here
and submit button
</form>
<?php
$content = ob_get_clean();
return $content;
}
if ($word[1] == "somethingelse") {
}
}
Просто сделайте это, и ваша работа будет решена
$forminser= " welcome to our website {FORMINSERT}";
$form= "<form action='contact.php' method='post'>
Few fields here
and submit button
</form>" ;
echo str_replace("{FORMINSERT}",$form,$forminser);
РЕДАКТИРОВАТЬ> если вы хотите, чтобы php-код был внутри вашей формы, то вот пример
$var = "Few words here" ;
$forminser= " welcome to our website {FORMINSERT}";
$form= "<form action='contact.php' method='post'>";
$form .= $var ; // this php code here
$form .= " and submit button</form>" ;
echo str_replace("{FORMINSERT}",$form,$forminser);
Правка2
Вот и весь код, который вы можете сделать.
<?php
$forminser= " welcome to our website {FORMINSERT}";
$form = "<form method='post' id='form1' action=' " ;
$form .= KT_escapeAttribute(KT_getFullUri());
$form .= " '><table cellpadding='5' cellspacing='2' >
<tr>
<td width='84' ><a name='contact' id='contact'></a></td>
<td width='384'> </td>
</tr>
<tr>
<td colspan='2' ><h1>Contact Us</h1></td>
</tr>
<tr>
<td ><label for='fullname'>Name:</label></td>
<td><input type='text' name='fullname' id='fullname' value=' " ;
$form .= KT_escapeAttribute($row_rsscotts_contact['fullname']);
$form .= " ' size='47' /> ";
$form .= $tNGs->displayFieldHint("fullname");
$form .= $tNGs->displayFieldError("scotts_contact", "fullname");
$form .= "</td>
</tr>
<tr>
<td ><label for='phone'>Phone:</label></td>
<td><input type='text' name='phone' id='phone' value= ' " ;
$form .= KT_escapeAttribute($row_rsscotts_contact['phone']);
$form .= " ' size='47' /> ";
$form .= $tNGs->displayFieldHint("phone");
$form .= $tNGs->displayFieldError("scotts_contact", "phone");
$form .= '</td>
</tr>
<tr>
<td><label for="email">Email:</label></td>
<td><input type="text" name="email" id="email" value=" ' ;
$form .= KT_escapeAttribute($row_rsscotts_contact['email']);
$form .= '" size="47" />';
$form .= $tNGs->displayFieldError("scotts_contact", "email");
$form .= '</td>
</tr>
<tr>
<td><label for="tellus">Looking for:</label></td>
<td><textarea name="tellus" id="tellus" cols="37" rows="5"> ';
$form .= KT_escapeAttribute($row_rsscotts_contact['tellus']);
$form .= '</textarea> ';
$form .= $tNGs->displayFieldHint("tellus");
$form .= $tNGs->displayFieldError("scotts_contact", "tellus");
$form .= '</td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="KT_Insert1" id="KT_Insert1" value="Submit" class="button-blue" /> <input name="Reset" type="reset" value="Reset" class="button-grey" /></td>
</tr>
</table>
</form>
';
echo str_replace("{FORMINSERT}",$form,$forminser);
?>