Bagian HTML
Bidang masukan Anda dalam formulir HTML harus memiliki nama yang memungkinkan Anda mengidentifikasi bahasa. Dalam HTML Anda dapat membuat nama bidang dengan tanda kurung siku. Ketika PHP menerima nilai-nilai ini, ia akan memperlakukannya sebagai array. Anda dapat menentukan <textarea>
seperti ini:
<textarea name="email_content[fr]">
Kemudian di PHP Anda dapat mengakses nilai menggunakan sintaks berikut:
$french = $_POST['email_content']['fr'];
Catatan:
- HTML
<textarea>
tidak memilikitype
atauvalue
atribut. - Alih-alih menambahkan
hidden
atribut ke<input>
elemen, cukup tentukantype="hidden"
. - Saat mengeluarkan konten dinamis apa pun dalam HTML, Anda harus memperhatikan Perlindungan XSS .
- Alih-alih
<?php echo $var ?>
anda dapat menggunakan sintaks yang lebih pendek<?=$var ?>
Formulir HTML lengkap Anda mungkin akan terlihat seperti ini:
<form action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<input type="hidden" value="<?=$id?>" name="email_id">
<?php foreach ($languages as $lang) : ?>
<textarea value="1" name="email_content[<?=htmlspecialchars($lang)?>]" placeholder="<?=htmlspecialchars($lang)?>" value="<?=htmlspecialchars($lang)?>"></textarea>
<?php endforeach ?>
<button type="submit" name="save">Save</button>
</form>
Setelah formulir diterima dalam PHP $_POST
your Anda harus berisi sesuatu seperti ini:
array (
'email_id' => '12',
'email_content' =>
array (
'en' => '',
'fr' => 'French text',
'ru' => '',
),
'save' => '',
)
Bagian PHP
Untuk menyimpan banyak nilai dalam PHP menggunakan PDO, Anda perlu menggunakan loop. Sebelum loop, Anda harus menyiapkan pernyataan dan parameter pengikatan. PDO_stmt::bind_param()
jarang digunakan, tetapi dalam situasi ini dapat membuat kode Anda lebih bersih. Anda juga harus melakukan semua penyisipan di dalam transaksi.
$pdo->beginTransaction();
$stmt = $pdo->prepare("INSERT INTO emailtemplates (email_id,email_lang,email_content)
VALUES (:email_id, :email_lang, :email_content)");
$stmt->bindParam('email_id', $_POST['email_id']);
$stmt->bindParam('email_lang', $lang);
$stmt->bindParam('email_content', $contents);
foreach ($_POST['email_content'] as $lang => $contents) {
if ($contents && in_array($lang, $languages, true)) {
$stmt->execute();
}
}
$pdo->commit();
Jika Anda ingin menggunakan sintaks yang lebih sederhana, Anda dapat menggunakan PDO_stmt::execute()
untuk meneruskan parameter tanpa pengikatan sebelumnya.
$pdo->beginTransaction();
$stmt = $pdo->prepare("INSERT INTO emailtemplates (email_id,email_lang,email_content)
VALUES (:email_id, :email_lang, :email_content)");
foreach ($_POST['email_content'] as $lang => $contents) {
if ($contents && in_array($lang, $languages, true)) {
$stmt->execute([
'email_id' => $_POST['email_id'],
'email_lang' => $lang,
'email_content' => $contents,
]);
}
}
$pdo->commit();
Baris berikut memeriksa apakah konten telah disediakan dan bahasa berada dalam susunan bahasa yang Anda tentukan.
if ($contents && in_array($lang, $languages, true)) {