簡體   English   中英

通過PHP將數據從多語言HTML表單插入MySQL表

[英]Inserting data to MySQL table from multi-language HTML form via PHP

我有如下的HTML表單:

樣本表格

目前,將來會有3種語言,前綴_lang字段將動態生成。

這些是輸入字段( name_enname_ru等是占位符)。

MySQL表看起來像:

Parent

Id    UserId

Details

Id    ParentId    Name     Description    Language

我想這樣向Details插入數據:

Id    ParentId    Name     Description    Language
1     1           FooEn    FooBarEn       EN
2     1           FooRu    FooBarRu       RU
3     1           FooFr    FooBarFr       FR

並像這樣的Parent表:

Id    UserId
1     123

提交表單后,我可以將數據成功插入到Parent表中。 我在將此數據插入到Details表中時遇到了問題。 我不知道如何將name_endescription_en合並為1個條目。

在PHP中,我具有帶有所有可能語言的$language_array (對於本示例來說是enrufr ),我也在使用substr從數據中獲取語言代碼,但是接下來呢? 我應該以某種方式使用foreach嗎?

foreach($language_array as $k=>$v) {
   // there I've missed my mind
}

我第一次遇到這樣的HTML表單結構。 請給我任何建議。

最簡單的解決方案是從$_POST數據中檢索表單字段。

假設您的$_POST數據具有以下結構。

Array
(
    [name_en] => name_en
    [name_ru] => name_ru
    [name_fr] => name_fr
    [description_en] => description_en
    [description_ru] => description_ru
    [description_fr] => description_fr
)

然后,您可以使用$language_array進行迭代並提取相關的$_POST表單字段值,如下所示: $_POST['fieldname_' . $lang] $_POST['fieldname_' . $lang]

$languages = ['en', 'fr', 'ru'];
$sql = 'INSERT INTO `table_name` (`Name`, `Description`, `Language`) VALUES (?, ?, ?)';
if ($stmt = mysqli_prepare($conn, $sql)) {
    mysqli_stmt_bind_param($stmt, 'sss', $name, $description, $language);
    foreach ($languages as $lang) {
       $name = array_key_exists('name_' . $lang, $_POST) ? $_POST['name_' . $lang] : null;
       $description = array_key_exists('description_' . $lang, $_POST) ? $_POST['description_' . $lang] : null;
       $language = strtoupper($lang);
       mysqli_stmt_execute($stmt);
    }
}

有關mysqli和准備好的語句的用法的詳細信息,請參見PHP文檔


一種替代解決方案是創建要顯示給用戶的表單域列表。

$fields = ['name' => 'Name', 'description' => 'Description'];
$languages = ['en', 'ru', 'fr'];

然后,您可以遍歷每個字段和語言以在瀏覽器中呈現它們。

請注意,輸入字段名稱以其相關語言作為字段數組的前綴,例如LANG[field]

foreach ($fields as $fieldName => $section) {
    echo '<fieldset>';
    echo '<legend>' . $section. '</legend>';
    foreach ($languages as $language) {
        $inputName = strtoupper($language) . '[' . $fieldName . ']';
        $placeholder = $fieldName  . '_' . $language;
        echo '<p>';
        echo '<label>';
        echo '<input type="text" name="' . $inputName . '" placeholder="' . $placeholder . '"/>';
        echo '</label>';
        echo '</p>';
    }
    echo '</fieldset>';
}

結果表格:

表格范例

您的$_POST數據將具有以下結構

Array
(
    [EN] => Array
        (
            [name] => name_en
            [description] => description_en
        )

    [RU] => Array
        (
            [name] => name_ru
            [description] => description_ru
        )

    [FR] => Array
        (
            [name] => name_fr
            [description] => description_fr
        )

)

然后,通過迭代$_POST表單值,您可以為每種語言插入單獨的條目,作為與語言相關的表單字段的數組。

$sql = 'INSERT INTO `table_name` (`Name`, `Description`, `Language`) VALUES (?, ?, ?)';
if ($stmt = mysqli_prepare($conn, $sql)) {
    mysqli_stmt_bind_param($stmt, 'sss', $name, $description, $language);
    foreach ($_POST as $language => $fields) {
       $name = array_key_exists('name', $fields) ? $fields['name'] : null;
       $description = array_key_exists('description', $fields) ? $fields['description'] : null;
       mysqli_stmt_execute($stmt);
    }
}

免責聲明:由於幾乎沒有提供有關parent表與其關聯或關聯的信息,因此我的回答中未包含該信息。 我認為OP將能夠確定如何操縱答案以滿足將父項添加到查詢中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM