J'ai un formulaire créé en utilisant HTML et CSS, ce formulaire n'est pas pour soumettre des données en fait c'est uniquement à des fins d'impression.

Ce formulaire a un champ de saisie dans le coin supérieur gauche pour mettre un numéro unique à 6 chiffres pour identifier de manière unique chaque formulaire.

Sur la page d'accueil, il y a un lien de bouton vers cette page de formulaire et je veux incrémenter ce numéro de série qui est par défaut 000000 chaque fois qu'un bouton de lien vers cette page de formulaire est cliqué.

index.html:

<a href="pages/form-1.html"></a>

form-1.html:

<input class="serial-no" type="text" name="fname" placeholder="000000" maxlength="6" size="6">
1
Aqeel Arcade 2 avril 2017 à 11:49

2 réponses

Meilleure réponse

Vous avez deux solutions:

  1. Utilisation des cookies
  2. Utilisation de la session du navigateur

Remarque: veuillez commenter une autre solution, tout en utilisant une solution

page-principale.html

<html>
    <head>
        <title>Main Page</title>
    </head>
    <body>
        <a href="form-1.html">Print</a>
    </body>
</html>

form-1.html

<html>
    <head>
        <title>Form Printing</title>
    </head>
    <body onload="loadNextSeqToForm()">
        <form>
            <input id="serial" class="serial-no" type="text" name="fname" placeholder="000000" maxlength="6" size="6">
        </form>
    </body>
    <script>
        /*
        //Solution 1: Using Cookies
        function getNextSeq() {
           var decodedCookie = decodeURIComponent(document.cookie);
           var ca = decodedCookie.split(';');
           for(var i = 0; i <ca.length; i++) {
               var c = ca[i];
               while (c.charAt(0) == ' ') {
                   c = c.substring(1);//Trim the empty space if exists
               }
               if (c.indexOf("next") == 0) {
                var fragments = c.split("=");
                if(fragments.length == 2 && !isNaN(fragments[1])) {
                    return parseInt(fragments[1]) + 1;
                }
               }
           }
           return "1";//default
        } 
        function loadNextSeqToForm() {
           var nextValue = getNextSeq();
           document.cookie = "next=" + nextValue + ";";
           document.getElementById("serial").value = formatToSixCharacters(nextValue);
        } 

        function formatToSixCharacters(num) {
           var numStr = num + "";
           if(numStr.length < 6) {
               var zeros = 6 - numStr.length;
               for(var i = 1; i <= zeros; i++) {
                   numStr = "0" + numStr;
               }
            }
            return numStr;
        }
        */

        //Solution 2: Using Session
        function loadNextSeqToForm() {
            var nextValue = sessionStorage.getItem("next") != null? sessionStorage.getItem("next") : 1; 
            document.getElementById("serial").value = formatToSixCharacters(nextValue); 
            sessionStorage.setItem("next", parseInt(nextValue) + 1)
        } 

        function formatToSixCharacters(num) {
            var numStr = num + "";
            if(numStr.length < 6) {
                var zeros = 6 - numStr.length;
                for(var i = 1; i <= zeros; i++) {
                    numStr = "0" + numStr;
                }
            }
            return numStr;
        }
    </script>
</html>

++ Code utilisant PHP et MySQL

page-principale.html

<html>
    <head>
        <title>Main Page</title>
    </head>
    <body>
        <!-- Note this time we have to use PHP file reference -->
        <a href="form-1.php">Print</a>
    </body>
</html>

form-1.php

<?php
session_start();
function getNextSequnceNumber() {
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "orders";
    $nextSeq = 1;
    $conn = new mysqli($servername, $username, $password, $dbname);
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    $sql = "SELECT next_seq FROM order_sequence";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
        if($row = $result->fetch_assoc()) {
            $nextSeq = $row["next_seq"];
        }
    }
    //Update next sequence number in db
    $sql = "UPDATE order_sequence SET next_seq = ".($nextSeq + 1);
    if (mysqli_query($conn, $sql)) {
        //Updated successfully
        //Write in log may be
    }
    $conn->close();
    return formatToSixCharacters($nextSeq);
}
function formatToSixCharacters($num) {
    $numStr = $num . "";
    if(strlen($numStr) < 6) {
        $zeros = 6 - strlen($numStr);
        for($i = 1; $i <= $zeros; $i++) {
            $numStr = "0" . $numStr;
        }
    }
    return $numStr;
}
?>
<html>
    <head>
        <title>Form Printing</title>
    </head>
    <body>
        <form>
            <input class="serial-no" type="text" name="fname" value="<?php echo getNextSequnceNumber() ?>" maxlength="6" size="6" readonly="readonly">
        </form>
    </body>
</html>

Scripts DB

CREATE DATABASE orders;
USE orders;
CREATE TABLE order_sequence (
    next_seq INT NOT NULL
);
-- DEFAULT VALUE
INSERT INTO order_sequence (next_seq)
    VALUES(1);

Remarque: assurez-vous de remplacer votre nom d'utilisateur et votre mot de passe DB

Version SQLITE3 du code demandée

form-sqlite.php

<?php
session_start();
class DBUtil extends SQLite3 {
    function __construct() {
        //Open db
        $this->open("orders.db");
    }

    function createTableIfNotExists() {
        //create table if not exists already
        $sql = "CREATE TABLE IF NOT EXISTS order_sequence ("
            ."    next_seq INT NOT NULL"
            .")";
        $result = $this->exec($sql);
        return $result;//Whether table created successfully or not
    }

    function updateNextSeqNumber($nextSeq) {
        //update next sequnce number in db
        $sql = "UPDATE order_sequence SET next_seq = ".$nextSeq;
        $result = $this->exec($sql);
        return $result;
    }

    function insertFirstTime() {
        //insert first time
        $sql = "INSERT INTO order_sequence (next_seq) VALUES (1)";
        $result = $this->exec($sql);
        return $result;
    }

    function getNextSeq() {
        //get next sequence number
        $sql = "SELECT next_seq FROM order_sequence";
        $result = $this->query($sql);
        $nextSeq = 1;
        if($row = $result->fetchArray(SQLITE3_ASSOC)) {
            $nextSeq = $row["next_seq"];
        } else {
            $this->insertFirstTime();//First sequence number, so that next update queries will be always successfull
        }
        $this->updateNextSeqNumber($nextSeq + 1);
        return $nextSeq;
    }
}

function getNextSequnceNumber() {
    //Create new object of utility class
    $db = new DBUtil();
    if(!$db){
        die("Connection failed: " . $db->lastErrorMsg());
    }
    //Check if connected
    if($db->createTableIfNotExists()) {
        $nextSeq = $db->getNextSeq();
        return formatToSixCharacters($nextSeq);
    } else {
        die ("Error: " . $db->lastErrorMsg());
    }
    //close connection finally
    $db->close();
}

function formatToSixCharacters($num) {
    $numStr = $num . "";
    if(strlen($numStr) < 6) {
        $zeros = 6 - strlen($numStr);
        for($i = 1; $i <= $zeros; $i++) {
            $numStr = "0" . $numStr;
        }
    }
    return $numStr;
}
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Form Printing</title>
    </head>
    <body>
        <form>
            <input class="serial-no" type="text" name="fname" value="<?php echo getNextSequnceNumber() ?>" maxlength="6" size="6" readonly="readonly">
        </form>
    </body>
</html>

++ PHPDesktop avec la version Sqlite

form-php-desktop-sqlite.php

Veuillez inclure ce fichier d'aide PHPDesktop pdo.php fourni par PHPDesktop . Cependant, il s'agit d'un petit fichier d'aide, il ne sert pas à grand-chose, mais il vous aidera pour le moment.

Lisez également Utilisation de Sqlite avec PHP Desktop

<?php
session_start();
include "./pdo.php";

function getNextSequnceNumber() {
    //Open connection
    $db_file = "./orders.sqlite3";
    PDO_Connect("sqlite:$db_file");
    //Create table if not exists
    $sql = "CREATE TABLE IF NOT EXISTS order_sequence ("
        ."    next_seq INT NOT NULL"
        .")";
    PDO_Execute($sql);

    //get next sequence number
    $sql = "SELECT next_seq FROM order_sequence";
    $nextSeq = PDO_FetchOne($sql);
    if($nextSeq == null) {
        $nextSeq = 1;
        //Also insert first time record
        $sql = "INSERT INTO order_sequence (next_seq) VALUES (1)";
        PDO_Execute($sql);
    }
    //Update next time sequence
    $sql = "UPDATE order_sequence SET next_seq = ".($nextSeq + 1);
    PDO_Execute($sql);
    return formatToSixCharacters($nextSeq);
}

function formatToSixCharacters($num) {
    $numStr = $num . "";
    if(strlen($numStr) < 6) {
        $zeros = 6 - strlen($numStr);
        for($i = 1; $i <= $zeros; $i++) {
            $numStr = "0" . $numStr;
        }
    }
    return $numStr;
}
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Form Printing</title>
    </head>
    <body>
        <form>
            <input class="serial-no" type="text" name="fname" value="<?php echo getNextSequnceNumber() ?>" maxlength="6" size="6" readonly="readonly">
        </form>
    </body>
</html>
1
Kamal Singh 11 avril 2017 à 03:15

Un moyen très simple de le faire consiste à utiliser jQuery . Utilisez l ' écouteur d'événement de clic avec le lien du bouton qui écoutera tous les clics effectués sur ce bouton et incrémentera la valeur à chaque clic. Avec la valeur de départ 000000, stockez la valeur incrémentée dans une variable, puis utilisez cette variable sur la page souhaitée.

PAR EXEMPLE:
Considérez que vous avez ce bouton sur la page home.html :

<a href="formpage.html" id="linkcounter">BUTTON</a>

Maintenant, en utilisant jQuery - écoutez les événements de clic à partir de ce lien et stockez les valeurs incrémentées sur une variable comme ceci:

var count = 0,
    default = '000000';
$('#linkcounter').click(function(e) {
    e.preventDefault();
    count++;
    var ctxt = '' + count;
    var incrementval = pad.substr(0, pad.length - ctxt.length) + ctxt;
});

// store the value into the local storage of DOM for the current session. this is done to retain the variable value even after a page is refreshed.
var incrementvallocal = incrementval;
localStorage.setItem("incrementvalueper", incrementvallocal);

La valeur incrémentée stockée dans la variable incrementval est envoyée au stockage local. Maintenant, utilisez simplement la valeur de cette variable sur la page souhaitée (dans cet exemple, il s'agit de formpage.html ).

Si vous souhaitez définir le texte d'espace réservé sur la page de formulaire qui a un champ d'entrée comme celui-ci:

<input class="serial-no" type="text" name="fname" placeholder="000000" maxlength="6" size="6">

Par la valeur incrémentée, puis utilisez ce code jQuery:

// get incremented value from the local storage of DOM.
var getincval = localStorage.getItem("incrementvalueper");

$(document).ready(function(){ 
  $('.serial-no').attr("placeholder", getincval);
});

Ce code utilise la valeur de la variable getincval (qui a la valeur de clic incrémentée) et la définit sur le texte d'espace réservé de l'élément input qui a la classe .serial-no.

Faites-moi savoir si cela aide. :)

0
Sudipto 2 avril 2017 à 18:46