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

Форум PHP

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

 

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

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

тема: Как заменить переменные в строке на значения.
 
 автор: epc   (21.06.2006 в 16:48)   письмо автору
 
 

Считываю построчно данные из файла и исполняю их в mysql

например строка считываю строку из другого файла.
$line = CREATE TABLE '".$dbprefix."anketa'

и исполняю в текущем файле.
mysql_query($line);

как заменить $dbprefix на его значение? это необходимо сделать в текущем файле.
т.е как получить если $dbprefix = "ww1_";
mysql_query(CREATE TABLE 'ww1_anketa' )

   
 
 автор: Unkind™   (21.06.2006 в 16:57)   письмо автору
 
   для: epc   (21.06.2006 в 16:48)
 

Например, можно так, если понял суть проблемы:

<?php
//Загоняем все префиксы в один массив
$prefix = array(
"ww1",
"ww2",
"prefix",
"prefix2"
);
foreach(
$prefix as $pref)
{
mysql_query("CREATE TABLE '".$pref."_anketa';");
}
echo 
"Было создано ".count($prefix)." таблиц"//4
?>

   
 
 автор: valenok   (21.06.2006 в 16:58)   письмо автору
 
   для: Unkind™   (21.06.2006 в 16:57)
 

я думаю он не имел ввиду создать 15 таблиц

   
 
 автор: Unkind™   (21.06.2006 в 17:00)   письмо автору
 
   для: valenok   (21.06.2006 в 16:58)
 

я думаю он не имел ввиду создать 15 таблиц
Не понял...

   
 
 автор: epc   (21.06.2006 в 17:07)   письмо автору
 
   для: valenok   (21.06.2006 в 16:58)
 

дело в том что я не могу написать
mysql_query("CREATE TABLE '".$pref."_anketa' ;");

я могу написать
mysql_query($line)
а $line в свою очередь будет равна "CREATE TABLE '".$pref."_anketa' ;" эти данные считываются из текстового документа, в котором эта переменнная просто набор символов.

так вот есть ли функция которая сможет сделать так

$pref = "ww1";
$line2 = ФУНКУЦИЯ_ЗАМЕНЯЮЩАЯ_ПЕРЕМЕННЫЕ_НА_ЗНАЧЕНИЯ ($line);

и $line в итоге будет "CREATE TABLE 'ww1_anketa' ;

   
 
 автор: cheops   (21.06.2006 в 18:26)   письмо автору
 
   для: epc   (21.06.2006 в 17:07)
 

Такая функция есть - str_replace(), но для её работы потребуется подстрока замены, т.е. мы не можем просто вставить - нужно существующую подстроку заменить на новую
<?php
  $line 
"CREATE TABLE 'ww1_anketa' ";
  
$line str_replace("ww1_","ww2_",$line);
  echo 
$line// "CREATE TABLE 'ww2_anketa' "
?>

   
 
 автор: valenok   (21.06.2006 в 18:32)   письмо автору
 
   для: cheops   (21.06.2006 в 18:26)
 

Это не свосем то что ему надо.
Перемнная $prefix генерируется скриптом.
Дальше и зфайла достаём строку: CREATE TABLE $prefix tbl
Тоесть надо создать таблицу запросом CREATE TABLE $prefix tbl
только заменить "$prefix" на значение переменной сгенерированной во время исполнения скрипта.

А хотя вообще можно такое:

<?php 
  $line 
"CREATE TABLE 'ww1_anketa' "
  
$line str_replace("$prefix",$prefix,$line); 
  echo 
$line// "CREATE TABLE 'ww2_anketa' " 
?>

   
 
 автор: komex   (21.06.2006 в 17:01)   письмо автору
 
   для: epc   (21.06.2006 в 16:48)
 

А откуда берется значение этого префикса?

   
 
 автор: valenok   (21.06.2006 в 17:01)   письмо автору
 
   для: epc   (21.06.2006 в 16:48)
 

А.

 <?
$line
=eval("CREATE TABLE ".$dbprefix."anketa");

   
 
 автор: komex   (21.06.2006 в 17:03)   письмо автору
 
   для: valenok   (21.06.2006 в 17:01)
 

Я думаю, в таком случае надо даже так:

<? 
$line
="CREATE TABLE ".eval($dbprefix)."anketa";
?>

   
 
 автор: Unkind™   (21.06.2006 в 17:03)   письмо автору
 
   для: valenok   (21.06.2006 в 17:01)
 

Мда...Зачем это будет нужно только? Для создания возможной дыры в скрипте чтоли?


ФУНКУЦИЯ_ЗАМЕНЯЮЩАЯ_ПЕРЕМЕННЫЕ_НА_ЗНАЧЕНИЯ ($line);
А зачем писать такую функцию?? Просто вместо этих переменных пишите $line

   
 
 автор: epc   (21.06.2006 в 17:22)   письмо автору
 
   для: Unkind™   (21.06.2006 в 17:03)
 

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

   
 
 автор: valenok   (21.06.2006 в 17:27)   письмо автору
 
   для: epc   (21.06.2006 в 17:22)
 



$lina = eval($line);
mysql_query($line);

   
 
 автор: epc   (21.06.2006 в 17:30)   письмо автору
 
   для: epc   (21.06.2006 в 17:22)
 

Сработало следующим образом

выполнил функцию
eval("\$line = \"$line\";");
и все названия переменных в $line поменялись на значения.

но вот загвоздка
если берем строку
CREATE TABLE '$dbprefix anketa' - с пробелом, то после выполнения функции отлично меняет на
CREATE TABLE 'ww1_ anketa'

но как сделать, чтобы не оставалось пробела ?

причем текстовый файл т.е. строку CREATE TABLE '$dbprefix anketa' я могу менять как угодно

   
 
 автор: valenok   (21.06.2006 в 17:36)   письмо автору
 
   для: epc   (21.06.2006 в 17:30)
 

CREATE TABLE '$dbprefix'.'anketa'

   
 
 автор: epc   (21.06.2006 в 17:50)   письмо автору
 
   для: valenok   (21.06.2006 в 17:36)
 

а как лучше , как у тебя или как у меня ?

   
 
 автор: valenok   (21.06.2006 в 17:59)   письмо автору
 
   для: epc   (21.06.2006 в 17:50)
 

Лучше как тебе удобней
если скрипт не большой
--
Разница может быть только во времени.

   
 
 автор: epc   (21.06.2006 в 17:38)   письмо автору
 
   для: epc   (21.06.2006 в 17:30)
 

Сработало следующим образом строку в текстовом файле поменял на


CREATE TABLE '{$dbprefix}anketa' 


всем большое спасибо, особенно валенку, понимаешь все так как надо и с полуслова.

   
Rambler's Top100
вверх

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