几天前,我在PHP中做了一个销售系统的练习。它是用纯PHP写的,没有Javascript。注意,对于样式,我使用了一个Bootstrap的变体。
这些文件没有结构,但就像我说的,这是一个例子。我写这个也是因为它要么是为别人服务的,要么是为我自己服务的一些参考。
对于数据持久性,它使用MySQL。这个POS机保存产品和销售。它不处理用户的权限。我们把购物车存储在会话中,嗯,我最好在这篇文章中分部分解释。
显然,这个POS软件是免费和开源的。
测试完成的系统
预览
这就是完成后的系统的样子。
在线上
为了让你有一个小小的想法,你可以访问这个链接来测试这个系统。以同样的方式,在YouTube上观看它。
下载
如果你想下载它并在你的本地环境中试用它,我把它放在下面。
PHP中的销售系统
数据库
这里我留下了所使用的SQL方案。也保留了一些记录,这样你在开始时就有一些东西可以使用。
在Gist上查看代码。
而为了连接到MariaDB/MySQL数据库,我们使用PDO。实现这一目的的代码如下。
查看Gist上的代码。
记住要改变用户、密码和数据库名称。
产品管理
添加产品
这是一个简单的表格,要求提供信息。它只要求提供条形码、描述、销售价格、购买价格和存在。
在Gist上查看代码。
我们包括一些文件,这些文件是页眉和页脚。这些文件将在下面解释。
当提交表单时,数据被接收到一个名为nuevo.php 的文件中。这个文件有以下代码。
在Gist上查看该代码。
正如你所看到的,我们没有做任何验证,我们插入的是来自表单的数据。在一切顺利的情况下,我们重定向到Listar.php ,这样就会给人一种错觉,即产品就在那里被保存并被添加到表中。
列出产品
说到列出产品,这里是绘制表格的代码。
在Gist上查看该代码。
就在那里,我们包括了用于编辑和删除产品的按钮,这些按钮只不过是另一个页面的链接。顺便说一下,我们还放了一个添加新产品的按钮;它也是一个指向表单的链接。
编辑产品
当我们点击编辑按钮时,它会把我们重定向到另一个文件。在这个文件中,我们使用$_GET 读取id。然后,我们对数据库进行查询,其中的id就是我们读取的那个。
如果该产品不存在,我们就指出它。如果它存在,我们就画出同样的表格,但现在我们用输入标签的值属性来填充它。对于文本区域来说,情况有所不同,因为内容必须在标签之间,而不是作为一个属性。
在Gist上查看代码。
请注意,为了知道我们正在编辑的id(我们将用它来做where),我把它保存在一个隐藏的输入中。
这里有两个按钮。其中一个是提交表单;另一个是简单的链接到Listar.php 。这一切的意义在于为用户提供导航按钮。
保存更改
上面我们看到了要编辑的表单。现在让我们看一下我们实际保存修改的文件。是这样的。
在Gist上查看该代码。
它与插入一个新的表格非常相似,但这个表格是编辑的。如果一切顺利,它将带我们到Listar.php ,它将负责显示产品,并进行了修改。
删除产品
最后让我们来看看删除的那个。请注意,它没有要求确认,所以你必须小心地做。
在Gist上查看代码。
这样,我们就完成了这个POS机的产品管理(CRUD)。
进行销售
这是我最喜欢的部分。它只适用于数组和会议,但我喜欢这个结果。
销售界面
在Gist上查看代码。
该界面显示了一个表格,该表格将是构成销售的产品。底部有两个按钮,分别用来完成销售和取消销售。还有一些ifs,显示 "不存在的产品 "或诸如此类的警告。
请注意,它有一个输入,是用来读取条形码的。它实际上是一个表单中的输入。当这个表单被发送时,它就会转到我们下面要看到的文件中。
最后,如果我们看一下标题,我们会注意到它在$_SESSION 的超全局数组中声明了购物车索引。这就是我们要放置产品的地方
添加到购物车
我重申,这是我最喜欢的部分。我们首先检查产品是否存在,如果不存在,我们返回vender.php ,并传递状态5,表示该产品已经没有库存了。
如果产品不存在(也就是说,它不存在,而不是说它的存在是0),我们发送状态4。
查看Gist上的代码。
但是,假设一切正常,产品存在,我们登录并查看购物车数组,看看我们之前是否已经添加了该产品。如果我们已经添加了它,那么我们只改变数量。
也就是说,如果 "草莓果酱 "已经存在,并且他们重读了属于该产品的代码,我们将不会在表格中显示这两种产品。最好是我们显示一个,并说明其数量是2,以此类推。
如果它不存在于购物车中,那么我们就把它添加到数组中,并放入其数量,默认为1。没有必要做乘法。
然后,如果它已经存在,我们计算它的总数,这是销售价格乘以购物车中的数量的结果。
从购物车中删除
现在让我们看看如何从购物车中删除产品。我们只需删除属于我们在$_GET 中收到的索引的元素。这段代码非常容易理解。
在Gist上查看代码。
哦,我们回到vender.php ,状态为3,我想这表示已成功删除。
完成销售
这是一个简单的文件,它将在数据库中插入已售出的产品,以及销售情况、日期和总额。它看起来像这样。
查看Gist上的代码。
我们减去产品的库存,计算服务器时间并保存销售。然后我们清理购物车。
如果你问我beginTransaction 和commit ,那是为了(虽然不明显)加快这个过程。这就像对数据库做了大量的修改,但直到我们完成后才保存它们。更多信息见《用PHP和MySQL编写的语句中的低性能》。
顺便说一下,无论如何,我们都要用一个状态回到列表中。
取消销售
要取消销售,我们只需清空数组,就可以了。我们带着状态返回列表。
查看Gist上的代码。
下面我给你看一张你取消销售时的图片。
销售
为了完成这个伟大的教程,让我们看一下销售报告。它包括两件事:列出销售和能够删除它们。
列出销售情况 - 销售报告
请不要责怪我,但我不知道如何(如果有人知道,请向我解释)做一个查询,其结果包含一个数组。事情是这样的,我想用一些东西来显示销售的产品。我唯一能想到的是group_concat 。 总之,代码是这样的。
在Gist上查看该代码。
通过这种方式,我们在查询中连接它,但在PHP中 "解开 "它。然后就有了一个不错的结果。
删除销售
删除一个销售就像删除一个产品。请注意,它也不要求确认。代码看起来像这样。
在Gist上查看该代码。
页眉和页脚
正如承诺的那样,这里是页眉和页脚。它们只定义了容器、导航菜单、一些元标签和加载css库。
页眉是。
在Gist上查看代码。
而页脚是。
查看Gist上的代码。
结论
正如我所说,它没有结构。它做得很快,但它是有效的,这才是最重要的。
顺便说一下,如果你想看到类似于这个系统的东西,但在Laravel中,请查看这个帖子。
The postPure PHP Point of sale system with MySQLappeared first onParzibyte's blog.