編輯:更新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