小编mis*_*tin的帖子

重复发生的日历事件

我正在尝试构建自己的日历,并且我有一个用于输入下面显示的事件的表单.

我不知道如何设计MySQL表以及如何以可以轻松提取的方式记录这些信息?

日历活动表格

以下是我的尝试,它有效,但非常难看,我相信它可以改进:

CREATE TABLE events (
  event_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  title VARCHAR(100) NOT NULL,
  location VARCHAR(100) NOT NULL,
  body TEXT NOT NULL,
  start_ts DATETIME NOT NULL,
  end_ts DATETIME NOT NULL,
  valid ENUM('Y','N') DEFAULT 'Y',
  reoccurring ENUM('Y','N') DEFAULT 'N',
  every ENUM('day','week','month','year',''),
  bymonth ENUM('day','weekday',''),
  end_date DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',

  PRIMARY KEY (event_id)
);

CREATE TABLE events_byweek (
  event_id INTEGER UNSIGNED NOT NULL,
  weekday TINYINT UNSIGNED NOT NULL,

  FOREIGN KEY (event_id)
    REFERENCES events(event_id)
);

-- returns all dates, …
Run Code Online (Sandbox Code Playgroud)

php mysql

9
推荐指数
1
解决办法
1525
查看次数

如何创建预览文本

我有以下代码输出从我的数据库中检索的一些文本:

<p><?php echo nl2br(bb_code($bodytext)); ?></p>
Run Code Online (Sandbox Code Playgroud)

我想要做的是添加一个"预览",其中只显示前250个字符左右,然后用户可以点击链接阅读整个内容.像这样的东西:

<p><?php echo nl2br(bb_code(substr($bodytext, 0, 250))); ?>...<br />
<a href="#">Continue reading</a></p>
Run Code Online (Sandbox Code Playgroud)

这里显然有几个问题.

  1. bb代码标记中的内容(例如URL)被计为预览长度的一部分,因此[url=http://www..example.com]link[/url]当它应被解释为4时将被解释为39个字符.
  2. 如果使用不匹配的bb代码标记切断文本,则不会对其进行解析.

我怎么能做到这一点?

php regex

9
推荐指数
1
解决办法
1745
查看次数

理解/改进准系统MVC框架

我意识到这个话题已被反复询问和解决,虽然我已经阅读了无数类似的问题,并阅读了无数篇文章,但我仍未能理解一些关键问题...我正在尝试构建自己的MVC用于学习目的的框架,以及更好地熟悉OOP.这是供个人私人使用,并不是暗示作为懒惰的借口,而是我不太关心拥有更强大框架的所有花俏.

我的目录结构如下:

public
- index.php
private
- framework
  - controllers
  - models
  - views
  - FrontController.php
  - ModelFactory.php
  - Router.php
  - View.php
- bootstrap.php
Run Code Online (Sandbox Code Playgroud)

我有一个.htaccess文件,用于将所有请求定向到index.php,此文件包含基本配置设置,如时区和全局常量,然后加载bootstrap.php文件.引导程序包含我的类的自动加载器,启动会话,定义在整个项目中使用的全局函数,然后调用路由器.路由器从URL中挑选请求,使用ReflectionClass验证它,并以example.com/controller/method/params的形式执行请求.

我的所有控制器都扩展了FrontController.php:

<?php
namespace framework;

class FrontController
{
    public $model;
    public $view;
    public $data = [];

    function __construct()
    {
        $this->model = new ModelFactory();
        $this->view = new View();
    }

    // validate user input
    public function validate() {}

    // determines whether or not a form is being submitted
    public function formSubmit() {}

    // check $_SESSION for preserved input …
Run Code Online (Sandbox Code Playgroud)

php oop model-view-controller

5
推荐指数
1
解决办法
1005
查看次数

将所有请求重定向到index.php,不带.htaccess

我目前使用以下命令将所有请求重定向到 index.php 文件:

<IfModule mod_rewrite.c>
RewriteEngine on

# base path, if not the root directory
RewriteBase /dev/public/

# direct all requests to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php
</IfModule>
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它限制我的代码只能在启用了 mod_rewrite 的服务器上运行。所以我想知道,有没有办法在不使用 .htaccess 的情况下模拟这种行为?其他框架是如何做到的?

php

5
推荐指数
1
解决办法
1945
查看次数

根据屏幕宽度修剪单词

我的导航栏上有一个带有标题的空间。我想做的是:在桌面屏幕上它显示:“标题对于移动屏幕来说太长了”在移动屏幕上:“标题太长......”

我已经完成了检测它是否是移动屏幕并str_limit("Title is too long for a mobile screen", 17)用于修剪句子的工作。

但我的问题是:有很多不同尺寸的手机,我想做适合屏幕宽度的操作,这包括用户是否将屏幕转到 paisage。有人有想法吗?

javascript css php jquery

5
推荐指数
1
解决办法
210
查看次数

使用RecursiveDirectoryIterator

可能重复:
显示文件夹并建立这些文件夹的链接

我正在尝试使用RecursiveDirectoryIterator创建一个简单的文件浏览器,但似乎无法弄清楚...有什么帮助吗?

$cwd = '/path/to/somewhere';
if(isset($_GET['path']) && is_dir($cwd.$_GET['path'])) {
    $cwd .= $_GET['path'];
}

$dir = new RecursiveDirectoryIterator($cwd);
$iter = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::SELF_FIRST);
while($iter->valid()) {
    // skip unwanted directories
    if(!$iter->isDot()) {
        if($iter->isDir()) {
            // output linked directory along with the number of files contained within
            // for example: some_folder (13)
        } else {
            // output direct link to file
        }
    }
    $iter->next();
}
Run Code Online (Sandbox Code Playgroud)

不确定这是否是最好的方法,但我的印象是RecursiveDirectoryIterator比opendir()和glob()方法都要快.

php

4
推荐指数
1
解决办法
1万
查看次数

支持事务,行级锁定和外键

由于某种原因,我无法创建此表:

CREATE TABLE user_role (
  user_id VARCHAR(20) NOT NULL,
  role_id INTEGER UNSIGNED NOT NULL,

  FOREIGN KEY (user_id)
    REFERENCES users(user_id),
  FOREIGN KEY (role_id)
    REFERENCES roles(role_id)
);
Run Code Online (Sandbox Code Playgroud)

以下类似的表没有问题:

CREATE TABLE role_perm (
  role_id INTEGER UNSIGNED NOT NULL,
  perm_id INTEGER UNSIGNED NOT NULL,

  FOREIGN KEY (role_id)
    REFERENCES roles(role_id),
  FOREIGN KEY (perm_id)
    REFERENCES permissions(perm_id)
);
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

#1005 - Can't create table 'test.user_role' (errno: 150) (Details...) Supports transactions, row-level locking, and foreign keys

有任何想法吗?

mysql

4
推荐指数
1
解决办法
1万
查看次数

库存管理与库存选项

我正在尝试创建一个库存管理模式,我可以跟踪与产品相关的各种选项的库存.产品可能有任意数量的选项,但对于此示例,我将使用"大小"和"颜色"选项.

我想出了三张桌子:

CREATE TABLE shop_options (
  option_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  option_name VARCHAR(40) NOT NULL,

  PRIMARY KEY (option_id)
);
INSERT INTO shop_options (option_id, option_name) VALUES (1, 'Size');
INSERT INTO shop_options (option_id, option_name) VALUES (2, 'Color');

CREATE TABLE shop_option_properties (
  prop_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  prop_name VARCHAR(40) NOT NULL,

  PRIMARY KEY (prop_id)
);
INSERT INTO shop_option_values (prop_id, prop_name) VALUES (1, 'XS');
INSERT INTO shop_option_values (prop_id, prop_name) VALUES (2, 'S');
INSERT INTO shop_option_values (prop_id, prop_name) VALUES (3, 'M');
INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

mysql database schema database-design relational-database

4
推荐指数
1
解决办法
1720
查看次数

PHP Catchable致命错误:类的对象无法转换为字符串

我在这里完全迷失了...在验证了一些输入后,我创建了一个Message类的实例并尝试将数据插入到数据库中:

// send message
$message = $this->model->build('message', true);
$message->insertMessage($uid, $user->user_id, $title, $message);
Run Code Online (Sandbox Code Playgroud)

插入方法非常简单:

// insert a new message
public function insertMessage($to_id, $from_id, $title, $body)
{
    $sql = "INSERT INTO messages (to_id, from_id, title, body, create_date) VALUES
                                 (:to_id, :from_id, :title, :body, NOW())";
    $sth = $this->db->prepare($sql);
    return $sth->execute([':to_id' => $to_id, ':from_id' => $from_id, ':title' => $title, ':body' => $body]);
}
Run Code Online (Sandbox Code Playgroud)

但是,提交后我最终得到一个空白页面,Apache错误日志说:

[Tue Jul 30 22:34:44 2013] [错误] [client 127.0.0.1] PHP Catchable致命错误:类框架\ models\Message的对象无法转换为/ var/www/p-lug/p中的字符串第18行的-lug_lib/framework/models/Message.php,referer:https://p-lug.localhost/message/compose/4

第18行引用return语句,但即使我删除return它也会导致相同的错误.

我已经阅读了关于此错误的无数链接,但没有一个答案似乎适用于我的示例.在任何时候我都没有尝试将对象转换为字符串或输出结果,并且类似的插入与其他类的代码完美地工作.实际上,这段代码是从另一个工作示例中复制粘贴的,唯一改变的是表和数据. …

php pdo

3
推荐指数
1
解决办法
3万
查看次数

该月的第 N 个工作日

我想做的伪代码:

SELECT * FROM table WHERE NTH_DAY(DATE(table_date)) = NTH_DAY($input_date);
Run Code Online (Sandbox Code Playgroud)

我想确定给定日期该月的第 n 个工作日。例如,如果输入“2013-08-30”,则应返回 5,因为这是该月该工作日(星期五)第五次出现。

我读过无数类似的问题,但大多数都在寻找相反的问题,例如他们想找到第五个星期五的日期,而我想确定日期的第 n 个数字是多少。其他问题似乎是我所追求的,但它们采用的是我不理解的不同编程语言。

有人可以解释一下这在 MySQL 查询中是否可行以及如何实现吗?

mysql

3
推荐指数
1
解决办法
2724
查看次数