【问题标题】:Multiple Text inputs into MySQL Database多个文本输入到 MySQL 数据库
【发布时间】:2011-04-22 22:01:29
【问题描述】:

在我的HTML 文件中,我有以下内容可以按照以下格式输入。

Stuff1,Stuff2,Stuff3,Stuff4 

<form action="process_form.php" method="post">
    <form>
     Part 1: <input type="text" name="p1" /><br />
     Part 2: <input type="text" name="p2" /><br />
     Part 3: <input type="text" name="p3" /><br />
     Part 4: <input type="text" name="p4" /><br />
     Part 5: <input type="text" name="p5" /><br />
     Part 6: <input type="text" name="p6" /><br />
     Part 7: <input type="text" name="p7" /><br />
     Part 8: <input type="text" name="p8" /><br />
     Part 9: <input type="text" name="p9" /><br />
     Part 10: <input type="text" name="10" /><br />
    </form>

    <input type="submit" name="formSubmit" value="Submit" />

</form>

从那里,我在我的 php 文件中使用 explode 来分隔逗号并从我的字符串创建一个数组。

$create_table1 = "create table parts(qty int(5) NOT NULL,
partID int(5) NOT NULL PRIMARY KEY,
partname varchar(25) NOT NULL,
price int(5) NOT NULL
)";

     $p1_boom = explode(",",$p1); 
     $p2_boom = explode(",",$p2);
     $p3_boom = explode(",",$p3);
     $p4_boom = explode(",",$p4);
     $p5_boom = explode(",",$p5);
     $p6_boom = explode(",",$p6);
     $p7_boom = explode(",",$p7);
     $p8_boom = explode(",",$p8);
     $p9_boom = explode(",",$p9);
     $p10_boom = explode(",",$p10);

现在我要做的是在表格中单独的一行输入每组数据。比如P1的所有部分都在表格的第一行,P2的所有部分都在表格的下一行等等。提前感谢您的帮助,如果您需要更多信息,请告诉我!

【问题讨论】:

    标签: php mysql arrays post input


    【解决方案1】:

    您想要表格创建代码吗?我将假设每个部分都是 TEXT 因为您没有指定....否则更改类型。然后还有一些代码来构建查询。

    <?php
    
    //find maximum length of $p_booms and the booms
    $p_booms = array();
    $pb_lengths = array();
    for($i = 1; $i <= 10; $i++) {
        $p_booms[] = explode(",", $_POST["p$i"]); //not sanitized! (yet)
        $pb_lengths[] = count($pb_booms[$i]);
    }
    $pmax = max($pb_lengths);
    
    
    //create the table with the maximum width
    $create_table = "
        CREATE TABLE parts (
        partID INT(5) NOT NULL PRIMARY KEY";
    
    for($i = 0; $i < $pmax; $i++) {
        $create_table .= ", p$i TEXT DEFAULT NULL";
    }
    $create_table .= ");";
    $mysqli->query($create_table);
    
    
    //then insert the values by building a query
    //I am assuming partID is the p1, p2, p3 becomes 1, 2, 3 respectively
    foreach($p_booms as $id => $boom) {
        $query = "INSERT INTO parts SET partID=$id";
        foreach($boom as $i => $part) {
            $part = $mysqli->real_escape_string($part); //yay sanitized!
            $query .= ", p$i = '$part'";
        }
        $mysqli->query($query);
    }
    

    干杯

    【讨论】:

      【解决方案2】:

      您将无法将数组插入到字段中。在插入之前,您必须将其保留为字符串或序列化/json_encode 数组。插入行与插入任何数据没有什么不同。

      $db = new PDO(/*connection info*/);
      $stmt = $db-prepare('insert into tableName(myColumn) values(?)');
      // Just loop throw the data with...
      $stmt->execute(array($stringToInsert));
      

      【讨论】:

        【解决方案3】:

        使用serialize() 函数。

        $p10_boom = explode(",",$p10);
        $p10_boom_serial = serialize( $p10_boom );
        

        这会产生类似:

        a:4:{i:0;s:6:"Stuff1";i:1;s:6:"Stuff2";i:2;s:6:"Stuff3";i:3;s:6:"Stuff4";}
        

        当您将它保存到数据库时,只需将该字符串转义即可。

        现在,无论您要用于数据的哪个字段都应该是文本字段或长 VARCHAR 字段。

        如果您必须检索该值并将其转回数组,请使用unserialize()。您可以使用join()implode() 将其转换回字符串

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-04
          • 2015-03-01
          • 1970-01-01
          • 2016-01-23
          • 2013-12-07
          • 1970-01-01
          相关资源
          最近更新 更多