不希望的数据插入数据库

时间:2015-05-18 05:02:10

标签: php mysql database-design

员工可以向雇主索取在公务上花的金额。

我正在一个网站上工作,在一个工作人员填写了正式职责活动(详细信息)后,工作人员会看到一个动态表格,他们可以根据多长时间添加/删除运输/膳食/酒店索赔(几天完成任务。 Here是我提出的设计。

这是output。 TransportID 8& 9应该与activityID 11在同一行。有没有办法插入> 1个主键进入一个字段?

foreach ( $_POST["dates"] as $index=>$date ) {
$origin = $_POST["origins"][$index];
$destination = $_POST["destinations"][$index];
$cost = $_POST["costs"][$index];

    //Insert into transport table
    $sql_transport1 = sprintf("INSERT INTO tbl_transport (Date, Origin, Destination, Cost) VALUES ('%s','%s','%s','%s')",
        mysql_real_escape_string($date),
        mysql_real_escape_string($origin),
        mysql_real_escape_string($destination),
        mysql_real_escape_string($cost));
        $result_transport1 = $db->query($sql_transport1);
        $inserted_transport_id1 = $db->last_insert_id();

    //Insert into transport_mainclaim table
    $sql_transport_mainclaim1 = sprintf("INSERT INTO tbl_transport_mainclaim (claimID, transportID) VALUES ('%s','%s')",
        mysql_real_escape_string($inserted_mainclaim_id1),
        mysql_real_escape_string($inserted_transport_id1));
        $result_transport_mainclaim1 = $db->query($sql_transport_mainclaim1);

    $all_transport_id = implode(",",$inserted_transport_id1);

    //Insert into mainclaim table
    $sql_mainclaim = sprintf("INSERT INTO tbl_mainclaim (activityID, transportID, IC) VALUES ('%s','%s','%s')",
        mysql_real_escape_string($inserted_activity_id), 
        mysql_real_escape_string($all_transport_id),
        mysql_real_escape_string($_SESSION['IC']));
        $result_mainclaim = $db->query($sql_mainclaim);
        $inserted_mainclaim_id = $db->last_insert_id(); 
}

我尝试使用$all_transport_ID = implode(",",$inserted_transport_id1);将ID与逗号分开,但未能这样做。

数据库结构是否设计错误?请指导我,因为我想要做到这一点。

2 个答案:

答案 0 :(得分:0)

抱歉,由于声誉,我无法对你的帖子发表评论,但我认为你提供了错误的链接。您的代码在表tbl_transport上运行,而您提供的链接显示名为tbl_mainclaim的表。

无论如何,你试图在整数类型的列中插入两个整数值8和9作为活动id与int值11在同一行。你打算如何存储它?

更新:我认为你实现这段代码的方式是错误的。如果我是正确的,您的变量$inserted_transport_id1 = $db->last_insert_id();是一个数组,而在这一行中,您将它视为一个变量。 $all_transport_id = implode(",",$inserted_transport_id1);

当您使用将数组合并为字符串的implode时,您将其视为数组。

{{1}}

所以我不确定你要实施什么。不清楚你要用整个SQL的foreach循环做什么。

如果您的应用程序允许,您可以删除tbl_transport_mainclaim,tbl_meal_mainclaim,tbl_hotel_mainclaim并直接指定表tbl_transport,tbl_hotel,tbl_meal的外键,该表引用tbl_mainclaim上的相应列。

我或许可以帮助您进一步解释您在此页面中尝试实施的内容。

答案 1 :(得分:0)

不要逃避$all_transport_id;在$inserted_transport_id1。{/ p>中逃避(或验证它们是数字)值

将来,这样做有助于调试:

echo $sql_mainclaim;