【问题标题】:HTML form input field with comma separated用逗号分隔的 HTML 表单输入字段
【发布时间】:2012-08-08 08:50:41
【问题描述】:

我试图弄清楚如何在单个文本框中输入多个单词,每个单词用逗号(,)分隔,然后根据逗号对单词进行配对,并将每个单词作为单独的记录插入到数据库中.

我想到的是接受输入

然后使用php的explode函数将单词分离出来,存入db,但不知道怎么存入db。

【问题讨论】:

  • 我有一个表单页面,输入为文本字段,我将该输入值存储在一个变量中,然后我使用爆炸来根据逗号分隔值,然后我就迷路了。

标签: php mysql html


【解决方案1】:

我知道一堆mysql_*函数的答案会进来,所以我添加准备好的查询路由。

这不是完美的,但你会明白的

// Get the array of words
$words = explode( ',', $formname );

// Create an array of :word1, :word2, :word3, etc for use in binding
foreach( range( 1, count( $words ) ) as $wordnumber ) {
    $bind[] = ':word'.$wordnumber;
}

// Create the sql query
$sql = sprintf( "insert into table ( word ) values ( %s )", implode( '),(', $bind ) );

// Prepare the query
$stmnt = $pdo->prepare( $sql );

// Bind each word
foreach( $words as $k => $word ) {
    $stmnt->bindValue( ":word" . ++$k, $word );
}

// Execute
$stmnt->execute();

【讨论】:

    【解决方案2】:

    你也可以用 PDO 做到这一点:

    <?php 
    //Connect safely to your database
    try {
        $db = new PDO("mysql:host=localhost;dbname=test", 'root', 'password');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        die('Cannot connect to mySQL server. Details:'.$e->getMessage());
    }
    
    
    if ($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['words'])) {
    
        $sql = "INSERT INTO words_table (word) VALUES (:word)";
        $stmt = $db->prepare($sql);
        $stmt->bindParam(':word', $word);
    
        foreach (explode(',', $_POST['words']) as $word) {
            $word = trim($word);
            if (empty($word)) {
                continue;
            }
            $stmt->execute();
        }
    }
    //Your form
    ?>
    <h1>Words</h1>
    <form method="POST" action="">
        <input type="text" name="words"/>
        <input type="submit" name="submit" value="Submit"/>
    </form>
    

    【讨论】:

      【解决方案3】:
      $str = $_POST['words'];
      $piece = explode(',',$str);
      foreach($piece as $substr){
          mysql_query("INSERT INTO test (words) VALUES ('".$substr."');";
      }
      

      【讨论】:

      • 虽然这行得通,但您可以按照 Aditya Kumar 的要求进行操作,也可以通过使用多个插入值的单个查询来完成 - 这样会更有效率。
      • 你能补充一些解释吗?
      【解决方案4】:

      如果您需要将单词封装在引号中,这应该可以解决问题:

      <?php
      
      $myString='sometext,someothertext,and something else';
      $query="insert into table1 (columnName) values (('".str_replace(',',"'),('",$myString)."'))";
      
      echo $query;
      ?>
      

      输出:

      insert into table1 (columnName) values (('sometext'),('someothertext'),('and something else')) 
      

      这将按照mysql insert multiple values syntax正确插入多条记录。

      【讨论】:

      • 但它不会将不同的单词存储为差异记录,例如。 aditya,laurence,max,raptor 这应该作为每个单词的单独记录输入。
      猜你喜欢
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多