У меня есть две HTML-формы на одной странице, и в верхней части каждой формы есть поле ввода, которое предназначено, чтобы дать каждой форме серийный номер.
я использую phpdesktop chrome с html5, php и sqlite3, чтобы показать 6-значный номер нет из базы данных orders.db в поле ввода
вот мой код, который я использую
forms.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 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" xml:lang="en" lang="en">
<head>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
<title></title>
</head>
<body>
<!-- form-2 -->
<div class="grid">
<div class="grid-m1">
<div class="grid-c1">
<h2 class="form-no">(form-1)</h2>
<input id="division-no" class="serial-no division-no" type="text" name="fname" value="<?php echo getNextSequnceNumber() ?>" maxlength="6" size="6">
</div>
</div>
</div>
<!-- form-2 -->
<div class="grid">
<div class="grid-m1">
<div class="grid-c1">
<h2 class="form-no">(form-2)</h2>
<input id="division-no" class="serial-no division-no" type="text" name="fname" value="<?php echo getNextSequnceNumber() ?>" maxlength="6" size="6">
</div>
</div>
</div>
</body>
</html>
и этот код работает нормально, за исключением одной проблемы, и проблема в том, что он показывает 000001 в поле ввода формы-1, а затем добавить 1 и показывает 000002 в форме-2, но я хочу, чтобы он показывал один и тот же серийный номер на обеих формах, например 000001 в форме-1, а также 000001 на форме-2 это все!
так как я мало знаю о php и sqlite, я не могу понять это.
любая помощь будет по достоинству оценена.
PS: я не хочу менять природу кода, потому что каждый раз, когда я нажимаю на ссылку на эту страницу, это увеличивает серийный номер на единицу в поле ввода.
Каждый раз, когда вы вызываете getNextSequnceNumber (), вы увеличиваете значение. Вы хотите сохранить порядковый номер в переменной один раз, а затем использовать эту переменную в нескольких местах.
Кроме того, способ настройки вашего кода будет увеличиваться при каждой загрузке страницы.
...
<?php
$sequenceNumber = getNextSequnceNumber();
?>
<!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" xml:lang="en" lang="en">
<head>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
<title></title>
</head>
<body>
<!-- form-2 -->
<div class="grid">
<div class="grid-m1">
<div class="grid-c1">
<h2 class="form-no">(form-1)</h2>
<input id="division-no" class="serial-no division-no" type="text" name="fname" value="<?php echo $sequenceNumber; ?>" maxlength="6" size="6">
</div>
</div>
</div>
<!-- form-2 -->
<div class="grid">
<div class="grid-m1">
<div class="grid-c1">
<h2 class="form-no">(form-2)</h2>
<input id="division-no" class="serial-no division-no" type="text" name="fname" value="<?php echo $sequenceNumber; ?>" maxlength="6" size="6">
</div>
</div>
</div>
</body>
</html>
РЕДАКТИРОВАТЬ
<?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;
}
$sequenceNumber = getNextSequnceNumber();
?>
<!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" xml:lang="en" lang="en">
<head>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
<title></title>
</head>
<body>
<!-- form-2 -->
<div class="grid">
<div class="grid-m1">
<div class="grid-c1">
<h2 class="form-no">(form-1)</h2>
<input id="division-no" class="serial-no division-no" type="text" name="fname"value="<?php echo $sequenceNumber; ?>" maxlength="6" size="6">
</div>
</div>
</div>
<!-- form-2 -->
<div class="grid">
<div class="grid-m1">
<div class="grid-c1">
<h2 class="form-no">(form-2)</h2>
<input id="division-no" class="serial-no division-no" type="text" name="fname"value="<?php echo $sequenceNumber; ?>" maxlength="6" size="6">
</div>
</div>
</div>
</body>
</html>
Других решений пока нет …