如何使用以下“|”将数组保存在数据库的同一字段中作为分隔符?

时间:2013-04-03 09:48:18

标签: php javascript jquery mysql ajax

这是一个拖放代码,它将单独保存在数据库中。我想让我的用户可以根据自己的选择保存仪表板布局。请查看以下图片,如果您有任何建议,请告诉我们。提前谢谢!

enter image description here

    **index.php**
        <script type="text/javascript">
        $(document).ready(function(){ 

            $(function() {
                $("#contentLeft #db_boxes").sortable({ opacity: 0.6, cursor: 'move', update: function() {
                    var order = $(this).sortable("serialize") + '&action=updateRecordsListings'; 
                    $.post("updateDB.php", order, function(theResponse){
                        $("#contentRight").html(theResponse);
                    });                                                              
                }                                 
                });
            });

        }); 
        </script>

    **updateDB.php**

    <?php 
    require("db.php");
    $username = $_SESSION['username'];

    $action = mysql_real_escape_string($_POST['action']); 
    $updateRecordsArray = $_POST['recordsArray'];

    if ($action == "updateRecordsListings"){

        $listingCounter = 1;
        foreach ($updateRecordsArray as $recordIDValue) {

            $query = "UPDATE dnd_records SET recordListingID = " . $listingCounter . " WHERE username = " . $username;
            mysql_query($query) or die('Error, insert query failed');
            $listingCounter = $listingCounter + 1;  
        }

        echo '<pre>';
        print_r($updateRecordsArray);
        echo '</pre>';

    }
    ?>

2 个答案:

答案 0 :(得分:1)

以这种方式对数据库进行非规范化通常不是一个好主意,但当然我们不知道您的特定用例。

如果你想这样做,你可以使用数组上的join函数来获取一个字符串,其中包含使用给定分隔符连接在一起的数组元素。您可以在JavaScript端(使用Array#join)或PHP端使用join(别名为implode)执行此操作。

答案 1 :(得分:0)

我的观点:不要建模非规范化数据库。决不。如果你认为你需要这样做,那你就是在思考。再想一想,做得更好。您不知道如何处理JavaScript中返回的多行(记录)吗?甚至在PHP中?好吧,问一下如何处理从SQL查询返回的多行。我们会建议您使用foreach()while()循环。

如果是JavaScript问题,请将JSON数组返回/发送到您的JavaScript脚本并再次 - 使用循环来浏览记录......

存储通过|;加入的数据非常陈旧且非常糟糕 - 如果您在某个地方看到它,请立即忘记它并学习更好的新内容 - Database normal forms。< / p>

修改 如果您仍然需要存储这样的balast数据,请以更好的方式执行 - 在数组/对象中序列化它们:

$array = array('One', 'Two', 'Three');
$serialized = serialize($array);
// output something like: a:3:{s:3:One;s:3:Two;s:5:Three}

将此$serialized字符串存储到数据库而不是One|Two|Three值...从数据库调用中检索后:

$array = unserialize($serialized);

如果要更新行:

  1. 检索行
  2. 解序列化
  3. 添加/修改数组
  4. 序列化
  5. 保存