👋 您好! 我们想提醒您,本系列文章附带的源代码不再提供下载。 我们仍然认为该系列提供了宝贵的知识,但鉴于我们已经走过了 10 多年的时间,我们也认为使用现代 PHP 框架(如 Laravel)甚至 JavaScript 框架(如 React 或 Vue)来创建渐进式 Web 应用程序是值得考虑的。
我们终于完成了! 首先,感谢您一直关注这个旅程。
在下面,我们将通过讨论我们做出的某些选择、安全预防措施以及我们(和您)对该应用程序 2.0 版本的想法来总结一些内容。
文章系列
面向对象编程
因为我们应该始终在编程时力求高效,所以我们在构建该应用程序时牢记 DRY 编程理念。 DRY 代表“不要重复自己”,应该成为我们编程理念的核心。
在我们看来,采用面向对象编程 (OOP) 方法是保持该应用程序 DRY 的最佳方式。 OOP 允许我们将常见的方法分组并分离任务,而无需在函数之间传递参数。 要详细了解 OOP 及其优势,请阅读 Jason 对 OOP 的介绍。
安全
安全在任何应用程序中都至关重要。 我们拥有存储数据的用户帐户。 这些用户信任我们来确保其数据的安全,包括其密码和他们输入到列表中的所有信息。 该应用程序已经非常安全。 密码以加密格式存储,永远不会通过电子邮件以明文形式发送。 与数据库进行的所有交互都是安全的。 只有登录的用户才能发出导致数据库更改的命令,并且这些用户只能发出影响其自身数据的命令。
但是,由于该应用程序中存在各种 AJAX 内容,因此我们的安全措施需要考虑更多情况。 首先,我们的 JavaScript(像所有 JavaScript 一样)是公开可见的。 此 JavaScript 包含用于进行 AJAX 调用的代码,这意味着我们将发送到的 URL 以及该 URL 预期的哪些数据。 这会向潜在攻击者提供有关他们如何发送恶意请求的大量信息。 因此,我们需要注意,确保所有传入数据都经过适当的转义。
服务器端的安全
避免服务器端的攻击涉及两个主要的风险因素:一是数据库攻击的可能性;二是恶意用户可能会提交危险数据,当从数据库中读取并显示出来时,会损害我们的应用程序或用户。 幸运的是,PHP 为我们提供了多种方法来应对这些风险。
PDO
数据库攻击,称为 SQL 注入,是一种特别恶劣的攻击形式。 恶意用户可以读取、操作或完全删除易受攻击的数据库。 这意味着我们必须非常重视防止任何类型的 SQL 注入发生。
幸运的是,PHP 数据对象 (PDO) 通过使用准备好的语句,几乎消除了 SQL 注入的风险,准备好的语句就像查询模板,我们可以使用参数对其进行自定义。 当将参数插入查询时,所有转义操作都会自动完成,因此在使用准备好的语句时,几乎不可能发生 SQL 注入。
正是由于这种强大的安全优势,我们为该应用程序选择了 PDO。(请记住,准备好的语句并不局限于 PDO;其他数据库扩展,例如 MySQLi,也支持它们。)
数据转义
虽然 PDO 可以有效地防止 SQL 注入,但它在我们将信息从数据库中读取出来时无济于事。 如果恶意用户将危险的标签注入我们的数据库,那么除非我们采取进一步措施来清理用户数据,否则它们在检索时仍然会很危险。
幸运的是,PHP 提供了内置函数,允许我们执行对用户输入的基本清理。 我们主要使用 strip_tags() 和白名单,以确保没有<script>标签或其他潜在的危险标签进入数据库。 此外,由于我们绝不允许此类标签,因此我们在将数据插入数据库之前执行此转义操作。
JavaScript 中的安全
首先,一个好方法是“打包”javascript,使其不易阅读,下载速度也更快。 许多工具可以做到这一点,包括 Dean Edwards 的这个工具。
客户端清理
其次,由于我们输入数据并将其立即显示在屏幕上,因此最好直接在 JavaScript 中执行一些输入清理操作。 当用户输入新列表项时,我们将执行两个步骤来清理它。 首先,我们将确保他们不会恶意地尝试将立即执行的 JavaScript 插入链接。
// Check for JS in the href attribute
function cleanHREF(str) {
return str.replace(/\<a(.*?)href=['"](javascript:)(.+?)<\/a>/gi, "Naughty!");
}
然后,我们还将清理该输入文本中的任何其他 HTML。 我们将允许一些 HTML,以防用户想要对列表进行格式化,例如使用<strong>标签等。 使用以下函数,我们将清除除白名单中设置的标签之外的所有标签。
注意: 下面使用的 strip_tags() 函数是 php.js 项目的一部分,该项目已将许多有用的 PHP 函数移植到 JavaScript。
var $whitelist = '<b><i><strong><em><a>',
// Strip HTML tags with a whitelist
function strip_tags(str, allowed_tags) {
var key = '', allowed = false;
var matches = [];
var allowed_array = [];
var allowed_tag = '';
var i = 0;
var k = '';
var html = '';
var replacer = function(search, replace, str) {
return str.split(search).join(replace);
};
// Build allowes tags associative array
if (allowed_tags) {
allowed_array = allowed_tags.match(/([a-zA-Z]+)/gi);
}
str += '';
// Match tags
matches = str.match(/(<\/?[\S][^>]*>)/gi);
// Go through all HTML tags
for (key in matches) {
if (isNaN(key)) {
// IE7 Hack
continue;
}
// Save HTML tag
html = matches[key].toString();
// Is tag not in allowed list? Remove from str!
allowed = false;
// Go through all allowed tags
for (k in allowed_array) {
// Init
allowed_tag = allowed_array[k];
i = -1;
if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}
if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');}
if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag) ;}
// Determine
if (i == 0) {
allowed = true;
break;
}
}
if (!allowed) {
str = replacer(html, "", str); // Custom replace. No regexing
}
}
return str;
}
这些函数在发送添加新列表项的 AJAX 请求之前在 js/lists.js 中实现……
. . .
// AJAX style adding of list items
$('#add-new').submit(function(){
// HTML tag whitelist. All other tags are stripped.
var $whitelist = '<b><i><strong><em><a>',
forList = $("#current-list").val();
newListItemText = strip_tags(cleanHREF($("#new-list-item-text").val()), $whitelist),
. . .
POST 与 GET
我们为应用程序安全采取的最后一个措施是,对所有 AJAX 调用使用 POST 而不是 GET。 这是因为 GET 方法应该仅用于检索,而不能用于以任何方式修改数据的操作。
不使用 GET 修改数据的主要原因是,使用 GET 发出的请求会包含在 URL 中(例如 http://example.com?get=request&is=this&part=here)。 根据 URL 中传递的信息修改数据存在固有风险,因为用户可能会因意外刷新其浏览器而导致重复处理。
使用 POST 的第二个,不那么重要的原因是,使用 POST 发送虚假请求要困难一些,这可以对恶意用户起到(轻微)的威慑作用。
2.0 功能
当然,我们作为设计师和开发人员的工作永远不会完成。这是一个简单易用的列表应用程序的良好开端,但立即就有新的功能浮现在脑海中。以下是一些扩展功能的想法。也许它们会稍微使事情变得复杂,但如果实施得当,它们都是很棒的想法。
- 列表分享
输入电子邮件地址以与他人分享列表。分享是指真正意义上的协作编辑。用户需要一个帐户,因此,如果他们已经拥有帐户,他们将收到电子邮件并被要求加入列表(他们可以选择接受或不接受)。如果该电子邮件地址没有帐户,他们将被提示先加入。 - 多个列表
现在用户只能拥有一个列表。对于用户来说,拥有多个列表可能很有用。也许可以使用下拉菜单在列表之间切换,并使用一个简单的按钮添加新列表。这里有很多界面需要考虑,包括确定如何删除列表。 - RSS
每个列表都可以拥有自己的 RSS Feed。可能需要一些选项,例如 RSS Feed 中将包含什么内容(例如,您是否希望看到列表项完成或未完成时的条目?)。Feed URL 可能是长篇大论的 URL,因此它们本质上是完全私密的,除非被明确分享。 - iPhone 界面
通过 iPhone 或其他移动设备登录将提供更好的优化体验。
当我尝试注册时,遇到了错误 :( 在输入我的电子邮件并点击“注册”后 - 尽管如此,电子邮件还是收到了 :)
如果我赢得了《PHP for Absolute Beginners》的副本,也许我可以告诉你如何修复它 :)
所以,我今天早上一直在努力解决这个问题(我遇到了同样的问题),然后它神奇地自行修复了。
各位,请告诉我,如果您看到任何奇怪的行为/错误。
我现在也遇到了同样的问题。没有收到电子邮件。
没有收到电子邮件是一个不同的问题。在我一生中使用过的所有 Web 应用程序中,电子邮件传递只有大约 85% 的成功率。
检查您的垃圾邮件,如果可以,将 @coloredlists.com 添加到您的邮件服务器白名单中。然后尝试使用另一个电子邮件地址注册,它应该能够顺利收到。
我遇到了同样的问题。收到了电子邮件,但出现了错误,提示列表未创建。
不过,我有一个很好的关于 OOP 的优化建议。
您在 BOTH 类中使用的 __construct 方法,它们执行的是 SAME 的操作。
尝试使用一个通用的 DB 类来处理它,并稍微修改代码,使它们都继承自该 DB 类并使用它的一个方法。这样可以 DRY 一些。
我非常希望能赢得《PHP for Absolute Beginners》的副本,感谢您提供这个很棒的教程!
我非常希望能赢得这本书
“PHP for Absolute Beginners”
祝贺您的教程。
非常希望能收到“PHP for Absolute Beginners”这本书,非常感谢您的教程。尤其是,我喜欢您如何将许多复杂的概念分解成易于理解的部分。干杯!
非常希望能得到“PHP for Absolute Beginners”的副本
很棒的教程,我一直都在关注它!太棒了!
非常希望能得到“PHP for Absolute Beginners”的副本!
我也可以得到一份吗 :)
当然,“PHP for Absolute Beginners” :)
干得好,伙计们!
“PHP for Absolute Beginners” 将是一个很棒的奖品。
继续努力。
~Jon
作为 PHP 新手,我非常希望能得到“PHP for Absolute Beginners”的副本。
感谢您提供这篇很棒的文章,伙计们!
嘿,Chris 和 Jason,
这个系列非常棒地概述了我们能想到的几乎所有内容。
我将在不久的将来将它用于一个完全不同的 Web 应用程序。但结构、帐户、帐户设置和功能。所有这些基础知识都以一种真正意义上的最新、面向未来的方式进行了通用解释。
非常感谢,在忘记之前。
“PHP for Absolute Beginners” 当然会对学习更多关于 PHP 的知识有所帮助。(它就像一门神奇的语言,一旦你理解了它,你就会感觉自己能够做任何事!)
—
致敬,
Tem C.
@Chris / @ Jason:
我看到 common-files 可以通过 Web 浏览器访问。有些显示内容,而有些无法独立执行并吐出 PHP 警告,其中包含(不应该)公开的信息
http://coloredlists.com/common/ads.php
http://coloredlists.com/common/base.php
等等…
也许可以快速说明一下如何禁止直接访问以完成 :-D
…现在通过 .htaccess 阻止了。感谢!
ads.php 仍然显示
提醒
* 您的列表会自动保存
* 双击列表项以编辑它们
非常希望能得到“PHP for Absolute Beginners”的副本!感谢您提供这个很棒的教程。
PHP for Absolute Beginners
干得好 ;)
非常棒的教程!
http://coloredlists.com/common/base.php 仍然是开放的
我非常希望能得到“PHP for Absolute Beginners”的副本 - 它是否包含更多关于 OOP 的内容?
是的,它确实包含。它不是一本高级的 OOP 书籍,但它涵盖了许多基础知识,并展示了另一个工作示例。此外,因为它是一本书,所以描述更加深入。
“Php for Absolute Beginners” 将成为我图书馆中的一本好书!
“PHP for Absolute Beginners” 正是我需要的。
干得好,伙计们,我一定会使用这个列表。
太棒了!您的 rokz!
很棒的教程!我想要一本“PHP for Absolute Beginners”的副本。谢谢!
很棒的教程!
干得好!
“PHP for Absolute Beginners”
很棒的系列,我喜欢逐步的教学,这是我迄今为止遵循的最好的教程。我非常想获得一本“PHP for Absolute Beginners”的副本,以便进一步提高我的知识。
感谢您提供的优秀教程。
PHP for Absolute Beginners,太棒了!
我正在自己开发一个 Web 应用程序,使用 PHP、CSS、MySQL、Javascript 等,我很想赢得“PHP for Absolute Beginners”这本书作为参考。
有可能吗?
谢谢!
优秀的系列!赢得“PHP for Absolute Beginners”这本书真是太棒了!
您能否将整个源代码压缩以便阅读?否则,从整个教程集中将每一段代码串联起来需要花费一些努力。
很棒的教程,伙计们。我非常想获得一本“PHP for Absolute Beginners”的副本。
有没有可能发布源代码,我无法让一部分代码正常运行,也许我需要一本“PHP for Absolute Beginners”
我们会发布源代码,是的,请允许我们一些时间来解决出现的所有问题,这样我们才能确保为您提供尽可能好的代码。
非常感谢您提供的精彩教程系列。希望有更多类似的教程。
当然,我很想赢得“PHP for Absolute Beginners”这本书 :)
优秀的系列,伙计们。我迫不及待地想看到这个直播应用程序 :P(目前似乎已关闭)。
很棒的教程系列。非常感谢你们两位。我真的很想赢得一本“PHP for Absolute Beginners”的副本。
好样的 ;)
PHP for Absolute Beginners
PHP for Absolute Beginners
你好:
有“Coloured Lists”的下载链接吗?
谢谢。
这里有一系列很棒的教程。PHP for Absolute Beginners 看起来是必备的……对于像我这样的初学者而言。
(我的英语不好。我来自委内瑞拉)
出色的工作。我正在学习 PHP,本教程为我打开了无限的可能性。
非常感谢您为我们发布和分享所有这些内容所付出的努力和奉献。
当然,获得一本“PHP for Absolute Beginners”将非常有价值。
感谢您所做的一切。
这个项目很棒!我也想赢得“PHP for Absolute Beginners”这本书。
“PHP for Absolute Beginners”对我很有用。继续努力吧。
“Purple grounded twisted ants”包含 4 个单词,就像“PHP for Absolute Beginners”一样。
我想要一本“PHP for Absolute Beginners”的副本:)
很棒的系列,伙计们。我也想要一本免费的“PHP for Absolute Beginners”的副本。
“PHP for Absolute Beginners”!给我!:D
我认为“PHP for Absolute Beginners”将成为我不断扩大的 Web 图书库中的一份很好的补充。放在我的 Digging Into WordPress 副本旁边!
很棒的系列!我很想看到更多类似的教程!此外,一本免费的“PHP for Absolute Beginners”副本也很棒。
喜欢本教程!我一定会好好利用“PHP for Absolute Beginners”。
由于我从未赢得过任何东西……我很想赢得一本“PHP for Absolute Beginners”的副本。
您会制作一个关于在 iPhone 上构建此应用程序的教程系列吗?
—- 此外
我注意到,当我更新项目时,可以在链接中添加 javascript。
嘿,伙计们,很棒的系列!很好的细分……
;) 我不需要一本“PHP for Absolute Beginners”的副本。
我很想获得一本“PHP for Absolute Beginners”的副本。这是一个很棒的教程——我迫不及待地想自己构建这个应用程序。
很棒的教程!我很想获得一本“PHP for Absolute Beginners”的副本。
太棒了!!
PHP for Absolute Beginners!
我刚刚注册了,它运行得非常完美!
不过,我有一个小错误要报告。当您将一个项目标记为已完成,然后尝试编辑它时,输入框中会显示一些 HTML 代码。例如,是这样的:call mum
而且公共 URL 非常容易猜测。我认为这不好……即使没有人知道我的情况,我也无法将其用作个人待办事项列表,因为任何人都可以查看它……您可以用某种短哈希值替换简单的数字吗?
除此之外,我真的很喜欢您的应用程序 1,简单明了。教程也很好,即使我是一个 PHP 新手。
顺便说一下,我喜欢您的教程。我刚开始学习 HTML、CSS 和使用 WordPress。在我的资料库中获得“PHP for Absolute Beginners”将非常棒,可以帮助我。
我还希望看到 2.0 版本针对 iPhone 进行了优化。
我同意贝勒·雷关于可能制作一个关于构建 iPhone 应用程序的教程的观点。
再次感谢您,我喜欢这个网站。
PHP for Absolute Beginners
好的,现在比赛报名已经结束了。很棒的文章系列,将来还会进行更多这样的合作项目吗?
很棒的教程:“PHP for Absolute Beginners” :)
错误
可以输入并保存日语字符,但在查看列表时,字符显示不正确。
例如:我的列表
我真的很想赢得一本“PHP for Absolute Beginners”的副本。
感谢您提供的精彩教程,对我有很大帮助。
一个非常好的教程系列。
很棒的教程,克里斯和杰森。
很想获得“PHP for Absolute Beginners”的副本。
哇!这真是太酷了。我喜欢你们从最初的步骤到最后成品的指导方式。而且这是一个很棒的 Web 应用程序创意,哈哈。
PHP for Absolute Beginners
干得好!
不错!这是一个很棒的教程。赢得“PHP for Absolute Beginners”将是锦上添花。
PHP for Absolute Beginners
很棒的教程!我整个星期都在跟着学。
“PHP for Absolute Beginners” 看起来是必备的。
干杯。
不错的教程。
“PHP for Absolute Beginners” 很棒,因为我是服务器端的新手。感谢您提供如此精彩的教程!
我注意到列表似乎没有保存。
只是想让你知道 :)
很棒的教程,我希望我能得到一本“PHP for Absolute Beginners”来教我更多关于网页设计的知识!
PHP for Absolute Beginners 看起来是一本很酷的书!
“PHP for Absolute Beginners” 会很棒!我真的只是个新手!
顺便说一下,我注册了,但收到了以下通知:您的帐户已创建,但创建您的第一个列表失败。
不知道你是否故意这样做的 :P
非常感谢!
真的,PHP for Absolute Beginners
很棒的教程,这只是一个我之前就有的想法的开始。这教会了我很多东西,让我能够实现这个想法,谢谢你们!!
PHP for Absolute Beginners,这绝对是我。
非常棒的文章(系列)!很喜欢。
嗨,我发现我的列表不会自动保存。是我的问题吗?
我的公共列表 URL 是 http://coloredlists.com/.html ??
还有(最后但并非最不重要的一点)当你切换到“您的帐户”时,按钮应该变成“您的列表”,这样更容易回到列表。
意大利晚上好,我希望我能赢得一本“PHP for Absolute Beginners”。
如果你的列表没有保存,你遇到了帐户没有正确创建的错误。我们正在尝试修复这个问题,但还不确定问题出在哪里(我们认为可能是当多个人几乎同时注册时)。
如果你能登录,请从设置页面删除你的帐户,然后重新注册。这样应该可以解决。
真有趣……
我删除了帐户,我注册了,然后
“注册登录错误。
您的帐户已创建,但创建您的第一个列表失败。”
我想我晚点再试……
我尝试注册,但遇到了这个错误。我从未收到过选择密码的电子邮件(尝试使用 3 个不同的电子邮件地址注册)。当我尝试重置密码时,我收到了另一个错误“您的帐户已验证,您是否忘记了密码”。似乎还是有点问题——如果它不能处理平均流量,我不知道是否想在专业级应用程序中使用这个系统。
耶!
现在可以了!
让我们报告一个错误:当你创建一个新项目,然后连续按下回车键时,就会创建很多新项目。
鉴于我仍然处于“PHP for Absolute Beginners”水平,我很想赢得这本书,并学习如何创建像这个一样的伟大应用程序,以及如何了解它们的工作原理。
很棒的教程——再次感谢您提供的一切。
做得很好!
希望我能得到这本书!
干杯!
PHP for Absolute Beginners
很棒的系列,伙计们。让我们看看更多这样的系列!
很棒的教程。我是一个真正的编程新手,经常想知道做这些事情的“正确方法”是什么。我犯了很多你提到的错误,所以这是一个很棒的学习体验。
哦,还有,我很想赢得一本 PHP for Absolute Beginners。
谢谢!
我真的很需要一本 PHP for Absolute Beginners。我符合绝对新手的标准,在 WordPress 中使用 PHP 对我来说完全是试错法。顺便说一下,文章很棒。
我很想在 Colored List 的第 2 版中拥有可点击的链接。这将是一个很棒的圣诞节礼物清单,可以发送给家人。:)
当我登录时,我看不到其他人的列表,我只回到了我自己的列表。
一本“PHP for Absolute Beginners”将是极好的,我一直试图弄明白这种神奇的语言。^^ :)
你现在可以在列表项中使用 HTML 来创建可点击的链接 =)
我喜欢这篇文章。我是一个初创的网络应用程序开发者,所以我喜欢阅读关于其他人作品的文章 :)
无论如何,我很想得到一本 PHP for Absolute Beginners。
Kindle 版的 PHP for Absolute Beginners 会很快推出吗?我喜欢电子书提供的便携性。这是一个非常详细且具有启发性的 8 部分教程(系列)。非常感谢 Chris 和 Jason。
干杯!
我听说 Kindle 正在获取(或者已经获取?)原生 PDF 支持。
我很想得到一本“PHP for Absolute Beginners”,因为我不会 PHP,这本书会有很大帮助。我是一名高中二年级学生,今年晚些时候我们将学习 PHP。这将帮助我提前学习,提高我的网络技能。我目前使用不同的 CMS(我最喜欢的是 ExpressionEngine),但我非常想学习纯 PHP。喜欢这些文章,继续保持良好的工作。谢谢!
我听说 PHP for Absolute Beginners 是一本很棒的书,我很想赢得一本。
PHP for Absolute Beginners 绝对会对我有所帮助!我一直想学习它,这将有助于扩展我的技能,并帮助我赢得与朋友的赌注,征服欧洲。说真的。
嘿,当我有了孩子,我会给他读 PHP for Absolute Beginners 而不是儿童故事,这样我就能有一个能创造出下一个 Facebook 的孩子。哈哈
PHP for Absolute Beginners,
我一直都在努力学习 PHP,但最终创建了我的第一个 WordPress 网站,并开始理解 PHP 的强大功能。仅仅使用 the_title 我就为每个页面分配了一个唯一的 body class,这使我能够为每个页面设置独特的样式。这并不难,但我真的很开心!
PHP for Absolute Beginners 即将来到阿根廷 :P
很棒的教程,我正在阅读更多关于 OOP 的内容,因为我只知道其他内容。谢谢!
此致,
返回;
不错的教程,我最近一直在尝试做一些后端工作,所以整个教程非常有用 :D
但列表只有四种颜色,不够多彩 :P
PHP for Absolute Beginners?请给我一本!
嗯……这里遇到了不少问题。
我注册了,但从未收到密码邮件。
然后我尝试重置密码,但我收到的邮件提供了一个密码重置链接,点击后,它告诉我帐户已经验证,并询问我是否想重置密码。该链接将我带到我最初填写的相同重置表单。重复上述步骤……
您不会收到包含密码的电子邮件。相反,您会收到一封电子邮件,要求您验证,然后您选择一个密码。您收到那封邮件了吗?
如果你收到了,你应该知道你的密码……
如果你没有收到,那么你的账户就没有激活,你看到的那条消息肯定是乱了。 同时,也许可以尝试使用不同的电子邮件地址,希望它能到达。 电子邮件的发送(对于我处理过的任何网络应用程序)都不一定100%可靠。
我第一次注册时也看到了同样的情况。 输入我的电子邮件,收到激活邮件,点击链接,然后收到我的帐户已验证的消息。 这也发生在我的从教程中设置的测试系统上。
然后我尝试使用另一个电子邮件地址再次注册,但我希望看看它如何在激活页面上处理不匹配的密码。 它实际上让我输入两个不同的密码,没有错误。 当我注销时,我无法使用我使用的任何密码登录。
再说一遍——教程很棒。 我很享受深入了解它并弄清楚一切是如何运作的。
我正在努力在未来几个月内开始我自己的网络应用程序,而PHP for Absolute Beginners肯定可以帮助我。 感谢您提供的所有很棒的技巧,以及帮助我开始学习OOP。
很棒的教程系列! 赢得PHP for Absolute Beginners将是锦上添花。
非常感谢大家,期待更多内容。
很棒的系列! 我是PHP的绝对新手,因此可以使用PHP for Absolute Beginners的副本!!
文章看起来很棒,我很快就会开始。 请多写一些类似的文章。
PHP for Absolute Beginners的副本将很棒。
我一直自学PHP,"PHP for Absolute Beginners"的副本可能会让我克服学习障碍!
你的“重置密码”功能似乎有bug。 当我点击重置确认邮件提供的链接时,系统提示我“此帐户已验证。 你忘记密码了吗?” 这很令人困惑,因为我确实忘记了密码,并且想要找回它,而不是再次验证我的电子邮件地址。
除此之外,这是一项伟大的工作。 向你们致敬 =] 另外,PHP for Absolute Beginners的免费副本将非常棒。
从头到尾,你们干得真棒。 对你们如此迅速地完成工作感到惊讶。
我在一个彩色的列表中创建了我的评论。
http://coloredlists.com/161.html
感谢您提供另一个很棒的灵感来源。
KISS!
这是一个非常好的教程,朋友。
为什么不向我们展示一些与SSL或HTTPS相关的安全内容,例如购买证书以及使用“https”功能保护网站的方法?
很棒的教程系列,谢谢。
我不需要这本书。
即使我不是赢家,我也需要一本“PHP for Absolute Beginners”! ;)
很棒的教程,我落后几天了,但我的网络应用程序应该很快就能运行起来! 我真的很想获得一本“PHP for Absolute Beginners”的副本,以提高我的技能!
感谢您提供这个系列,我希望将来能看到更多类似的教程!
拥有一本PHP for Absolute Beginners的免费副本将是件好事。 感谢您提供这个很棒的教程
em
感谢您解释概念,然后展示代码! 很棒的教程
感谢您提供这个系列。 期待着完成它。 也希望获得这本书的副本!
这个系列很棒,非常感谢! 你们有机会发布源代码吗? 我在几个地方遇到了问题,经过多次剪切、粘贴、重新剪切、粘贴... 我就是无法弄清楚哪里错了。
我肯定可以用一本PHP for Absolute Beginners!
谢谢!
@Jason
目前,当我创建新列表项时,两次按回车键(或双击)就会显示两倍。
此外,当我按下三次时,还会添加一个空项(填充的空项似乎并不空,因为它填充了“点击编辑”。 但当我这样做时,它是空的)。
看起来像一个小bug ;-)
—
Krinkle
发现得好! 我们已经把它列入待修复列表。 谢谢!
再次跟你们说一下,Chris和Jason,
当我拖动列表中的项目,并且我的鼠标稍微向左偏离(即列表项的包装元素之外)时,它不会放置或创建空白。
似乎需要非常精确。 也许您可以扩大移动和可放置区域。
问候,Tem
很棒的工作和教程。
我真的很想要一本PHP for Absolute Beginners的副本
希望我能赢得“PHP for Absolute Beginners”作为圣诞礼物。
干杯。
PHP for Absolute Beginners
很棒的东西。 谢谢。
再次感谢您提供这个很棒的系列! 我也很想参加“PHP for Absolute Beginners”的抽奖活动:]
棒极了! 很棒的8部分系列——非常喜欢这个例子,并祈祷能赢得这本书:>) cs
跟随这个应用程序构建过程很棒。 我希望将来能看到更多类似的东西。 我也希望能获得一本PHP for Absolute Beginners的副本,帮助我构建一些我想到的应用程序,但我没有构建的知识…
我迫不及待地想深入这个项目! 感谢您提供这个很棒的系列,Chris和Jason。 我要把我自己的名字写到Jason的书“PHP for Absolute Beginners”的抽奖名单上。
很喜欢这个系列,我迫不及待地想等到我有时间深入学习。 也许在此期间我可以赢得一本Jason的“PHP for Absolute Beginners”。
谢谢,伙计们!
这是一个很棒的系列,能够看到一个项目从头到尾的开发过程真的很有帮助,感谢你们。
把我算在“PHP for Absolute Beginners”的赠品名单上。
我想要一本PHP for Absolute Beginners的副本!
“PHP For Absolute Beginners”,是吗? 我相信所有这些学习对我有好处,也将对我有好处,我感谢上帝!
对不起... 我这里刚开始庆祝节日季 :-) 非常感谢你们提供的教程。 它们确实非常有用,而且显然让其他人变得更有创意,并利用你们提供的资源想出他们自己的想法。 我们感谢你们的所有辛勤工作和付出!
感谢Jason和Chris提供的精彩教程。
我的小小建议:也许列表的公共链接不应该是一个简单的序列。 通过更改该数字,很容易浏览其他人的列表。 也许用户应该能够设置名称:“myname.html”。
“PHP for Absolute Beginners”(当然!)
我非常想赢得《PHP for Absolute Beginners》这本书!
很棒的系列,我也很希望得到《PHP for Absolute Beginners》这本书 :)
首先,我并不想要这本书,因为我不是新手。:). 尽管作为一个经验丰富的 PHP 开发者,我可以说一些类似“你这里做错了”或者“你那里做错了”之类的话,但我不会说,因为你们付出了努力和时间写了一些我从未见过的东西。
我可以给你们一些关于安全性的建议,这里是 kohana 的安全类,在第 00325 行,他们修改了 Christian Stocker 的函数来防御 XSS 攻击,或者你们可以直接使用 HTMLPurifier,不过这个库对于这个应用程序来说有点臃肿。
谢谢
谢谢!已记录并实现!
不客气!我之前也从未使用过 PDO,但会在我的下一个项目中考虑使用它,该项目将从头开始使用完整的 OOP,感谢你对 PDO 的介绍。
很棒的教程!
这个(以及随后的源代码)将会成为未来几年宝贵的资源!
哦,说到宝贵的资源,一本“PHP for Absolute Beginners”的副本会很棒!
很棒的教程,伙计们!非常实用的东西。我也很乐意有机会赢得“PHP for Absolute Beginners”。
也许我错过了什么明显的东西,但是….
我该如何创建一个新的清单?
或者 **我只能在每个账户中拥有一个清单吗?**
Gringer
目前你只能创建一个清单。我们计划在应用程序的下一个版本中添加对多个清单的支持。
这个教程就像提前几周送出的圣诞礼物。什么东西能比一本免费的“PHP for Absolute Beginners”更能完善这份礼物呢?
非常感谢你们的教程,我一定会在我下一个项目中使用其中的一部分。
来自巴伐利亚的问候
Roland
虽然不是作者的错,但说真的,我并没有完全理解这个系列。我真正需要做的是开始学习编程,而“PHP for Absolute Beginners”将会是一个很好的起点。
PHP for Absolute Beginners
很棒的系列
很棒的网站,但是字体美化功能不起作用。
很棒的系列。我想用“PHP for Absolute Beginners”来开始学习 php。谢谢。
教程解释得很好,那“PHP for Absolute Beginners”这本书也容易理解吗?:)
来自荷兰的问候
“PHP for Absolute Beginners”将会是我资源库中不错的补充。
干得漂亮,伙计们。我也很想得到一本免费的“PHP for Absolute Beginners”。
这个系列非常棒。如果你们能提供所有代码供下载,或者给我一本免费的“PHP for Absolute Beginners”,那就更棒了。谢谢。
我真的很想赢!
PHP for Absolute Beginners
来自优秀的人们的优秀系列
非常棒的教程,读起来很过瘾。
建议允许用户打印他们的清单。这样他们就可以创建/格式化清单,然后拿着清单出门。
PS:我真的很想赢得一本“PHP for Absolute Beginners”!
很棒的系列!“PHP for Absolute Beginners”看起来也很不错!
我一直想要“PHP for Absolute Beginners”!棒极了教程!
干得漂亮!我真的很想赢得一本“PHP for Absolute Beginners”!
我想要一本“PHP for Absolute Beginners”。
“PHP for Absolute Beginners”将会是我最近购买的《深入 WordPress》的不错伴侣。
- 是的 - 是的,“PHP for Absolute Beginners”
太棒了,所有这些测试人员 :)
我想要它!“PHP for Absolute Beginners”的电子书版本!
PHP for Absolute Beginners
很乐意拿到我新买的“PHP for Absolute Beginners”——谢谢你们!
当我拖动一些项目时,它们不会回到原来的位置。在我的情况下,项目卡在了“添加”文本框的正上方。
看看吧:http://i45.tinypic.com/1zb8hvr.jpg
Chris 和 Jason,你们好,我遇到一个错误,当创建很长的清单时会发生。当我添加大约 16 或 17 个清单时,所有东西都会乱七八糟——我使用的是 Firefox 3.5
很棒的系列,伙计们!思路清晰,展示得很好。
我也很希望得到一本“PHP for Absolute Beginners”,所以期待着它!
谢谢,我发现这个系列很有趣。不久前我创建了一个“待办事项清单”的 Web 应用程序,所以看看它与众不同的地方真是太好了。
我很想赢得“PHP for Absolute Beginners”这本书 :)
好时机,正是我想要的书。期待着收到我的“PHP for Absolute Beginners”。
谢谢你们——干得漂亮。
绝对是关于这类事情最好的博文之一,而且非常全面——你从此获得了一个终身读者!
再次看到有趣的教程。从几周前我买了 iPhone 开始,就一直在玩 Web 应用程序的想法。我不知道你们是怎么做到的,但是你们对这些帖子的发布时间把握得恰到好处。是的,我要试试能不能获得“PHP for Absolute Beginners”这本书 ;)
很棒的教程!希望很快收到我的“PHP for Absolute Beginners”。
感谢您提供了很棒的教程。我已经将所有 8 个“页面”都添加了书签以备将来参考。我用 PHP 编程已经几年了,但还没有使用它的 OOP 部分。我希望通过查看您的代码并在获胜后阅读这本书来了解更多。再次感谢!
PHP for Absolute Beginners。我绝对需要这本书。=(
无关紧要,但看到除了普通数据库以外的其他服务器端服务/应用程序/交互会很有趣。可扩展性也是一个不错的考虑因素。
对于如此简洁明了的教程,敬佩之至!
PHP for Absolute Beginners – 太棒了!
优秀的系列和很棒的应用程序。希望看到更多类似的文章。我非常喜欢你们的两个博客。
PHP for Absolute Beginners。
感谢 Chris 和 Jason。
Chris 和 Jason,
很棒的教程!看到有人像你们一样快速构建一个 Web 应用程序真是太酷了。很棒的指导,如果我能借助 PHP for Absolute Beginners 来学习,那么我也能快速上手了。
绝对是关于这类主题的最佳博客系列之一,内容非常全面!
你好,Chris
我不知道你的未来计划是什么,但我认为你可以通过把它做成一个逐步完成某事的教程来使这个项目更庞大,更有趣。
例如,我会有一个如何打电话给某人的教程。
然后在它下面
1. 拿起电话
2. 拨号(号码)
3. 拨号(拨号键)
4. 把电话贴在耳边 :)
这种类型的教程。我认为它会很棒,也很庞大。
感谢您提供这个很棒的教程!作为一个 ASP.NET 开发者,并且对 PHP 一无所知,我真的很想得到一本 PHP for Absolute Beginners 的副本。
这个教程系列很棒!我很乐意看到更多这种小型系列格式的文章。哦,我想要一本 PHP for Absolute Beginners 的副本!
很棒的教程。非常感谢
我用这个教程做了一个流畅的应用程序,但当我启动它时,它不允许我保持登录状态。作为一款 AIR 应用程序也许会不错。总的来说,非常酷,讲解也很好。
哦,对了,我想要一本“PHP for Absolute Beginners”的副本。
我最近才发现这个网站,我对它印象深刻。我想要一本 PHP for Absolute Beginners 的副本。
很棒的教程,正如预期的那样。
我很乐意赢得一本“PHP for Absolute Beginners”的副本。
非常感谢!
很棒的系列,Chris。
我真的很想赢得一本“PHP for Absolute Beginners”的副本。
再次感谢。
我需要一本“PHP for Absolute Beginners”!希望我能赢!
优秀的博客文章系列,伙计们。我非常喜欢 php 的逐步讲解,尤其是对增强安全性的关注。我也很想得到一本“PHP for Absolute Beginners”的副本。
我想要一本“PHP for Absolute Beginners”的副本。Frankengrammer 需要所有能得到的帮助。FIRE BAD !!!
再次感谢。
Brian D
哇,非常感谢您!我有很多网站的想法,但没有多少 PHP 背景将它们变成现实。这个指南是一个完美的逐步教程。
一本“PHP for Absolute Beginners”的副本真是太棒了!
我很乐意赢得一本“PHP for Absolute Beginners”的副本。请把我加入比赛。谢谢!
期待着“PHP for Absolute Beginners”…… 由于免费评论已经结束了,所以我们来谈谈另一个重要的评论。
这个系列真的非常棒。我已经把所有文章打印出来,以便离线阅读。我强烈推荐更多类似的内容。一个简单的想法是在 Amazon AWS 上对彩色列表进行扩展,比如对它进行完全配置……
再次感谢
Chanda
今天我在搜索关于 JQuery 的信息时,偶然发现了这个网站。对于我来说,这是一个很棒的,非常有帮助的网站。现在我成为了这个网站和 Chris Coyier 先生的粉丝。Chris Coyier 先生真的做得很好。
在这个网站上呆了几个小时,我偶然发现了这个页面,并阅读了关于这本书“PHP for Absolute Beginners”的信息。我认为它会很棒!对于我这个 PHP 初学者来说非常有用。我想要赢得一本“PHP for Absolute Beginners”的副本。
非常感谢!
我引用
阅读 Jason 对 OOP 的介绍。
请提供链接?
抱歉,抱歉:Understanding OOP
祝贺您完成了这个教程。工作做得非常好。
我很乐意得到一本“PHP for Absolute Beginners”的副本。
这个教程做得很好。我喜欢你们两个博客的合作。
我期待着您发布源代码!
感谢你们——我喜欢这个教程,并且很想得到一本 PHP for Absolute Beginners 来学习更多!
我很喜欢这个教程,并且把它发给了我的其他 Web 团队成员。我想要赢得一本 PHP for Absolute Beginners 的副本。
感谢您提供这个很棒的教程,现在我知道开发应用程序所需的大多数要求了。这再加上 PHP for Absolute Beginners 中的信息会非常有帮助……
我真的很感谢这个系列……毫无疑问,它是网上关于这个主题最全面(如果不是唯一)的免费教程之一。
一本 PHP for Absolute Beginners 的副本当然也是一个不错的奖励!
哦…… 太棒了。
这本书可能很有用。您能告诉我如何获取它吗?
“PHP for Absolute Beginners”是必备之物。我期待着它。
很棒的教程……从第 1 页到现在的页面。棒极了。
“PHP for Absolute Beginners”
感谢您的帮助。您的努力值得赞赏。
我非常希望能赢得这本书
“PHP for Absolute Beginners”
感谢您提供这个很棒的教程。
“PHP for Absolute Beginners”
感谢您提供这个很棒的教程。
正在等待源文件……它们会很快发布吗?
它们实际上已经发布了:Colored Lists Tutorial Series + Source Files
当然,我很想得到
PHP for Absolute Beginners!!
伙计们,感谢您提供了这个教程,我非常需要一本该书的副本。RGDS
“PHP for Absolute Beginners”
太棒了
太棒了!
请给我一本“PHP for Absolute Beginners”吧!
很酷的教程,很棒的赠品,还有“PHP for Absolute Beginners”适合我 ))
PHP for Absolute Beginners
非常好,我认为这本书帮助我很多,让我了解了 PHP 的世界 :)
现在太迟了吗?
哎呀,忘了“PHP for Absolute Beginners”
非常有趣的教程,可以跟着做。我想为 2.0 版本添加一个功能请求。如果这个应用程序可以连接到 Google 帐户,那将是多么酷啊!只是一个想法,谢谢。
如果没有最后的示例可以参考,这篇文章有什么意义?如果它太旧而不能使用,那么这篇文章也肯定太旧了。真是可惜,我期待着两者。
大家好,我一直试图弄清楚如何添加多个列表。我在 SQL 中添加了表格,如果我更改 PHP 代码以指向新表格,我可以添加到新表格中。但是,我想要做的是拥有多个列表,每个列表都指向一个单独的表格。例如,我可以跟踪员工参加的不同类型的会议。我在 lists.php 文件中遇到了问题,我可以在“action”下修改 $listObj,但不能添加对同一个“action”的多个调用。例如,我希望能够添加两个或三个像这样的操作
我是不是看错了?我做网页开发才两年左右,所以我还不是新手,但我还有很多东西不懂。
谢谢大家!
你好,Chris。我按照本主题的第 8 部分中的所有步骤操作。由于我是 Web 开发新手,我不明白如何打开这个 Scratch Web 应用程序的主页。我做了所有解释的事情。你能帮我理解如何打开所有页面以及我应该如何与 UI 交互吗?