Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przechowywać pole tekstowe w wielu językach w mysql za pomocą php?

Część HTML

Twoje pola wejściowe w formularzu HTML muszą mieć nazwy, które pozwolą Ci zidentyfikować język. W HTML możesz tworzyć nazwy pól w nawiasach kwadratowych. Gdy PHP otrzyma te wartości, potraktuje je jako tablicę. Możesz zdefiniować <textarea> tak:

<textarea name="email_content[fr]">

Następnie w PHP możesz uzyskać dostęp do wartości za pomocą następującej składni:

$french = $_POST['email_content']['fr'];

Uwagi:

  • HTML <textarea> nie ma type ani value atrybuty.
  • Zamiast dodawać hidden atrybut do <input> elementy, po prostu określ type="hidden" .
  • Wyprowadzając dowolną zawartość dynamiczną w HTML, należy zadbać o Ochrona XSS .
  • Zamiast <?php echo $var ?> możesz użyć krótszej składni <?=$var ?>

Twój pełny formularz HTML może wtedy wyglądać mniej więcej tak:

<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>

Po otrzymaniu formularza w PHP Twój $_POST powinien zawierać coś takiego:

array (
  'email_id' => '12',
  'email_content' => 
  array (
    'en' => '',
    'fr' => 'French text',
    'ru' => '',
  ),
  'save' => '',
)

Część PHP

Aby zapisać wiele wartości w PHP za pomocą PDO, musisz użyć pętli. Przed pętlą należy przygotować instrukcję i parametry powiązania. PDO_stmt::bind_param() jest rzadko używany, ale w tej sytuacji może sprawić, że Twój kod będzie czystszy. Powinieneś również wykonać wszystkie wstawienia wewnątrz transakcji.

$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();

Jeśli chcesz użyć prostszej składni, możesz użyć PDO_stmt::execute() aby przekazać parametry bez wcześniejszego wiązania.

$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();

Poniższy wiersz sprawdza, czy zawartość została dostarczona, a język znajduje się w podanej tablicy języków.

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. Przechowywanie JSON w bazie danych a posiadanie nowej kolumny dla każdego klucza

  2. Pozostałe w PostgreSQL, MS SQL Server, MySQL i SQLite

  3. Jak pogrupować według kolejności DESC

  4. Zbiorcza aktualizacja MySQL

  5. Zapytanie o interwały dat SQL