Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вставка одного значения из бд в другое
 
 автор: P@Sol   (22.08.2005 в 11:06)   письмо автору
 
 

есть код, который хранится в бд, для примера, "Привет. Как дела?". и есть еще одна таблица, где хранятся, для примера, имена.
Как сделать чтобы на экран вывелось "Привет, Саша. Как дела?" ?

   
 
 автор: cheops   (22.08.2005 в 13:08)   письмо автору
 
   для: P@Sol   (22.08.2005 в 11:06)
 

Чего-то не очень понятно, по какому принципу следует определять место для помещения в строку значения "Саша".

   
 
 автор: P@Sol   (22.08.2005 в 13:37)   письмо автору
 
   для: cheops   (22.08.2005 в 13:08)
 

вот в этом и вопрос....можно, например,так "Привет, %name. Как дела?"
или %name%, или #name, я не знаю как правильно...

   
 
 автор: Loki   (22.08.2005 в 16:16)   письмо автору
 
   для: P@Sol   (22.08.2005 в 13:37)
 

Да можно любой тег ввести, который не встречается в нормальной жизни. А потом просто прогнать через str_replace()

   
 
 автор: P@Sol   (22.08.2005 в 16:51)   письмо автору
 
   для: Loki   (22.08.2005 в 16:16)
 

т.е. сначало достаю два запроса, а потом заменяю свой тег на нужное начение...гениально:)

   
 
 автор: P@Sol   (22.08.2005 в 17:17)   письмо автору
 
   для: P@Sol   (22.08.2005 в 11:06)
 

а вот еще вопрос...как вставить переменную?

  $name = $row['Subdivision_name'];
  eval("echo $row['Header']"); //20 строка 

в $row['Header']:

<html>
<head>
<title>".$name."</title>
</head>

делаю так, но ошибка

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in x:\home\localhost\www\myphp\site\index.php on line 20

Добавлено
сделал так:
  $name = $row['Subdivision_name'];
  $text = $row["Header"];
  eval("echo '$text';");

но все что было написано \"так\" - отображается "так",т.е.
<img src=\"/myphp/site/pic/pic15.gif\"> а выводит путь http://localhost/"/myphp/site/pic/pic15.gif/"
почему?

   
 
 автор: Loki   (22.08.2005 в 17:28)   письмо автору
 
   для: P@Sol   (22.08.2005 в 17:17)
 

А что если вот так:

eval("echo {$row['Header']}"); //20 строка

или вот так:

eval("echo ".$row['Header']); //20 строка

   
 
 автор: P@Sol   (22.08.2005 в 17:31)   письмо автору
 
   для: Loki   (22.08.2005 в 17:28)
 

тогда такая ошибка

Parse error: parse error, unexpected '<', expecting ',' or ';' in x:\home\localhost\www\myphp\site\index.php(20) : eval()'d code on line 1


//не понимает что перед ним html текст

   
 
 автор: cheops   (22.08.2005 в 20:41)   письмо автору
 
   для: P@Sol   (22.08.2005 в 17:31)
 

Посмотрите текст перед 20 строкой, а лучше запостите его сюда - наверняка проблема там, либо скобка, либо кавычка, либо точка с запятой пропущены.

   
 
 автор: P@Sol   (23.08.2005 в 09:17)   письмо автору
 
   для: cheops   (22.08.2005 в 20:41)
 

Вы ошиблись...ошибка выше говорит, что то то не понимает в функции eval, а туда передается

<html> //1 строка, как раз тут ошибка
<head> 
<title>".$name."</title> 
</head> 


в сообщении выше указана 20 и 19 строки

$name = $row['Subdivision_name']; 
  eval("echo $row['Header']"); //20 строка 

   
 
 автор: cheops   (23.08.2005 в 12:54)   письмо автору
 
   для: P@Sol   (23.08.2005 в 09:17)
 

А да, действительно eval в сообщении об ошибке не заметил. Дело в том, что в двойных кавычках переменные интерпретируются http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=130, поэтому функции eval() по сути передаётся строка "echo ". Для того, чтобы предотвратить интерпретацию, следует либо поместить код в одинарные кавычки, либо экранировать $
<?php
$name 
$row['Subdivision_name']; 
  eval(
"echo \$row['Header']"); //20 строка
?>

   
 
 автор: P@Sol   (23.08.2005 в 13:30)   письмо автору
 
   для: cheops   (23.08.2005 в 12:54)
 

спасибо

но теперь вот, что:

но все что было написано \"так\" - отображается "так",т.е.
<img src=\"/myphp/site/pic/pic15.gif\"> а выводит путь http://localhost/"/myphp/site/pic/pic15.gif/"
почему?

но по стандарту же надо указывать <img src="/myphp/site/pic/pic15.gif">

   
 
 автор: cheops   (23.08.2005 в 14:30)   письмо автору
 
   для: P@Sol   (23.08.2005 в 13:30)
 

Чего-то не очень понятно... ну дав всё, что экранируется отображается как есть...

   
 
 автор: P@Sol   (23.08.2005 в 15:01)   письмо автору
 
   для: cheops   (23.08.2005 в 14:30)
 

мне теперь тоже ничего не понятно:(
1. $name так и пишется $name, вместо нужного $row['Subdivision_name']
2. как я понял eval() формирует php-код, в php коде внутри строки, чтобы разместить "кавычки" нужно их экранировать...
написав этот код,
$name = $row['Subdivision_name']; 
  eval("echo $row['Header']"); 

я пытаюсь получить код

$name = $row['Subdivision_name']; 
echo "<html><head><title>".$name."</title></head><body><img src=\"pic/pic.gif\"></body></html>"


но получаю, что-то другое:(

т.е. должно быть

<html><head><title>Главная</title></head><body><img src="pic/pic.gif"></body></html>

а получается

<html><head><title>".$name."</title></head><body>><img src=\"pic/pic.gif\"></body></html>

   
 
 автор: cheops   (23.08.2005 в 15:28)   письмо автору
 
   для: P@Sol   (23.08.2005 в 15:01)
 

Не понимаю вот этот код
<?php
  $name 
$row['Subdivision_name']; 
  eval(
"echo $row['Header']");
?>

Как связаны первая и вторая строка?

   
 
 автор: P@Sol   (23.08.2005 в 15:45)   письмо автору
 
   для: cheops   (23.08.2005 в 15:28)
 

$row['Subdivision_name']
из бд:

Главная

$row['Header']
в бд хранится следующий код:

<html><head><title>".$name."</title></head><body><img src=\"pic/pic.gif\"></body></html>


p.s. вверху же написано:(

   
 
 автор: cheops   (23.08.2005 в 16:07)   письмо автору
 
   для: P@Sol   (23.08.2005 в 15:45)
 

Нет скорее всего не получится, лучше вводите вместо $name шаблоны %%name%% и заменяйте по ним. Вообще я бы рекомендовал использовать eval в исключительных случаях - так как это здорово усложняет код и приводит к трудноулавливаемым ошибкам.

   
 
 автор: P@Sol   (23.08.2005 в 16:08)   письмо автору
 
   для: cheops   (23.08.2005 в 16:07)
 

жалко:(...ладно попробую

   
 
 автор: P@Sol   (24.08.2005 в 15:37)   письмо автору
 
   для: P@Sol   (22.08.2005 в 11:06)
 

значит так...в панели администрирования можно создавать поля в таблице, а еще можно в шаблоне вставлять, например, для поля css - %%css%%..а как можно заменить %%css%% на содержимое поля css без правки кода...т.е. нужно написать код, которые будет делать замену %%такой переменной%% на сожержание "такого поля"...прошу подсказки, готовый код пока не нужно...

   
 
 автор: cheops   (24.08.2005 в 19:12)   письмо автору
 
   для: P@Sol   (24.08.2005 в 15:37)
 

Это можно осуществить при помощи стандартной функции замены str_replace
<?php
  $text 
str_replace("%%такой переменной%%""такого поля"$text);
?>

   
 
 автор: P@Sol   (25.08.2005 в 09:04)   письмо автору
 
   для: cheops   (24.08.2005 в 19:12)
 

я так и делаю...я не знал
1. как узнать кол-во столбцов //узнал
2. как узнать имя поля //думаю

   
 
 автор: P@Sol   (25.08.2005 в 10:28)   письмо автору
 
   для: cheops   (24.08.2005 в 19:12)
 

получилась такая штука:
<?
$sql2 
"Select * from pcontent".$class_id." where Subdivision_id = ".$subdivision_id."
          and Checked = 1 order by "
.$row["Sort_by"]." limit 0 , 5" ;
  
$result2 mysql_query($sql2);  
  
$num2 mysql_num_rows($result2);
  
$col2 mysql_num_fields($result2);
  
//Узнаем заголовки
  
$q="show fields from pcontent".$class_id;
  
$res=mysql_query($q);
  while (
$name=mysql_fetch_row($res)) $arr_name[]=$name[0];

  if (
$num2 0)
  {
          for (
$k=0$k $num2$k++)
          {
                  
$text_c $row["Record_template"];
                  
$row2 mysql_fetch_array($result2);

                  for (
$c=4$c $col2$c++)
                  {
                          
$text_c str_replace("%%$arr_name[$c]%%",$row2[$arr_name[$c]],$text_c);
                  }
                  echo 
$text_c;
          }
  }

можно ли упростить?

   
 
 автор: cheops   (25.08.2005 в 11:43)   письмо автору
 
   для: P@Sol   (25.08.2005 в 10:28)
 

Возможно... но у нас нет перед глазами даже таблиц MySQL, поэтому разобраться в логике кода сложновато.

   
 
 автор: P@Sol   (25.08.2005 в 11:48)   письмо автору
 
   для: cheops   (25.08.2005 в 11:43)
 


// эта часть во всех таблицах pcontent1,pcontent2,pcontent3 и т.д.
Message_id  int(11)  UNSIGNED Нет    auto_increment              
Subdivision_id  int(11)   Нет  0                
Priority  int(11)   Нет  0                
Checked  tinyint(2)   Нет  1         
// эту часть создает админ через phpmyadmin (счас) или в панели администратора ( в буд.). Столбцов может быть скока угодно      
Date_s  date   Нет  0000-00-00                
Name_s  varchar(255)   Нет      


$row["Record_template"] достается из другой таблице и содержит примерно следующее
<tr>
     <td width=100 rowspan=3 align=center valign=top><img src="/myphp/pic/content/%%Pic_s%%" alt="%%Name_s%%"></td>
     <td width=280 valign=top height=13><div class=date>%%Date_s%%</div></td>
    </tr>
    <tr>
     <td width=228 valign=top height=18><div class=namesite><a href=# class=namesite>%%Name_s%%</а></div></td>
    </tr>
    <tr>
     <td width=228 height=13><div class=des>%%Desc_s%%</div></td>
    </tr>
    <tr><td colspan=2 height=10><img src="/myphp/pic/p.gif"></td></tr>

   
 
 автор: P@Sol[не вошел]   (16.09.2005 в 18:34)
 
   для: P@Sol   (22.08.2005 в 11:06)
 

было все замечательно, по вашему совету, а не использую eval...но вот тут оказывается в бд надо хранить не только html текст, но и php код...но как его теперь ввставлять?

   
 
 автор: cheops   (16.09.2005 в 19:39)   письмо автору
 
   для: P@Sol[не вошел]   (16.09.2005 в 18:34)
 

Здесь без eval() не обойтись, но вообще вы на скользкой дорожке... самое по себе совместное использование PHP и HTML является плохой практикой программирования, используемой не от хорошей жизни... если вы эту смесь будете его хранить в базе данных - отладка превратится в титаническую задачу, так как с проблемами вы будете сталкиваться в момент формирования страницы и причины возникновения ошибок будут не очевидными, так как код будет сидеть в базе данных и охватить его взором будет непосильной задачей.

   
 
 автор: P@Sol   (19.09.2005 в 14:22)   письмо автору
 
   для: cheops   (16.09.2005 в 19:39)
 

я делаю cms, поэтому при формированию дизайна сайта, иногда приходится использовать условия и циклы...т.е. вы советуете сделать типа %%если t=2 то%% заменять на if (t=2) {}?

   
 
 автор: cheops   (19.09.2005 в 18:46)   письмо автору
 
   для: P@Sol   (19.09.2005 в 14:22)
 

Да использование шаблонов в этом случае будет надёжнее чем PHP-кода - этим вы снизите вероятность возникновения непредвиденной ошибки на порядок.

   
 
 автор: P@Sol   (14.10.2005 в 14:09)   письмо автору
 
   для: cheops   (19.09.2005 в 18:46)
 

начал заниматся этой проблемой и понял что предложенный мною выход не правильный..а как реализуется конструкция if...else? получается надо самомму писать функцию, которая заменит эту кострукцию:(

   
 
 автор: cheops   (14.10.2005 в 14:52)   письмо автору
 
   для: P@Sol   (14.10.2005 в 14:09)
 

чего-то не очень понятно...

   
 
 автор: P@Sol   (14.10.2005 в 15:09)   письмо автору
 
   для: cheops   (14.10.2005 в 14:52)
 

тогда озвучиваю задачу....

информация для сайта хранится в бд....в одной таблице дизайн, в другой контент....так вот надо сделать дизайн таким образом, что если контента нет, то дизайн не выводился...

т.е.:
есть шапка и футер, которые выводятся всегда. Пользователь может добавить текст (обязательно), картинка, подпись к картинке, текст2, картинка2, подпись к картинке2...что надо сделать в шаблоне, чтобы если введено все оно все и выводилось, а если введен только текст - выводился текст, а остальное бы не выводилось...

надо использовать конструкцию, типа, if..else...но так как содержимое из бд не желательно засовывать в eval, нужна альтернатива...какая?

   
 
 автор: cheops   (14.10.2005 в 16:19)   письмо автору
 
   для: P@Sol   (14.10.2005 в 15:09)
 

 чтобы если введено все оно все и выводилось

Хм... всё-равно не очень понятно... задача очень смахивает использование на LEFT JOIN или IF() в MySQL... но нужен пример. Давайте новую тему заведём в разделе MySQL - и там всё обстоятельно разберём: что имеется, что хотелось бы и как это сделать. Просто у меня нет перед глазами ваших таблиц и мне сложно понять что требуется...

   
 
 автор: P@Sol   (17.10.2005 в 12:59)   письмо автору
 
   для: cheops   (14.10.2005 в 16:19)
 

продолжение темы
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8427&page=1

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования