簡體   English   中英

沒有SQL的簡單PHP購物車

[英]Simple PHP Shopping Cart without SQL

我正在嘗試使用價格,產品,注冊和結帳區域創建一個簡單的PHP購物車。 我在Google上搜索過教程,但是所有這些教程都包含了SQL,這還不在我的技能范圍內。 任何人都有任何示例或其他教程資源,你可以參考PHP新手?

再次嘗試創建簡單的PHP購物車(無SQL),使用產品陣列,各種程序任務的功能,表單驗證,購物車連續性的cookie /會話,模板文件和確認/收據電子郵件。

在此先感謝您的幫助!

而不是批評,為什么不幫助? 虛偽,但無論如何。 請記住,沒有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的服務器,我已將它放在我的服務器上(因為我需要在給它之前測試它)這里可用: 你的無SQL購物車

從你的問題來看,似乎你對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。 它對您來說將變得非常寶貴,一旦您學會了如何使用數據庫來存儲數據,它最終將使您的開發項目變得更加容易。

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

在大多數基本購物車示例中,SQL可能會轉換為保存在全局或會話變量中的數組。 可能不是制作實際購物車的最佳方式,但可能值得玩得開心嗎?

我認為一個基本的購物車,看看你是否可以購買推車並添加/刪除產品可能沒問題,但一旦你開始想要用戶注冊/添加/編輯/刪除產品等,使用數據庫將有助於簡化生活。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM