Xpoint
   [напомнить пароль]

Регулярное выражение

Метки: [без меток]
2012-08-28 10:45:22 [обр] domac(3/3)[досье]

Здравствуйте

Есть код

$report .=<<<EOF
$ii1[1]=str_replace("'", "`", $_REQUEST['36']);
$ii1[2]=str_replace("'", "`", $_REQUEST['37']); 
$ii1[3]=str_replace("'", "`", $_REQUEST['38']); 


if(@mysql_num_rows($result) > 0){
$res1=@mysql_query("update table set
   tab1='$ii1[1]',
   tab2='$ii1[2]',
   tab3='$ii1[3]',
   modify_time='$modify_time'
 where tabid='$tabid'");
EOF;

Нужно составить регулярное выражение, чтобы в итоге строка имела вид

$report .=<<<EOF
$ii1[1]=str_replace("'", "`", $_REQUEST['tab1']);
$ii1[2]=str_replace("'", "`", $_REQUEST['tab2']); 
$ii1[3]=str_replace("'", "`", $_REQUEST['tab3']); 


if(@mysql_num_rows($result) > 0){
$res1=@mysql_query("update table set
   tab1='$ii1[1]',
   tab2='$ii1[2]',
   tab3='$ii1[3]',
   modify_time='$modify_time'
 where tabid='$tabid'");
EOF;

То есть tab1, tab2, tab3 соответственное перенеслись в $_REQUEST.

спустя 6 часов [обр] Филипп Ткачев(20/112)[досье]
$report = str_replace("$_REQUEST['36']", "$_REQUEST['tab1']", $report);
спустя 24 минуты [обр] domac(3/3)[досье]
Филипп Ткачев[досье] Этих tabов тысячи и все они имеют разные имена. Нужно каким-то образом автоматизировать замену.
спустя 6 минут [обр] Филипп Ткачев(20/112)[досье]
Укажите точные правила замены.
спустя 8 минут [обр] domac(3/3)[досье]
Филипп Ткачев[досье] Например имеем tab1='$ii1[1]', они сохраняются в переменные, т.е. tab1=$1 $ii1[1]=$2
$pattern = "/(\S+)=\'(\S+)\'/"; Далее идет поиск по коду,
выбирается строка где есть $2 ($ii1[1]) - $ii1[1]=str_replace("'", "`", $_REQUEST['36']);
После этого производится замена $_REQUEST['36'] на $_REQUEST['$1']. И так продолжается до modify_time='$modify_time'.
спустя 1 час 35 минут [обр] Филипп Ткачев(20/112)[досье]
Если честно, то приведенный выше код лучше выкинуть куда-подальше.
Для начала вам нужно избавиться от $ii1[1]=str_replace("'", "`", $_REQUEST['tab1']);, т.к. это потенциальная брешь в безопасности. Используйте mysql_real_escape_string().
Если я правильно понимаю задачу, то вначале надо вычленить поля таблицы, а потом их всунуть в $_REQUEST.
Тогда код нужно фрагментировать на запросы, из запросов находить имена полей, потом идя вверх коду производить замены в обратном порядке.
Тут немного больше, чем простые регулярки.
спустя 1 час 55 минут [обр] domac(3/3)[досье]
Филипп Ткачев[досье] Что значит код нужно фрагментировать на запросы? Пример можете привести?
спустя 2 часа 15 минут [обр] Филипп Ткачев(20/112)[досье]
Ну у вас есть кусок, который принимает данные от пользователя и далее выполняет запрос к базе. Внутри этого куска есть запрос к самой базе - внутри mysql_query. Из него получите поля. Хотя х.з., я ведь ваши исходники не видел, может там не только это.
Powered by POEM™ Engine Copyright © 2002-2005