【问题标题】:Create input fields dynamically with values and column names from database使用数据库中的值和列名动态创建输入字段
【发布时间】:2012-07-01 15:18:38
【问题描述】:

我使用列中的信息创建输入,例如,如果一个字段称为about_content,它会输出一个带有输入字段的 About Content 标签。这适用于插入,但是我想使用类似于UPDATE 的代码,并且我想向用户显示在数据库中输入的字段的当前值。例如,如果about_content = Hello World! 我希望输入值反映这一点。有没有办法动态地做到这一点?

<?php

require('dbc.php');

mysql_select_db($db);
$resultInput = mysql_query("SHOW COLUMNS FROM about WHERE Field NOT IN 
('id', 'created', 'date_modified', 'last_modified', 'update', 'type', 'bodytext') 
AND Field NOT REGEXP '_image'"); // selects only the columns I want

$result = mysql_query("SELECT * FROM about WHERE id=".$_GET['id']); // values I want to put into the values for <input>

while ($row = mysql_fetch_assoc ($result) && $column = mysql_num_rows ($resultInput)) {

    foreach($row as $column => $value){
        echo '<label>'.$column.'<input name="'.$column.'" type="input" value="'.$value.'"></label><br>';
    }
}
?>

【问题讨论】:

  • SHOW COLUMNS 在 sql 查询中有效吗?
  • 是的,目前每个部分都可以完美地单独工作,但问题是如何将输入与值结合起来
  • 您当前将值存储在哪里?
  • 值存储在数据库中,当前为localhost
  • 所以编写一个查询来从数据库中获取值,就像您能够打印标签一样,您可以在输入框中打印值。

标签: php mysql arrays


【解决方案1】:

看到你用箭头标记的地方了吗?而不是字符串(1),将value 设置为您在$result(而不是$resultInput)中读取的相应数据库值。

方法如下:将mysql_fetch_assoc 用于SELECT 查询,而不是mysql_fetch_row。只有一行,所以在您开始生成表单之前获取它。然后,您将拥有一个包含行值的命名数组,您可以按名称获取每个字段并将其放入表单中。

如果您不明白如何操作,请查看 mysql_fetch_assoc 的 php 文档。

就像你在上一个问题中所说的那样,逃避你的$_GET['id']。你在乞求被打败!

【讨论】:

  • 谢谢,在我让主要功能工作后我会担心安全性......而(1)只是让人们可以理解我想要做什么......我仍然很困惑如何将 db 值设置为 $result,仅当我有一个带有 $resultInput 的 while 函数来获取列名时
【解决方案2】:

mysql_fetch_field

if (mysql_num_rows($result) > 0) {
//loop creates inputs
//make $resultInput object to array.
$i=0;
while ($row = mysql_fetch_assoc($result)) {
    $meta = mysql_fetch_field($result, $i);
    if(in_array($meta->name, $resultInput )){
    echo '<div class="wrapper"><label>' . ucfirst(str_replace('_', ' ',$meta->name)) . 
    '<br><input name="' . $meta->name . 
    '" type="text" class="input" value="$row[$meta->name]"><br></label></div>';
    }
    $i++;
 }
}

【讨论】:

  • 警告:in_array() 期望参数 2 是数组,资源在第 17 行的 C:\xampp\htdocs\test.php 中给出
  • 我说过将 $resultInput 对象转换为数组,即 $resultInput=$resultInput->result()
  • 它什么都不解析...当我将值更改为例如 2 时,它与 $i 有关,我得到了我的第二个字段。还有我的数组 $resultInput = array("page_header", "sub_header", "content_short", "content");
  • @Alex:我还没有测试过。你现在可能已经理解了逻辑。我已经更新了答案。检查一下。
  • 仍然没有输出任何东西。逻辑是有道理的,但我找不到错误。
【解决方案3】:
<?php
include('db.php');
if (isset($_POST['btn'])) {

    $dcolumn = $_POST['dyncolumns'];
    $dvalue = $_POST['dynfields'];

    $name = $_POST['name'];
    $mobile = $_POST['mobile'];
    $address = $_POST['address'];
    $query = "INSERT into addtable(name,mobile,address)VALUES('" . $name . "','" . $mobile . "','" . $address . "')";
    $result = mysql_query($query)or die(mysql_error());
    $id = mysql_insert_id();


    if ($dcolumn) {
        foreach ($dcolumn as $key => $value) {
            $result1 = "show COLUMNS from addtable like '.$value.'";
            $exists = mysql_query($result1)or die(mysql_error());
            $data = mysql_fetch_assoc($exists);

            if ($data==TRUE) {
                $query = "update addtable set $value = '" . $dvalue[$key] . "' where id=$id";
            } else {
                $query1 = "ALTER TABLE addtable ADD $value varchar(45)";
                $result2 = mysql_query($query1)or die(mysql_error());
                $query = "update addtable set $value = '" . $dvalue[$key] . "' where id=$id";
                $result = mysql_query($query)or die(mysql_error());
            }
        }
    }


}
?>
<script>
    function myFunction() {
        var table = document.getElementById("insert");
        var row = table.insertRow(3);
        var cell1 = row.insertCell(0);
        var cell2 = row.insertCell(1);
        cell1.innerHTML = "<input type='text' name='dyncolumns[]'>";
        cell2.innerHTML = "<input type='text' name='dynfields[]' >";
    }
</script>
<html>
    <body>
        <form name="insert" method="post">

            <table border="2" align="center" id="insert">
                <tr>
                    <td>Name</td><td><input type="text" name="name" /></td>
                </tr>
                <tr>
                    <td>Mobile</td><td><input type="text" name="mobile" maxlength="10"/></td>
                </tr>
                <tr>
                    <td>Address</td><td><input type="text" name="address" /></td>
                </tr>

                <tr>
                    <td colspan="2" align="center"><input type="submit" name="btn" value="submit"></td>
                </tr>

            </table>
            <input type="button" onclick="myFunction()" name="add" value="Add">
            <a href="logout.php">Logout</a>
        </form>
    </body>
</html>

【讨论】:

  • 您能在代码中添加一些 cmets 或解释吗?
猜你喜欢
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2012-12-16
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
相关资源
最近更新 更多