【问题标题】:Split tags and submit them to database拆分标签并将它们提交到数据库
【发布时间】:2012-05-23 02:36:20
【问题描述】:

我正在尝试创建一个 javascript 来拆分标签(用户提供,用逗号 (,) 分隔它们)并将它们以不同的行但具有相同的 id 传递到我的数据库中。 我有这个代码:

<form name="formatform" method="post" onsubmit="return validate_format_form()" action="formatsubmit.php">
<p>
Συντομος Τιτλος:<input type="text" name="titlos" value="">
Συντομη περιγραφη:<input type="text" name="perigrafi" value="">
</p>
<p>
Τοποθεσια:<input type="text" id="loc" name="topothesia" value="">
Tags:<input type="text" name="tags" value="">
**Οι ετικέτες πρέπει να χωρίζονται με κόμμα
</p>
.
.
.
</form>

并在 formatsubmit.php 中将这些代码传递到数据库中:

$query= " INSERT into photos(`title`,`description`,`location`,`privilages`,`ph_tags`) VALUES ('".$_POST['titlos']."','".$_POST['perigrafi']."','".$_POST['topothesia']."','".$_POST['radio_check']."','".$_POST['tags']."') ";
$result= mysql_query($query,$con);

如果用户提供 3 个标签(用逗号分隔),我想将它们拆分并以不同的行将它们传递给数据库。 我该怎么做?

【问题讨论】:

  • 你的架构是什么样的?你肯定有一张叫tags的桌子
  • 我有一张带有列标签的表格照片和一个与表格照片相连的表格标签

标签: php javascript sql database tags


【解决方案1】:

如何使用逗号作为分隔符将标签输入拆分为一个数组,然后遍历标签并为每个标签创建一个插入语句?例如

$tag_array = explode(",", $_POST['tags']);
foreach ($tag_array as $tag) {
  $query= " INSERT into photos(`title`,`description`,`location`,`privilages`,`ph_tags`) VALUES ('".$_POST['titlos']."','".$_POST['perigrafi']."','".$_POST['topothesia']."','".$_POST['radio_check']."','".$tag."') ";
  $result= mysql_query($query,$con);
}

【讨论】:

  • 它有效,但我也有问题。这是关于照片的。我正在上传照片,我会为照片提供标题、描述、标签等。我想将它们传递给我的数据库,但使用代码给我 3 行(如果我有 3 个标签)具有不同 id 的 id(数据库中的自动增量)..但我希望这 3 行具有相同的 id:S我怎么能做到这一点..??
  • @user1385257 为标签创建一个单独的表,引用照片表。例如。首先插入照片行,检索新创建的 ID,然后使用照片 ID 为每个标签插入一行。
  • 我已经有一个引用照片表的表标签。不错的想法。非常感谢..!!
  • 你能给我一个“首先插入照片行,检索新创建的ID,然后使用照片ID为每个标签插入一行”的示例代码吗??
  • 请参阅stackoverflow.com/questions/621369/… 了解如何检索自动递增的 id
【解决方案2】:

如果您想使用 PHP,请使用 explode(",", $input);。要在 JavaScript 中执行此操作,请执行 input=input.split(",")。然后,您将拥有一组可以按编号引用的标签(例如 $input[0]...$input[x] (PHP) 或 input[0]...input[x] (JavaScript))。

【讨论】:

  • 我更喜欢用 javascript 中的函数来实现。我会试试看。谢谢
【解决方案3】:

您还应该处理用户输入,因为您将让用户输入双标签 ,, 使爆炸具有空值加上使用 POST 这样您将进行 sql 注入:

<?php 
function get_tags($tags){
    $ret=array();
    $tags=explode(',',strtolower($tags));
    foreach($tags as $tag){
        if($tag==''){}else{
            $ret[]=ucfirst(trim($tag));
        }
    }
    return $ret;
}

function insert_photo_tags($tags){
    array_walk($_POST,'mysql_real_escape_string');
    foreach ($tags as $tag) {
        $query = " INSERT INTO photos(`title`,`description`,`location`,`privilages`,`ph_tags`) 
                   VALUES ('".$_POST['titlos']."','".$_POST['perigrafi']."','".$_POST['topothesia']."','".$_POST['radio_check']."','".$tag."') ";
        mysql_query($query);
    }
}

//Test Input (?tags=php,mySQL,http,bLa,,,,,,123)

$tags = get_tags(mysql_real_escape_string($_POST['tags']));

//Do your insert with the array
insert_photo_tags($tags);

print_r($tags);
/*
Array
(
[0] => Php
[1] => Mysql
[2] => Http
[3] => Bla
[4] => 123
)
*/
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 2016-01-05
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    相关资源
    最近更新 更多