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
<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 ikkeværdi
attributter. - I stedet for at tilføje
skjult
attribut tilelementer, 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
=$var ?>
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)) {