【问题标题】:Loading values into text area from database and then edit/update database with new values in PHP?将值从数据库加载到文本区域,然后在 PHP 中使用新值编辑/更新数据库?
【发布时间】:2023-04-09 04:13:01
【问题描述】:

我正在尝试为常见问题制作一个 CMS。

我有一个页面可以将问题和答案加载到具有独特想法的文本区域中,并且计划也编辑这些文本区域,然后将它们插入数据库中。

我也希望能够将新的常见问题解答添加到数据库中。

现在我正在尝试使用 ON DUPLICATE KEY UPDATE.. 来完成此操作,但它无法正常工作。

index.php

    <form id='faqadd' action='faqsql.php' method='POST'>                      

                                        <?PHP
    include 'include.php';



$query = 'SELECT * FROM FAQ';
      $result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());
      $val = 1;
    while($row=mysql_fetch_array($result)){



        echo '<div class="faq['.$val.']"><label> Question </label><input type="hidden" name="id['.$val.']"></input><textarea rows="8" cols="50" id="q['.$val.']" >'.$row["question"].'</textarea><br />
       <label> Answer </label><textarea rows="4" cols="50" name="a['.$val.']"  >'.$row["answer"].'</textarea></div><br />';

        $val++; 
         }
         echo '<h3 style="color:white;">New FAQ </h3>';
  echo '<div class="faq['.$val.']"><label> Question </label><textarea rows="8" cols="50" id="q['.$val.']" ></textarea><br />
       <label> Answer </label><textarea rows="4" cols="50" name="a['.$val.']"  ></textarea></div><br />';


    ?>
        <input type='submit' name='ADD' value='ADD' id='ADD'>
                </form>

faqsql.php

foreach ($_POST['id'] as $id) {
    if ($id) {
        $query = 'INSERT INTO FAQ ("id", "question", "answer") VALUES ("' . $id . '","' . $_POST["q"] . '", "' . $_POST["a"] . '")
ON DUPLICATE KEY UPDATE "question" = "' . $_POST["q"] . '", "' . $_POST["a"] . '"';
        $result = mysql_query($query) or die("Error in query: $query. " . mysql_error());
        echo $id . " has been added </br > ";
    }
}
echo '<a href="editfaq.php">Back FAQ Manager </a>';

接下来我应该尝试什么?

更新的代码。还是不行。

【问题讨论】:

  • 主要问题是什么?你有什么错误吗?
  • 我在发布数组时有点失落。 $_POST['faq'] 为空
  • 好像没有提交表单。 &lt;form&gt; 标记内的第一行中有一个额外的 single quotation
  • faq 是一个 &lt;div&gt; 类,因此它不会作为表单元素发布。
  • 您需要为 textarea 控件指定一个名称...认为 q[' . $val . '] 就是您的意思。

标签: php mysql sql textarea


【解决方案1】:

您的标记似乎有问题。

我认为您的 while 循环中的输出应该更像这样:

echo '
    <div>
        <label>Question</label>
        <textarea name="faq['. $val .'][q]" rows="8" cols="50"></textarea>
        <br />
        <label>Answer</label>
        <textarea name="faq['. $val .'][a]" rows="4" cols="50"></textarea>
    </div>
';

然后在 faqsql.php 中,你的代码会更像这样:

foreach ($_POST['faq'] as $id=>$faq) {
    $id = mysqli_real_escape_string($id);
    $question = mysqli_real_escape_string($faq['q']);
    $answer = mysqli_real_escape_string($faq['a']);

    $query = "
        INSERT INTO FAQ (id, question, answer) VALUES ('$id', '$question', '$answer')
        ON DUPLICATE KEY UPDATE question = '$question', answer = '$answer'
    ";
// $link is your DB connection handle, returned by mysqli_connect()
    $result = mysqli_query($link, $query) or die("Error in query: $query. " . mysqli_error($link));
    echo "$id has been added <br />";
}

此外,您应该避免使用 mysql_* 函数,因为它们已被弃用。而是查找mysqliPDO

【讨论】:

  • 感谢您的回复。我收到了这个错误,但我不太明白
  • 查询错误:INSERT INTO FAQ ("id", "question", "answer") VALUES ("1","Does it work?","I hope so!") ON DUPLICATE关键更新“问题”=“它有效吗?”,“答案”=“我希望如此!”。您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 '"id"、"question"、"answer") 附近使用的正确语法 VALUES ("1","Does it work?", "I hope so!") ON DUPLIC' 在第 1 行
  • 检查表中的主键。
  • @matture 您的语法错误是因为您在列名周围使用了双引号。要么用 backtics 替换它们,要么直接删除它们。
  • 感谢 Travesty3 的回复,使用您的代码更新后我仍然收到此错误。查询错误:INSERT INTO FAQ (id, question, answer) VALUES ('1', 'Does it work?', 'Maybe?') ON DUPLICATE KEY UPDATE question = 'Does it work?', answer = 'Maybe? '。
【解决方案2】:
<textarea name=something id=someting>your php code over here(connect to database, select data and print the information that you had select into the textarea)</textarea>

例如:

<textarea name="someting" id="someting" rows="21" cols="70">
         <?php
        //connect to database
        $sql=mysql_query("SELECT data FROM table");     
            if(mysql_num_rows($sql)) {
              $row = mysql_fetch_row($sql);
              echo nl2br($row['0']);
        }
        ?>
 </textarea>

【讨论】:

    【解决方案3】:

    要将值加载到 textarea,只需将 &lt; textarea value = anysomething &gt;&lt; /textarea&gt; 更改为 &lt;textarea &gt; something &lt; /textarea&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多