简体   繁体   中英

PHP/MySQL - store default text in database or in a file?

OK so I am creating a system where whenever a shop signs up, they get 10 default slides that they can then customize later. The default slide data is just a starting point for them. But I have to assume a lot of shops will not log in and update the information, they just want something up ASAP.

So say for the Dashboard slide, every shop starts out with the same heading and text until they go in and update it themselves. Do I insert it in the database, like so:

id | slide_id | user_id | headline | text
1  | 1        | 1000    | ...      | ....
2  | 1        | 1001    | ...      | ....

So the database will contain many duplicates of that headline and text since it is the default. Is that a good idea?

Or do I do something like this:

define("DEFAULT_TEXT", "The text goes here and just used once in a file.");
$text = ($stmt->num_rows < 1 ? DEFAULT_TEXT : $text);

so I have a query that searches through my slide_data table to see if anything exists for that slide id, and if it does, then just use that headline and text.. but if there are no rows, which means they have not added anything yet, then just use the constant DEFAULT_TEXT . And that way, I can have different language config files and have translations in there, so if the language is French then it will use the DEFAULT_TEXT_FR constant which will have the manual translation.


Which one do you recommend? I'm not sure if I have the right idea here, so looking for some other opinions and suggestions.

Thanks!

I would define the default text outside of the database, storing it in the db creates unecessary duplicate entries which will ultimately effect performance over time (the larger a db table gets the longer it takes to query that table). Once you have it defined just run a query by user id to see if they created text for that slide, otherwise default to your predefined text

Edit:

$result = mysql_query(your check to see if slide exists);
while ($row= mysql_fetch_assoc($result)) {
    $displayText = $row['text'];
};

if ($displayText != '') {
    $sql = 'update command';
} else {
    $displayText = DEFAULT_TEXT;
    $sql = 'insert command';
}

mysql_query($sql);

The way you are doing it is not necessarily incorrect, but as you hint, you may end up with a large amount of duplicate data.

You may want to consider wrapping these into an object such as ShopSlides which holds default values and configured values by Shop.

This could in a very quick form be something like this:

<?php
class ShopSlides{

    protected $slides = array();
    protected $defaults = array(
        '1' => 'Headline',
        '2'=> 'Healine 2'
        ...
    );
    public function __construct($slides){
        $this->slides = $slides;
    }

    public function getSlide($id){
        if(array_key_exists($id,$this->slides)){
            return $this->slides[$id]);
        } elseif(array_key_exists($id,$this->defaults)){
            return $this->defaults[$id]);
        }
        return false;
    }
}

我更喜欢常量解决方案,因为您可以避免数据冗余,并且可以轻松自定义默认消息,而无需更新大量记录...

Easy. You just have to parse the admin member shopSlides. That way you will be able to add and manage all your default ShopSlide ! Just add a column "isDefaultShopSlide" to your Table!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM