【超详细】如何从数据库取出数据,动态填充html

【超详细】如何从数据库取出数据,动态填充html


step1:Javascript

首先你需要写一个javascript片段,用于生成html节点并填充到html正文中已存在的某个节点中。

如果要添加这样一段html代码:

<div class='items'>

    <!-- A item Demo -->
    <div class="item" id="item1">
        <!-- pic -->
        <a class="item_pic" href="#">
            <img src="img/iphone12.jpg">
        </a>
        <!-- name -->
        <a href="#" class="item_name"><h1>iPhone 12 256G (1990 Classic)</h1></a>
        <!-- buttons -->
        <div class="item_amount">
            <!-- adjust -->
            <div class="amount_button">
                <!-- minus -->
                <button onclick="minus(1)" class="minus">-</button>
                <!-- amount -->
                <input type='text' id="amount1" class="amount" value="6" readonly="readonly">
                <!-- plus -->
                <button onclick="plus(1)" class="plus">+</button>
            </div>
            <!-- delete -->
            <button class="del_item" onclick="delItem(1)">Delete</button>
        </div>
        <!-- price -->
        <h3 class="item_price">HK$ 0.01</h3>
    </div>
    <!-- split line -->
    <hr id="hr1">
</div>

可以用这样一个js脚本实现(源代码中这段js被我添加在<head>中的<script>里):

// the item_id is not the one in database, but the No.id item displayed on website
function addItem(item_id, item_url, item_pic, item_name, item_num, item_price) {
    
    
     // item x
     var itemNode = c('div');
     itemNode.setAttribute("class", "item");
     itemNode.setAttribute("id", "item"+item_id);
         // pic
         var pic = c('a');
         pic.setAttribute("class", "item_pic");
         pic.setAttribute("href", item_url);
             // img
             var img = c('img');
             img.setAttribute("src", item_pic);
             // add children
             pic.appendChild(img);
         // name
         var name = c('a');
         name.setAttribute("class", "item_name");
         name.setAttribute("href", item_url);
             // h1
             var h1 = c('h1');
             h1.append(document.createTextNode(item_name));
             name.appendChild(h1);
         // buttons
         var buttons = c('div');
         buttons.setAttribute("class", "item_amount");
             // adjust
             var adjust = c('div');
             adjust.setAttribute("class", "amount_button");
                 // minus
                 var minus = c('button');
                 minus.setAttribute("onclick", "minus("+item_id+")");
                 minus.setAttribute("class", "minus");
                 minus.appendChild(document.createTextNode("-"));
                 // amount
                 var amount = c('input');
                 amount.setAttribute("class", "amount");
                 amount.setAttribute("type", "text");
                 amount.setAttribute("id", "amount"+item_id);
                 amount.setAttribute("value", item_num);
                 amount.setAttribute("readonly", "readonly");
                 // plus
                 var plus = c('button');
                 plus.setAttribute("onclick", "plus("+item_id+")");
                 plus.setAttribute("class", "plus");
                 plus.appendChild(document.createTextNode("+"));
                 // add children
                 adjust.appendChild(minus);
                 adjust.appendChild(amount);
                 adjust.appendChild(plus);
             // delete
             var del = c('button');
             del.setAttribute("class", "del_item");
             del.setAttribute("onclick", "delItem("+item_id+")");
             del.appendChild(document.createTextNode("Delete"));
             // add children
             buttons.appendChild(adjust);
             buttons.appendChild(del);
         // price
         var price = c('h3');
         price.setAttribute("class", "item_price");
         price.appendChild(document.createTextNode("HK$ "+item_price));
         // add children
         itemNode.appendChild(pic);
         itemNode.appendChild(name);
         itemNode.appendChild(buttons);
         itemNode.appendChild(price);
     // add children
     var hr = c('hr');
     hr.setAttribute("id", "hr"+item_id);
     // add children
     var parent = document.getElementsByClassName("items")[0];
     parent.appendChild(itemNode);
     parent.appendChild(hr);
 }

 function plus(id) {
    
    
     var amountId = 'amount' + id;
     var e = document.getElementById(amountId);
     var value = e.value;
     var reg = /^[1-9]+[0-9]*]*$/;
     if (!reg.test(value)) return;
     else value = value - '0' + 1;
     if (value == '0') delItem(id);
     e.setAttribute("value", value);
 }

 function minus(id) {
    
    
     var amountId = 'amount' + id;
     var e = document.getElementById(amountId);
     var value = e.value;
     var reg = /^[1-9]+[0-9]*]*$/;
     if (!reg.test(value)) return;
     else value = value - '0' - 1;
     if (value == '0') delItem(id);
     e.setAttribute("value", value);
 }

 function delNode(e) {
    
    if (e != null) e.parentNode.removeChild(e);}
 function delItem(id) {
    
    
     alert("You just delete an item. Checkout to save the changes.");
     var amountId = 'item' + id;
     delNode(document.getElementById(amountId));

     var hrid = 'hr' + id;
     delNode(document.getElementById(hrid));
 }

需要注意的是,js添加html节点的代码需要在html正文加载完毕(正文需要先加载出那个父节点,才能将js中生成的添加进去)之后再调用。

点我查看文件中html php js的加载顺序


step2:php

写一个php代码段,可以从数据库取完数据再调用js代码;也可循环取数据,一边取一边调用js函数,这就实现了动态添加html。

<?php
    {
    
    
        $serverName = "127.0.0.1";  // localserver ip
        $userName = "root";  // user name
        $password = "Your password";  // password
        $dbname = "cart";  // table name in database

        $connection = new mysqli($serverName, $userName, $password, $dbname);

        if (!$connection->connect_error) {
    
    
            // echo "Connection success<br>";
        } else {
    
    
            die("Connection failed: ". $connection->connect_error. "<br>");
        }
    }

    // get user_id
    $user_id = 1;

    // get item ids
    $item_ids = array();
    $sqlstat = "SELECT item_id FROM cart WHERE user_id=". $user_id;
    $result = $connection->query($sqlstat);
    while ($row = $result->fetch_assoc()) {
    
    
        array_push($item_ids, $row['item_id']);
    }

    // get item numbers
    $item_nums = array();
    $sqlstat = "SELECT item_num FROM cart WHERE user_id=". $user_id;
    $result = $connection->query($sqlstat);
    while ($row = $result->fetch_assoc()) {
    
    
        array_push($item_nums, $row['item_num']);
    }

    // add items one by one
    for ($i = 0; $i < count($item_ids); ++$i) {
    
    
        $id = $item_ids[$i];

        $url = '#';

        $sqlstat = "SELECT img_path FROM items WHERE id=".$id;
        $pic = $connection->query($sqlstat)->fetch_assoc()['img_path'];

        $sqlstat = "SELECT name FROM items WHERE id=".$id;
        $name = $connection->query($sqlstat)->fetch_assoc()['name'];

        $num = $item_nums[$i];
        
        $sqlstat = "SELECT price FROM items WHERE id=".$id;
        $price = $connection->query($sqlstat)->fetch_assoc()['price'];

        // call js function
        echo "<script>addItem(".$id.", '".$url."', '".$pic."', '".$name."', ".$num.", ".$price.");</script>";
    }

    $connection->close();
?>

(这段代码被我放在了整个php文件(php和html文件有何区别)末尾。因为此时html正文中那个父节点已被加载完毕,然后再调用js函数即可实现添加html内容。)




End

猜你喜欢

转载自blog.csdn.net/weixin_39591031/article/details/111204401