编辑:更新PHP以解决$ _POST处理程序中的数组到字符串转换问题,while循环现在显示正确数量的条目并正确替换字符串,但仅显示每个循环的数据库中第一个条目的替换值。preg_replace在一个字符串中的值与来自mysql assoc while循环的值
我目前正在构建一个使用模板系统批量发送消息的系统。 < {}>标签中包含的值将被数据库结果中的值替换。例如,写入的信息可能是:
您好< {}名字> < {}姓氏>,感谢您购买< {}产品的>上< {日期和时间}>。
随着替换结果为:
你好李四,感谢您在2013年1月1日购买的智能手机。
要替换的字段是从数据库动态创建的,而数据库又是由用户上传CSV文档创建的。这意味着字段名称是不可预测的,我使用show columns from table
SQL函数来填充我将要查找的名称。
我很努力从我发布的值中获取值,以通过mysql_assoc循环替换字符串中的值。
的形式输入的HTML与来自show columns
每个结果的PHP环路创建,每个输入看起来像:
<input type="hidden" name="fields[]" value="column name" />
而且一个textarea:
<textarea name="message"></texarea>
我的PHP处理这是:
if(isset($_POST['fields'])) {
$strings = array();
foreach($fields as $f) {
$strings[] = "/<{".$f."}>/";
}
$replace = $_POST['fields'];
}
而当前循环是:
$query = "select * from $table_name";
$result = mysql_query($query) or die(mysql_error());
$string = $_POST['message'];
$pattern = $strings;
while($name = mysql_fetch_array($result, MYSQL_ASSOC)) {
foreach ($replace as $r) {
$replacement[] = $name[$r];
}
$message = preg_replace($pattern, $replacement, $string);
echo "<p>$message</p>";
}
$table_name
在文档的开头声明。
该文章的作品,并创建阵列似乎是正确的,所以我认为我的问题是与 内循环。到目前为止,它什么都不返回,我怎样才能得到$name[]
的正确替换值到$replacement
数组中,然后循环遍历,这样每个消息的格式都是正确的?
'$ strings =“/<{".$_POST['fields']。“}> /”;' - 数组到字符串的转换,看看错误日志 – BattleBit 2013-02-19 11:38:04
我修正了:'$ fields = $ _POST ['fields']; \t \t $ strings = array(); \t \t的foreach($字段$ F){ \t \t \t $串[] = “/ <{".$f."}> /”; \t \t}' 但它现在循环条目总数的结果的第一个条目。 – Matt 2013-02-19 12:02:48