คือผมอยากเก็บรหัสสินค้า conncept นี่ครับ ตอนนี้ใน db ผม เก็บรหัสแบบ auto increment อยู่ครับมันจะเป็น 1,2,3 ตามลำดับ
สร้างคอลัมน์ต่างหากครับ ก่อนบันทึกลงดาต้าเบส ก็ตรวจสอบดูว่าซ้ำรึเปล่า ประมาณนี้ครับ
Date :
2010-03-30 20:20:26
By :
kenessar
ยังไงครับ มี code ตัวอย่างไหมครับ งง
Date :
2010-03-30 20:39:29
By :
chonburi f.c
คงต้องถามกันอีกหน่อยครับว่า รหัสสินค้าที่จะบันทึกลงไปนี่ จะเป็นแบบใหน
1. ให้ลูกค้ากรอกเอง
2. ให้โปรแกรมสร้างขึ้น หรือสุ่มขึ้น
3. หรือให้ตรงกับ product_id แต่ทำเป็นห้าหลักและมีตัวอักษร p อยู่ข้างหน้า
Date :
2010-03-30 20:49:19
By :
kenessar
3. หรือให้ตรงกับ product_id แต่ทำเป็นห้าหลักและมีตัวอักษร p อยู่ข้างหน้า
ทำยังงี่เลยครับ
Date :
2010-03-30 21:34:20
By :
chonburi f.c
อันดับแรกคุณก็ต้องมีฟังก์ชั่นที่แปลงไอดีเป็นรูปแบบที่คุณต้องการก่อน ลองพิจารณาโค้ดข้างล่างนี้ครับ
Code (PHP)
<?php
function convert_id($id , $length)
{
$str = sprintf("P%0{$length}d",$id);
return $str;
}
echo convert_id(1,5);
echo "<br />";
echo convert_id(350,5);
echo "<br />";
echo convert_id(999999,5);
?>
มามองดูส่วนบนครับ ผมประกาศว่า function convert_id($id , $length)
ก็คือประกาศฟังก์ชั่นชื่อ convert_id มีพารามิเตอร์สองตัวคือ $id และ $length โดย $id นี่คุณก็ไปรับมาจากเลขไอดีในฐานข้อมูล และ $length คือจำนวนของหลักเลข
ถ้าผมเอาฟังก์ชั่นนี้ไปใช้ก็กรอกอากิวเม้นลงไปให้ครบ สมมุติว่าเลขที่ดึงมาจาก $id = 1 และ จำนวนหลัก = 5 ก็กรอกลงไป convert_id(1 , 5);
มันก็จะทำการแปลงเป็นรูปแบบสตริงที่ต้องการ
ผมจะใช้ฟังก์ชั่น sprintf มาช่วยจัดข้อความตามฟอร์แมท P%0{$length}d โดยที่ {$length} นั้นคือเลขที่รับมาจากพารามิเตอร์ที่ประกาศไว้ สมมุติว่าผมรับค่าเข้ามา 5 ดังนั้นฟอร์แมท จะเป็น P%05d โดยเราจะแยกเป็นสองส่วนคือ
P และ %05d
โดย P นั้นคือตัวอักษรนำหน้า ส่วน %05d หมายความว่าตรงจุดนั้นเป็นข้อมูลชนิดตัวเลข มีขนาดอย่างน้อย 5 หลัก หากมีจำนวนหลักน้อยกว่านั้นให้เอาเลข 0 ใส่แทน ให้นำค่าอากิวเม้น $id ไปใส่แทนตรงตำแหน่งนั้น
แล้วก็รีเทิร์นค่ากลับไปให้จุดที่เรียกใช้ครับ
ดังตัวอย่างเมื่อเอาฟังก์ชั่นนี้ไปใช้
Code (PHP)
echo convert_id(1,5);
echo "<br />";
echo convert_id(350,5);
echo "<br />";
echo convert_id(999999,5);
จะได้ผลลัพธ์
P00001
P00350
P999999
Date :
2010-03-31 10:37:35
By :
kenessar
ขอบคุณครับคุณ kenessar ถ้าทำอย่างที่คุณ kenessar บอก เนี่ยเวลาบันทึกลง db มันจะเป็น P00001 เลยใช่ไหมครับ เพราะตอนนี่ผมเก็บใน db เป็น 1,2,3 ไปเรื่อยๆ ครับ โดยที่ผมใช่รูปแบบ int ตั้งเป็น auto แล้วเวลาแสดงผล ผมใช่คำสั่งนี่ครับ
Code (PHP)
$id=$result['s_id'];
$code=sprintf("P%04d",$id);
Date :
2010-03-31 11:14:15
By :
chonburi f.c
แบบข้างบนนี่ได้เลยครับ
Date :
2010-03-31 12:12:14
By :
kenessar
ยังไม่ได้เลยครับ code ที่คุณ kenessar ให้มาผมเข้าใจว่ามันเป็นการดึงข้อมูลมาแสดงผลหรือแบบไหนครับ
ยังไงช่วยดู code ของผมให้ทีน่ะครับ คุณ kenessar ว่าควรเสริมตรงไหน code ของผมมันยังเป็นตอนที่ผมตั้ง auto increment ใน db อยู่เลยครับ เลยไม่รู้ว่าจะเริ่มยังไงพอ เอา auto increment ออก ขอความกรุณาด้วยน่ะครับ
Code (PHP)
<?
session_start();
$name=$_POST[name];
$name2=$_POST[name2];
$detail=$_POST[detail];
include ("connect.php");
$sql ="insert into tb_type values (' ','$name','$name2','$detail')";
$result =mysql_db_query($dbname,$sql);
if ($result) {
echo"<meta http-equiv=\"refresh\" content=\"0;URL=type_show.php\" />";
} else {
echo "<script>alert(' ไม่สามารถเพิ่มประเภทสินค้าได้น่ะครับ ');history.back();</script>";
echo"<meta http-equiv=\"refresh\" content=\"1;URL=type_show.php\" />";
}
mysql_close();
?>
Date :
2010-03-31 15:25:31
By :
chonburi f.c
อ๋อ โค้ดข้างบนนั้น มันแค่แปลงเลข ให้เป็นรูปแบบ p0001 เท่านั้นเองครับ ถ้าจะให้มีรายละเอียดเพิ่มเติม
ยังไงช่วยโพสรูปประเภทข้อมูลของตารางนี้ โดย print screen หน้า โครงสร้างตาราง ใน phpMyAdmin มาอีกซักหน่อยนะครับ จะได้ช่วยคุณ chonburi f.c คิด
Date :
2010-03-31 18:48:33
By :
kenessar
โครงสร้างของ ตารางสายพันธุ์ครับ
รายละเอียดครับ
ยังไงก็ขอขอบคุณ คุณ kenessar มากเลยน่ะครับที่ตอบคำถามผม ถ้ายังไงก็ขอ add mail คุณ kenessar ได้ไหมครับเนี่ย
thankyou
Date :
2010-03-31 20:57:16
By :
chonburi f.c
เมลผม [email protected] ครับ
ลองเอาโค้ดนี้ไปครับ
อันนี้เป็น sql script ครับ เอาไว้ใช้ สร้างตารางตัวอย่าง
seed.sql
-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- โฮสต์: localhost
-- เวลาในการสร้าง: 01 เม.ย. 2010 น.
-- รุ่นของเซิร์ฟเวอร์: 5.1.41
-- รุ่นของ PHP: 5.3.1
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- ฐานข้อมูล: `epointdb`
--
-- --------------------------------------------------------
--
-- โครงสร้างตาราง `seed`
--
CREATE TABLE IF NOT EXISTS `seed` (
`s_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`s_code` varchar(5) NOT NULL,
`s_name` varchar(150) NOT NULL,
`s_ename` text NOT NULL,
`s_origin` text NOT NULL,
`s_detail` varchar(150) NOT NULL,
PRIMARY KEY (`s_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--
-- dump ตาราง `seed`
--
เริ่มเขียนโค้ดจากการสร้างไฟล์คอนฟิกดาต้าเบสก่อน
dbconfig.php
<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$GLOBALS['conn'] = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db("mydatabase" , $GLOBALS['conn']);
mysql_query("SET NAMES UTF8",$GLOBALS['conn']);
?>
แล้วก็สร้างคลาสไว้จัดการตาราง สายพันธุ์ ในที่นี้ผมตั้งชื่อตารางว่า Seed เลยตั้งชื่อคลาสนี้ว่า Seed จะได้เหมือนกัน
Seed.php
<?php
/**
* Represent Seed Entity.
*/
class Seed
{
/**
* Seed Id.
*/
private $id;
/**
* Seed Fields Array.
*/
private $fields;
/**
* Construction of Seed Class. Initialize method.
*/
public function __construct()
{
$this->id = NULL;
$this->fields = array(
"s_code" => "",
"s_name" => "",
"s_ename" => "",
"s_origin" => "",
"s_detail" => ""
);
} // end of __construct method.
/**
* Magic method set.
* @param $key Key of fields array.
* @param $value Value that you want to set properties value.
*/
public function __set($key , $value)
{
if(array_key_exists($key , $this->fields))
{
$this->fields[$key] = $value;
}
} // end of __set method.
/**
* Magic method get.
* @return (Mixed) Seed Field value.
*/
public function __get($key)
{
return $this->fields[$key];
} // end of __get method.
/**
* Get Seed Class By id.
* @param $id Specify id of Seed.
* @return Seed obj which contain value from exist data in database. return FALSE if has not exist data.
*/
public function getById($id = 0)
{
$sql = sprintf("SELECT * FROM Seed WHERE s_id = %d" , $id);
$result = mysql_query($sql);
if(mysql_num_rows($result))
{
$row = mysql_fetch_assoc($result);
$obj = new Seed();
$obj->id = $id;
$obj->s_code = $row["s_code"];
$obj->s_name = $row["s_name"];
$obj->s_ename = $row["s_ename"];
$obj->s_origin = $row["s_origin"];
$obj->s_detail = $row["s_detail"];
return $obj;
}
else
{
return FALSE;
}
} // end of getById method.
/**
* Check Exists Code of Seed.
* @param $code Code of Seed
* @return TRUE if has exist code , FALSE if not found.
*/
public function isExistsCode($code)
{
$sql = sprintf("SELECT * FROM Seed WHERE s_code = '%s'", $code);
$result = mysql_query($sql);
if(mysql_fetch_array($result) > 0)
{
return TRUE;
}
else
{
return FALSE;
}
} // end of isExistsCode method.
/**
* Save Seed data to database. if not contain id do INSERT , else do UPDATE.
* @return TRUE if save successful . FALSE if error occured.
*/
public function save()
{
if($this->id == NULL)
{
$sql = sprintf("INSERT INTO seed(s_name , s_ename , s_origin , s_detail) ".
"VALUES('%s' , '%s' , '%s' , '%s' )",
$this->fields['s_name'],
$this->fields['s_ename'],
$this->fields['s_origin'],
$this->fields['s_detail']);
mysql_query($sql);
if(mysql_affected_rows() > 0)
{
$insert_id = mysql_insert_id();
$code = Seed::getCode($insert_id);
$sql = sprintf("UPDATE Seed SET s_code = '%s' WHERE s_id = %d", $code , $insert_id);
mysql_query($sql);
if(mysql_affected_rows() > 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}
}
else
{
$sql = sprintf("UPDATE Seed SET s_code = '%s' , s_name = '%s' , s_ename = '%s' , s_origin = '%s' , s_detail = '%s' WHERE s_id = %d",
$this->fields['s_code'],
$this->fields['s_name'],
$this->fields['s_ename'],
$this->fields['s_origin'],
$this->fields['s_detail'],
$this->id);
mysql_query($sql);
if(mysql_affected_rows() > 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
} // end of save method.
public static function getCode($id = 0)
{
return sprintf("P%04d", $id);
}
} // end of Seed Class.
?>
่ส่วนไฟล์นี้ จะเป็นการทดสอบเอาคลาสที่สร้างมาใช้งานครับ
testSeed.php
<pre>
<?php
require_once("include/dbconfig.php");
require_once("class/Seed.php");
// Insert date.
$obj = new Seed();
$obj->s_name = "name";
$obj->s_ename = "ename";
$obj->s_origin = "origin";
$obj->s_detail = "detail";
var_dump($obj->save());
// Update data.
$obj = Seed::getById(7);
$obj->s_name = "name7";
$obj->s_ename = "ename";
$obj->s_origin = "origin";
$obj->s_detail = "detail";
var_dump($obj->save());
// Check Exists Code.
var_dump(Seed::isExistsCode("P0001"));
?>
</pre>
Date :
2010-03-31 23:26:53
By :
kenessar
วิธีใช้
ถ้าจะแอดข้อมูลใหม่ลงไป ก็สร้างออบเจ็คแบบนี้
$obj = new Seed();
ถ้าจะแก้ไขก็เอาไอดีใส่เมธอด Seed::getById($id) สมมุติ id = 1 ก็
$obj = Seed::getById(1);
แล้วก็เซตค่าเลยครับ
$obj->s_name = "name";
$obj->s_ename = "ename";
$obj->s_origin = "origin";
$obj->s_detail = "detail";
แล้วก็บันทึก
$obj->save(); ถ้าบันทึกได้ ก็จะคืนค่า true ถ้าไม่ได้ก็ false (ถ้าอัพเดตซ้ำ มันมักจะ false)
พอบันทึกลงไป เดี๋ยว มันจะเจนโค้ดให้เองครับ
ถ้าจะเปลี่ยนเลขเป็นโค้ดก็ Seed::getCode(1); มันก็จะคืนค่า "P0001" ให้เองครับ
โค้ดดูไม่ยากครับ ลองไปปรับแก้ดูครับ
Date :
2010-03-31 23:32:34
By :
kenessar
ขอบคุณครับผม คุณ kenessar เดี๋ยวผมลองเอาไปทำดูก่อนครับ ผม add mail ไปแล้วน่ะครับ
Date :
2010-04-01 12:48:49
By :
chonburi f.c
Load balance : Server 04