sql >> Database teknologi >  >> RDS >> Mysql

Hvordan gemmer tekstfelt på flere sprog i mysql med php?

HTML-del

Dine inputfelter i HTML-formularen skal have navne, som gør det muligt for dig at identificere sproget. I HTML kan du oprette feltnavne med firkantede parenteser. Når PHP modtager disse værdier, vil det behandle dem som et array. Du kan definere en sådan her:

<textarea name="email_content[fr]">

Så i PHP kan du få adgang til værdien ved hjælp af følgende syntaks:

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

Bemærkninger:

  • HTML har ikke type heller ikke værdi attributter.
  • I stedet for at tilføje skjult attribut til elementer, skal du blot angive type="hidden" .
  • Når du udsender dynamisk indhold i HTML, skal du passe på XSS-beskyttelse .
  • I stedet for du kan bruge den kortere syntaks

Din komplette HTML-formular kan så se nogenlunde sådan ud:

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

Når formularen er modtaget i PHP, din $_POST bør indeholde noget som dette:

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

PHP-del

For at gemme flere værdier i PHP ved hjælp af PDO skal du bruge en loop. Før løkken skal du forberede sætningen og bindeparametrene. PDO_stmt::bind_param() bruges sjældent, men i denne situation kan det gøre din kode renere. Du bør også udføre alle indsættelser i en transaktion.

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

Hvis du ønsker at bruge den enklere syntaks, kan du bruge PDO_stmt::execute() at videregive parametrene uden forudgående binding.

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

Den følgende linje kontrollerer, om indholdet er angivet, og om sproget er på den række af sprog, du har angivet.

if ($contents && in_array($lang, $languages, true)) {



  1. Hurtigste måde at indsætte 134675 værdier i ekstern database

  2. Brug af Python og MySQL i ETL-processen

  3. Brug af IS NULL eller IS NOT NULL på joinbetingelser - Teorispørgsmål

  4. Sådan trækkes privilegier fra i MySQL