Есть ли возможность передать переменные как стринг? Пример: мне хотелось бы так сделать Код (Text): if(!empty($this->data['timesearch'])) { $Sdatefor = ''..."; } else $Sdatefor = 'date("m")-$month,date("d")-$day,date("Y")-$year'; $datum = mktime(0, 0, 0, $Sdatefor);
у меня идет определение через post с какого времени по какое и с какими интервалами годы месяцы дни, опрашивается бд после чего используется ее массив где в промежутках идет проверка на пустые поля с бд по тем же интервалам и вставляется нужный стринг.. снова case неудобный вставлять?
Можно выполнить стркоу как код с помощью функции eval. PHP: <?php $for = '$perem = 12; $perem <=0; $perem--'; $code = 'echo "Preved!";' $source = 'for('.$for.'){'.$code.'}'; eval($source); Если скрипт небольшой, то вызов eval замедлит его выполнение почти в два раза (т.к. происходит лишний запуск препроцессора php). Ну и вообще, почти любую задачу можно решить без eval.
)) вот кусок сокращенного кода, кокое оптимальное решение для такой проблемы придумать? Был бы рад при советах в улучшениях )) PHP: if(!empty($this->data['timesearch'])) { [color=red]$Sdatefor = 'date(mktime(0, 0, 0, $this->data["timesearch"]))';[/color] } else [color=red]$Sdatefor = 'date("m")-$month,date("d")-$day,date("Y")-$year';[/color] switch ($this->data['time']) { case day: $this->betweenvor = "%d.%m.%Y"; $this->betweennach = "1 MONTH), 1"; $this->time = "day(28)"; $dayinterval = 31; break; case month: $this->betweenvor = "%m.%Y"; $this->betweennach = "1 YEAR), DAYOFYEAR(CURDATE())"; $this->time = "month(12)"; $monthinterval = 12; break; case year: $this->betweenvor = "%Y"; $this->betweennach = "10 YEAR), DAYOFYEAR(CURDATE())"; $this->time = $this->year('10'); $yearinterval = 15; break; } //Anfang $qQuery = mysql_query(' SELECT COUNT(sms_id) as anzahl, DATE_FORMAT( FROM_UNIXTIME( sms_zeit ) , "'.$this->betweenvor.'" ) AS date, SUM(sms_preis) as cost FROM tbl_sms WHERE (sms_zeit) BETWEEN UNIX_TIMESTAMP(SUBDATE(SUBDATE(NOW(), INTERVAL '.$this->betweennach.')) AND UNIX_TIMESTAMP(NOW()) GROUP BY date ORDER BY sms_zeit '); $this->data =''; echo mysql_error(); while($rQuery=mysql_fetch_array($qQuery)) { //Leere Ausgabe for($year = $yearinterval-1; $year >= 0; $year--) { $datum = date(str_replace("%", "", $this->betweenvor), mktime(0, 0, 0, [color=red]$Sdatefor[/color])); //echo $datum." ".$rQuery['date']."<br>"; if($datum != $rQuery['date']) { $this->data .= "<item name='".$datum."' anzahl='0 SMS / 0 ?'/>"; $yearinterval = $year; } else { $year=0; $yearinterval--; } } for($month = $monthinterval-1; $month >= 0; $month--) { $datum = date(str_replace("%", "", $this->betweenvor), mktime(0, 0, 0, [color=red]$Sdatefor)[/color]); //echo $datum." ".$rQuery['date']."<br>"; if($datum != $rQuery['date']) { $this->data .= "<item name='".$datum."' anzahl='0 SMS / 0 ?'/>"; $monthinterval = $month; } else { $month=0; $monthinterval--; } } for($day = $dayinterval-1; $day >= 0; $day--) { $datum = date(str_replace("%", "", $this->betweenvor), mktime(0, 0, 0, [color=red]$Sdatefor[/color])); //echo $datum." ".$rQuery['date']."<br>"; if($datum != $rQuery['date']) { $this->data .= "<item name='".$datum."' anzahl='0 SMS / 0 ?'/>"; $dayinterval = $day; } else { $day=0; $dayinterval--; } } //Ausgabe $this->data .= "<item name='".$rQuery['date']."' anzahl='".$rQuery['anzahl']." SMS / ".$rQuery['cost']." ?'/>"; }
Нет смысла постить код в таких количествах. Его никто не прочтет. Просто своими словами озвучить стоящую проблему, а не то, как пытались ее решить.
Проблема это например: Пользователь задает интервал дат и нужно выбрать данные из БД в этом интервале. А это.... Это не проблема - это бред. Разбирайтесь самостоятельно.
ну спасибо )) Я поехал дальше )) я как продвинутый новичек хотел решить проблему, разве я виноват что не умею. Научите пожалуйста вместо посылательства - как поднятся до "любителя" ) И я вам скажу Спасибо )