通过 PHP 使用 SQL 数据库中的数据填充 HTML 加载上的文本区域

问题描述 投票:0回答:1

我请求您在 HTML、JavaScript、jQuery、ajax、PHP 和 MySQL 方面提供帮助。遗憾的是,我无法提供任何代码(只有一个),因为我没有任何实际有效的代码。因为我不是编码员,所以这超出了我的理解范围。但我会尽力描述我希望实现的目标。

我有一个包含多个文本区域的 HTML 文件。这些文本区域具有唯一的 ID(如果有一个解决方案需要命名这些文本区域或为其添加标题,那么我没问题;如果这些文本区域需要包装到表单中,也没关系)。

我还有一个 MySQL 数据库,有两列 [ UUID , Translations ]。在“UUID”列中存储了与文本区域相同的 ID,在“翻译”列中存储了与这些唯一 ID 配对的文本字符串。

我想要实现的是获取与唯一 ID 相对应的“UUID”-“翻译”对,并在加载 html 时用“翻译”列的文本字符串填充文本区域。不需要显示 UUID,只需显示字符串。我不想手动指定 textareas+ID 或 ID-UUID 配对,因为 html 中的所有 ID 都将由第 3 方应用程序生成,该应用程序还创建数据库文件并使用这些 ID 创建所有记录。因此,也许需要一个迭代所有现有 ID 的解决方案。

我已经知道如何连接到我的数据库以及如何发送和保存记录到其中,所以我想知道如何拉取、如何获取特定数据以及如何用它们填充文本字段。

您能向我证明完成工作所需的代码吗?如果要求不是太多,我想得到一个完整的解决方案,因为对于独立的代码片段我一点运气都没有。 如有任何帮助,我们将不胜感激!

到目前为止我唯一的代码是这个 HTML:

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta title="TranslationFetcher">

            <!-- include bootstrap css -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" />
    </head>

    <body style="max-width: 100%">
        <div class='database-flex' style="max-width: 100%; margin-right: 2rem;"><div style="max-width: 100%; margin-right: 0rem;"><ul style="max-width: 100%; margin-right: 0rem;">

        <form method="POST" action="save.php">
            <label>Text1's translation</label>
            <textarea id="h599800e5g66d7g4de4gb030g6521266419fc" title="translation1" name="translationdata1" class="form-control translation-textarea"></textarea>

            <label>Text2's translation</label>
            <textarea id="hc17fc93fg968eg4591g8f31g0fe23110628a" title="translation2" name="translationdata2" class="form-control translation-textarea"></textarea>
            
            ...

            <label>Text999's translation</label>
            <textarea id="h435fb675gf2e0g46efga604gded8c83e213f" title="translation999" name="translationdata999" class="form-control translation-textarea"></textarea>
        </form>

        <!-- include bootstrap js -->
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
        
        <!-- include jquery js -->
        <script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
        
    </body>
</html>

过去两周我一直在浏览 StackOverflow,但无论我如何尝试将各个部分组合在一起,都没有效果。

更新#1

我假设这个 PHP 代码应该从数据库中获取必要的密钥对:

<?php
$link = mysqli_connect("localhost", "root", "", "TranslateProject");

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "SELECT UUID, Translations FROM TranslateProject";

if ($result = mysqli_query($link, $query)) {

    while ($row = mysqli_fetch_assoc($result)) {
        printf ("%s (%s)\n", $row["UUID"], $row["Translations"]);
    }

    mysqli_free_result($result);
}

mysqli_close($link);
?>

但我不知道该怎么办,

  • 如何从中生成 JSON(如果这是我应该做的),
  • 如何解析这个 JSON,
  • 如何将数据传递到 Javascript 或 HTML 本身,
  • Javascript 可以做到这一点,
  • 以及如何使此脚本使用相应的文本数据填充文本区域。

我尝试了很多其他问题中可用的组合,但我完全迷失了。

php html jquery ajax mysqli
1个回答
0
投票

我会为你解答这些问题,但你也确实需要做一些调查

将循环更改为

$query = "SELECT UUID, Translations FROM TranslateProject"; 
$data = array(); 
if ($result = mysqli_query($link, $query)) {  
  while ($row = mysqli_fetch_assoc($result)) {   
    $data[] = array('UUID' => $row["UUID"], 'Translations' => $row["Translations"]);  
  } 
}  
$jsonData = json_encode($data); 
echo $jsonData;

假设生成

[
    {
        "UUID": "h599800e5g66d7g4de4gb030g6521266419fc",
        "Translations": "Translation text 1"
    },
    {
        "UUID": "hc17fc93fg968eg4591g8f31g0fe23110628a",
        "Translations": "Translation text 2"
    },
    // ... other translations
]

然后你可以在 HTML 页面头部执行此操作:

window.addEventListener('DOMContentLoaded', () => { // when page has loaded
  fetch('myTranslations.php')
  .then(response => response.json())
  .then(translations => {
    translations.forEach(translation => {
    const textarea = document.getElementById(translation.UUID);
    if (textarea) {
      textarea.value = translation.Translations;
    }
  });
});
© www.soinside.com 2019 - 2024. All rights reserved.