Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menyimpan bidang teks banyak bahasa di mysql dengan php?

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 memiliki type atau value atribut.
  • Alih-alih menambahkan hidden atribut ke <input> elemen, cukup tentukan type="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)) {



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengambilan PDO tidak menghasilkan apa-apa

  2. Meminta MySQL dengan klausa IN menggunakan PHP

  3. Pilih poin dari database peta sesuai dengan radius

  4. Menghapus MySQL 5.7 Sepenuhnya

  5. Dengan VBA, temukan versi driver MySQL ODBC yang diinstal di Windows