没有SQL的简单PHP购物车

时间:2011-12-21 23:03:47

标签: php

我正在尝试使用价格,产品,注册和结帐区域创建一个简单的PHP购物车。我在Google上搜索过教程,但是所有这些教程都包含了SQL,这还不在我的技能范围内。任何人都有任何示例或其他教程资源,您可以参考PHP新手?

再次尝试创建简单的PHP购物车(无SQL),使用产品阵列,各种程序任务的功能,表单验证,购物车连续性的cookie /会话,模板文件和确认/回执电子邮件。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:7)

而不是批评,为什么不帮助?虚伪,但无论如何。 请记住,没有SQL数据库,你不能“注册”,但你可以预先制作用户名和密码

所以,让我们用php创建你的伪sql数据库。

我们需要一个表来存储登录用户的用户名和密码。

<?php
    //name this "users.php"
    //Keep in mind, this method does not secure your passwords... in fact, their so visible that you shouldn't ever use this method to store passwords. EVER. i'm just using to because i'm cool like that.
    //we'll name this "accounts", and make it a 2D array
    $accounts = array (
        array("username" => "username 1", "password" => "my password!"),
        array("username" => "username 2", "password" => "weeeeeee"),
        array("username" => "username 3", "password" => "aidsfijasjdfiawe"),
        array("username" => "rex", "password" => "asdfajweiogjr"),
        array("username" => "Kodlee Yin", "password" => "ghreoghrueagre")
    );
    //you get the point. Username goes into username, password into password. Create more for more users etc.
?>

现在我们需要一个存储产品的表

<?php
    //name this "products.php"
    $products = array (
        array("name" => "Whoop-ass", "price" => "9.99", "description" => "Its a can of whoop-ass"),
        array("name" => "Mouse", "price" => "54.95", "description" => "No, it's not real. It's a gaming mouse. 9200 DPI"),
        array("name" => "iPad", "price" => "Too expensive", "description" => "Something you never need, but something you want"),
        array("name" => "Stack Overflow", "price" => "9001.00", "description" => "The best website in the world."),
        array("name" => "Generic item 5", "price" => "4.99", "description" => "It says 4.99, but deep in your heart, you know its really 5 dollars.")
    );
?>

所以我们有我们的产品“表”和我们的帐户“表”。 现在,更难的部分是创建系统,该系统获取所有这些信息,显示它,允许登录和注销,并跟踪购物车中的物品。

<?php
    //name this file "index.php"

    //now keep in mind. I'm not going to fancy this up, so it's gonna look pretty ugly.
    //i'm also going to use javascript and jQuery (a javascript library) because I love the two. :)

    //lets name and start a session
    session_name("rexthing");
    session_start();

    //this string is arbitrary, but i like it for debugging
    $errorqueue = '';

    //we need to add our login details and products!
    include("users.php");
    include("products.php");

    //now in a normal php application of logging in or handling of login requests, i don't suggest doing this, but this is quick and easy(ish)
    $action = (isset($_GET['action'])) ? $_GET['action']: ""; //Ternary operator asking if there is an inputted action
    switch($action)
    {
        case "login":
            if(isset($_SESSION['username'])) //check if we're already logged in
            {
                $errorqueue['Login'] = "We've already logged in!";
            } else {
                $errorqueue['login'] = "Invalid username/password";
                $username = (isset($_POST['username'])) ? $_POST['username']: ""; //check if there is a username supplied, if not then leave it blank
                $password = (isset($_POST['password'])) ? $_POST['password']: ""; //check for password
                foreach($accounts as $value) //this is our login attempt
                {
                    if(($username == $value['username']) && ($password == $value['password']))
                    {
                        //please please please, never ever use this as a real login validation method!!! I'm just using it because i'm doing this quickly!
                        $_SESSION['username'] = $username;
                        $_SESSION['cart'] = ''; //this is our cart for the user this session
                        unset($errorqueue['login']);
                    }
                }
            }
            break;
        case "logout":
            session_unset(); //deletes all session variables/cookies
            break;
        case "additem":
            //this is a quick and dirty way to make a cart! plz if you're ever going to make a cart... don't do this!
            $itemid = (isset($_GET['itemid'])) ? $_GET['itemid']: "";
            if($itemid != "")
            {
                if($_SESSION['cart'] == "")
                {
                    $_SESSION['cart'] = array($products[$itemid]);
                } else {
                    array_push($_SESSION['cart'], $products[$itemid]);
                }
            }
            break;
        case "clearcart":
            $_SESSION['cart'] = "";
            break;
    }

    //we can now dynamically load our data knowing if we're logged in or not.
    //I'll even throw in some neat little effects because i'm bored
    echo <<<DISP
    <html>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <meta http-equiv="X-UA-Compatible" content="IE=9" />
        <head>
            <title>Rex's awesome thing</title>

            <script type="text/javascript" language="javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"> </script>
            <script type="text/javascript" language="javascript">
                $(function() {
                    $('.button').mouseover(function() {
                        $(this).animate({opacity:1},200);
                    })
                    .mouseleave(function() {
                        $(this).animate({opacity:.6},200);
                    });
                    $('#login_button').click(function() {
                        $('#login_form').submit();
                    });
                    $('.disp_item').click(function() {
                        var itemid = $(this).attr("id");
                        var location = "index.php?action=additem&itemid="+itemid;
                        window.location.href = location;
                    });
                    $('.disp_item').mouseover(function() {
                        $(this).css("background-color","#CCC");
                    })
                    .mouseleave(function() {
                        $(this).css("background-color","transparent");
                    });
                    $('#clearcart').click(function() {
                        window.location.href= "index.php?action=clearcart";
                    });
                });
            </script>

            <style type="text/css">
                body {
                    background-color:#000;
                    -moz-user-select: -moz-none;
                    -khtml-user-select: none;
                    -webkit-user-select: none;
                    user-select: none;
                    min-width:1000px;
                }
                #wrapper {
                    position:absolute;
                    top:10px;
                    right:50px;
                    left:50px;
                    min-height:500px;
                    background-color:#333;
                    border-radius: 15px;
                    padding: 10px 20px;
                }
                .button {
                    display:inline-block;
                    padding: 2px 20px;
                    background-color:#FFF;
                    border: 1px solid #999;
                    opacity:.6;
                    cursor:pointer;
                    border-radius:7px;
                }
                #logout {
                    color:#FFF;
                }
                .lololol {
                    display:inline-block;
                    width:150px;
                }
                .di_desc {
                    width:600px !important;
                }
                .disp_item {
                    cursor:pointer;
                }
            </style>
        </head>
        <body>
        <div id="wrapper">
DISP;
//the "DISP;" line must be on the far left with nothing after it. don't ask why. It just must.


        //now check to see if we're logged in or not
        if(isset($_SESSION['username'])) //now i'm using the true/false return of the "isset" function to determine if we've set (logged in) this variable
        {
            //yes we're logged in! lets show some stuff!
            $dUsername = $_SESSION['username'];

            echo <<<DISP
            Welcome $dUsername!<br />
            It's nice to see you back! <br />
            Click <a href="index.php?action=logout" id="logout">here</a> to logout!<br />
            <br />
DISP;
//this disp, same as above
            //lets display the stuff we have in our cart already
            echo "Stuff we have in our cart:<br />\n";
            $cart_total = 0;
            if($_SESSION['cart'] != '') {
            foreach($_SESSION['cart'] as $key => $value)
            {
                $cart_total = $cart_total + $value['price'];
                $name = $value['name'];
                $price = $value['price'];
                $desc = $value['description'];
                echo <<<DISP
                <div class="ahahahaha">
                    <span class="di_name lololol">$name</span>
                    <span class="di_price lololol">\$$price</span>
                    <span class="di_desc lololol">$desc</span>
                </div>
DISP;
            } }
            echo "Cart total: $".$cart_total;
            echo '<br /><span class="button" id="clearcart">Clear Cart</span>';
            echo "<br /> <br/>\n"; //some space
            //lets display stuff not in our cart
            echo "Click an item to add it to your cart:<br />\n";
            foreach($products as $key => $value)
            {
                $name = $value['name'];
                $price = $value['price'];
                $desc = $value['description'];
                echo <<<DISP
                <div id="$key" class="disp_item">
                    <span class="di_name lololol">$name</span>
                    <span class="di_price lololol">\$$price</span>
                    <span class="di_desc lololol">$desc</span>
                </div>
DISP;
//you know the drill...
            }
        } else { //isset if
            //no we're not logged in, show our login form
            echo <<<HAHA
            <form method="post" action="index.php?action=login" id="login_form">
            Username:<br />
            <input type="text" placeholder="Username" name="username" id="login_username" /><br />
            <br />
            Password:<br />
            <input type="password" placeholder="Password" name="password" id="login_password" /><br />
            <br />
            </form>
            <span class="button" id="login_button">Login</span>
HAHA;
//the "HAHA;" line must be on the far left.
        } //isset if

        //show our errors
        echo "<br /> <br />\n";
        if($errorqueue != "") {
        foreach($errorqueue as $key => $value)
        {
            echo $key . " error: " . $value . "! <br />\n";
        }}
        echo <<<FINI
        </div>
    </body>
</html>
FINI;
?>

如果你没有可以解析PHP的服务器,我把它放在我的服务器上(因为我需要在给它之前测试它)可以在这里: Your SQL-less shopping cart

答案 1 :(得分:2)

从你的问题来看,似乎你对SQL是什么以及PHP数组提供什么有一个根本的误解。

这里的关键词实际上是“持久性”。您希望如何保存有关客户和交易的数据?您不能简单地填充PHP数组,并期望在以后需要时保留这些数据。您必须以某种方式将此数据持久化到磁盘。根本没有解决这个事实。

将数据保存到磁盘上有一些不同的选择。

文件系统

http://php.net/manual/en/book.filesystem.php

PHP提供了各种与文件系统一起使用的功能。您可以创建一个使用平面文本文件作为持久性手段的购物车。如果你走这条路线,你可能会遇到更多问题,而不是简单地学习SQL。

NoSQL数据库

http://php.net/manual/en/class.mongodb.php

PHP支持像MongoDB这样不使用SQL进行交互和存储的文档数据库。最终,你仍然可能会学习如何访问这个数据库,尽管它非常像JavaScript。

SQL数据库

http://www.php.net/manual/en/book.mysqli.php

当然,PHP提供了传统的SQL数据库支持。


无论哪种方式,你都必须学习新的东西,根本没有办法解决它。真正的问题是你最重视学习的内容是什么?我肯定会推动你学习SQL。它对您来说将变得非常宝贵,一旦您学会了如何使用数据库存储数据,它最终将使您的开发项目变得更加容易。

答案 2 :(得分:0)

发现快速谷歌搜索: http://www.webforcecart.com/

在大多数基本购物车示例中,SQL可能会转换为保存在全局或会话变量中的数组。可能不是制作实际购物车的最佳方式,但可能值得玩得开心吗?

我认为一个基本的购物车,看看你是否可以购买推车并添加/删除产品可能没问题,但一旦你开始想要用户注册/添加/编辑/删除产品等,使用数据库将有助于生活更容易。