我正在尝试构建自己的日历,并且我有一个用于输入下面显示的事件的表单.
我不知道如何设计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) 我有以下代码输出从我的数据库中检索的一些文本:
<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)
这里显然有几个问题.
[url=http://www..example.com]link[/url]
当它应被解释为4时将被解释为39个字符.我怎么能做到这一点?
我意识到这个话题已被反复询问和解决,虽然我已经阅读了无数类似的问题,并阅读了无数篇文章,但我仍未能理解一些关键问题...我正在尝试构建自己的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) 我目前使用以下命令将所有请求重定向到 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 的情况下模拟这种行为?其他框架是如何做到的?
我的导航栏上有一个带有标题的空间。我想做的是:在桌面屏幕上它显示:“标题对于移动屏幕来说太长了”在移动屏幕上:“标题太长......”
我已经完成了检测它是否是移动屏幕并str_limit("Title is too long for a mobile screen", 17)
用于修剪句子的工作。
但我的问题是:有很多不同尺寸的手机,我想做适合屏幕宽度的操作,这包括用户是否将屏幕转到 paisage。有人有想法吗?
可能重复:
显示文件夹并建立这些文件夹的链接
我正在尝试使用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()方法都要快.
由于某种原因,我无法创建此表:
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
有任何想法吗?
我正在尝试创建一个库存管理模式,我可以跟踪与产品相关的各种选项的库存.产品可能有任意数量的选项,但对于此示例,我将使用"大小"和"颜色"选项.
我想出了三张桌子:
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) 我在这里完全迷失了...在验证了一些输入后,我创建了一个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
它也会导致相同的错误.
我已经阅读了关于此错误的无数链接,但没有一个答案似乎适用于我的示例.在任何时候我都没有尝试将对象转换为字符串或输出结果,并且类似的插入与其他类的代码完美地工作.实际上,这段代码是从另一个工作示例中复制粘贴的,唯一改变的是表和数据. …
我想做的伪代码:
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 查询中是否可行以及如何实现吗?