编辑:更新 PHP 以解决 $_POST 处理程序中的数组到字符串转换问题,while 循环现在显示正确的条目数并正确替换字符串,但仅显示每个循环的数据库中第一个条目的替换值通过。
我目前正在构建一个使用模板系统向人们发送大量消息的系统。<{}> 标记中包含的值将被数据库结果中的值替换。例如,写入的消息可能是:
您好 <{firstname}><{lastname}>,感谢您在 <{date}> 购买 <{product}>。
替换后的结果为:
您好 Joe Bloggs,感谢您在 2013 年 1 月 1 日购买智能手机。
要替换的字段是从数据库中动态创建的,而数据库又是由用户上传 CSV 文档创建的。这意味着字段名称是不可预测的,我正在使用show columns from table
SQL 函数来填充我要查找的名称。
我正在努力从我发布的值中获取值以通过 mysql_assoc 循环替换字符串中的值。
表单输入的 HTML 是使用show columns
for each 结果的 PHP 循环创建的,每个输入看起来像:
<input type="hidden" name="fields[]" value="column name" />
还有一个文本区域:
<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
文件的开头声明。
帖子有效,并且创建的数组似乎是正确的,所以我认为我的问题在于 while 循环的内容。截至目前,它什么也不返回,我怎样才能将正确的替换值$name[]
放入$replacement
数组中,然后循环遍历,以便正确格式化每条消息?