編集: PHPを更新して、$ _ POSTハンドラーの配列から文字列への変換の問題を解決しました。whileループは正しい数のエントリを表示し、文字列を正しく置き換えますが、各ループのデータベースの最初のエントリの置き換えられた値のみを表示します終えた。
私は現在、テンプレートシステムを使用して人々に一括メッセージを送るシステムを構築しています。<{}>タグに含まれる値は、データベース結果の値に置き換えられます。たとえば、書き込まれるメッセージは次のようになります。
こんにちは<{firstname}><{lastname}>、<{date}>に<{product}>をご購入いただきありがとうございます。
置き換えられた結果は次のとおりです。
こんにちはジョーBloggs、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
ドキュメントの先頭で宣言されています。
投稿は機能し、作成された配列は正しいように見えるので、私の問題はwhileループの内容にあると思います。現在のところ、何も返されません。配列に正しい置換値を取得し、$name[]
ループ$replacement
して各メッセージが正しくフォーマットされるようにするにはどうすればよいですか?