การรันตัวเลขที่มีรูปแบบเป็น string ในฐานข้อมูลเก็บเป็น varchar คืออยากให้เลขที่รันออกมามี 4 หลัก
https://www.thaicreate.com/php/forum/027628.html
ใช้ select max ครับ ดูตัวอย่างที่ความเห็นที่ผมเขียนไว้ครับ
Date :
2010-05-09 11:00:38
By :
deawx
Code (PHP)
$sql="select max(DF_No) from addall";
$result=mysql_query($sql);
$r=mysql_fetch_array($result);
$id_max=$r[0]+1;
echo str_pad($id_max, 4, "0", STR_PAD_LEFT);
ใส่ไว้ตรงหน้า saveหรือ addอะคะเพราะในหน้า save มีการใช้ insert แล้วโดยใช้ sql ไปแล้วคือมันซ้ำได้หรอคะ
ไว้ในหน้า add ก็ error
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
แต่มันก็ echo 0001ออกมานะคะ
แต่กดจะเซฟครั้งที่2เลขก็ไม่เห็นจะรันเลย
Date :
2010-05-09 11:19:12
By :
SG14
คือขั้นตอนที่เราต้องการเป็นดังนี้
รับค่าในหน้า add ค่าว่าง (ในdb ว่างเปล่ายังไม่มีอะไรเลย)
เซฟค่าในหน้า save ค่าว่าง (insert ค่าว่างลงฟิลด์ id)
ทำการ+1ในหน้า save ค่าก็จะเป็น 0001 แล้วไป update 2ตาราง ในฟิลด์id ก็จะเป็น 0001 ทั้ง2ตาราง
เสร็จแล้วถ้าเรากด add อีกมันก็จะรันเป็น 0002ไปเรื่อยๆ
เขาทำยังไงอะคะ
Date :
2010-05-09 11:43:08
By :
SG14
<?
/**
* Configuration connect to server
* Connect to localhost
* Set server name
* Set database name
* Set user name
* Set user password
* -------------- Database for demo ------------
--
-- โครงสร้างตาราง `test`
--
CREATE TABLE `test` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(10) default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- dump ตาราง `test`
--
INSERT INTO `test` VALUES (1, 'AAAA');
INSERT INTO `test` VALUES (2, 'BBBB');
INSERT INTO `test` VALUES (3, 'CCCC');
*/
$serv_name = "localhost"; // <-- Your localhost
$dbas_name = ""; // <-- Your database name
$user_name = "root"; // <-- Your user name
$user_pass = "1234"; // <-- Your user name
$conn = @mysql_connect($serv_name, $user_name, $user_pass) or die
("ERROR : ไม่สามารถติดต่อเซิฟเวอร์ ได้ค่ะ!!!<br /> Mysql report : ".mysql_error()); // <-- Create connection
@mysql_select_db($dbas_name, $conn) or die
("ERROR: ไม่สามารถเลือกฐานข้อมูล ได้ค่ะ!!!<br /> Mysql report : ".mysql_error()); // <-- Select database
@mysql_query("SET NAMES UTF8") or die
("ERROR : ไม่สามารถเซ็ตอ็นโค๊ดดิ้ง ได้ค่ะ!!!<br /> Mysql report : ".mysql_error()); // <-- Set database encoding
// --------------------------------------------------------------------------------------------------------------
/* ------------------- Show data from table test ------------------*/
$reslut = mysql_query('SELECT * FROM test') or die (mysql_error());
echo ' ID Name', '<br />';
if($reslut) {
while($row = mysql_fetch_assoc($reslut)){
echo sprintf("%04d", $row['id']), ' ', $row['name'], '<br />';
// คำสั่งใส่เลข 0 ด้านหน้าตัวเลข sprintf("%04d", $row['id'])
}
}
// -----------------------------------------------------------------
/* ------------------- Insert name to table test ------------------*/
if($_POST['submit']) {
mysql_query("INSERT INTO test (id, name) VALUES('', '{$name}')") or die (mysql_error());
}
// ------------------------------------------------------------------
// debuging post variable
//echo '<pre>'; print_r($_POST); echo '</pre>';
?>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form action="" method="post">
<input type="text" name="name" />
<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>
Demo
ไม่รู้ว่าตรงความต้องการหรือเปล่า อ่านแล้วงง เอิ๊กๆ เอิ๊กๆ
Date :
2010-05-09 18:29:36
By :
DownsTream
คะ แล้วเราจะ+ค่าได้อย่างไรอะคะ
Date :
2010-05-09 20:15:24
By :
SG14
ไม่จำเป็นต้อง + ค่าครับ
กำหนด database ให้มันบวกเองอัตโนมัติ
Date :
2010-05-09 20:34:10
By :
DownsTream
ตอนนี้เราทำดังนี้
ใน db
type = int
length = 4
attributes = unsigned zerofill
extra = auto increment
เหมือนกันหรือไม่คะ
Date :
2010-05-09 20:56:06
By :
SG14
ถ้า attributes = unsigned zerofill
ก็ไม่ต้องใช้คำสั่งนี้ครับ sprintf("%04d", $row['id']);
สั่ง echo $row['id']; ได้เลย เพราะว่า database แปลงเรียบร้อยลแล้วครับ
กรณีของผมคือ เอามาแปลงทีหลัง
Date :
2010-05-09 21:12:53
By :
DownsTream
Load balance : Server 02