มีวิธีเปลี่ยนค่าของ $_SESSION ให้อยู่ในรูป array มั้ยครับ
เอาโค๊ดมาด้วยครับ อย่าลืม 3 อย่างสำคัญ ในการวิเคราะห์
1 Code สำคัญที่สุด ไม่มีโค๊ดก็ต้องถามให้เข้าจุดปัญหา แต่ยากที่จะตอบครับ
2 โครงสร้าง database ถ้ามีก็ง่ายสำหรับ จำลอง database ไม่ต้องคีย์เองให้เมื่อย ช่วยกันทั้งคนถาม และคนตอบ
3 รูปภาพ ถ้ามีก็ง่ายสำหรับการวิเคราะห์ครับ
ประวัติการแก้ไข 2014-08-13 15:18:35
Date :
2014-08-13 15:18:10
By :
Chaidhanan
อันนี้โค้ดหน้าเริ่มต้นของ session ครับ
login_check.pkp
session_start();
require_once("config.inc");
mysql_connect($host,$user,$pwd) or die ("ติดต่อ Host ไม่ได้");
mysql_select_db($dbname) or die ("ติดต่อฐานข้อมูลไม่ได้");
mysql_query("SET NAMES utf8");
$username = $_POST['user'];
$password = $_POST['pass'];
if(!$username || !$password){
echo '<h3>Please text your username and password completely.</h3><br />
<a href="Javascript:window.history.back();">Back to main page.</a>';
}
else{
$query = mysql_query("SELECT * FROM linework inner join user on user.user_id = linework.user_id inner join job_type on job_type.job_id = linework.job_id inner join seven_shop on seven_shop.id = linework.store_id where user.username = '$username' and user.password = '$password'");
mysql_close();
if(mysql_num_rows($query)>0){
$result = mysql_fetch_assoc($query);
$_SESSION["login"] = $result["fname"];
$_SESSION["class"] = $result["id_type"];
$_SESSION["id"] = $result["user_id"];
$_SESSION['lname'] = $result['lname'];
$_SESSION['storecode'] = $result['seven_code'];
session_write_close();
echo '<script type="text/javascript">
window.history.back();
</script>';
}
else{
echo '<h3>Username or Password not correct.</h3><br />
<a href="Javascript:window.history.back();">Back to main page.</a>';
}
}
จาก php หน้านี้จะเห็นว่าผมคิวรี่มาใช้จริงๆแค่ 5 อย่างเท่านั้น ซึ่งถ้าอ้างอิงจากภาพที่ผมแปะในโพสแรก $_SESSION['storecode'] มันควรจะมีให้ 5 ค่าด้วยกันครับ ทีนี้ผมอยากให้มันอยู่ในรูปของ array เพื่อง่ายต่อการใช้กับเงื่อนไขน่ะครับ
อันนี้ database ครับ
user // เก็บข้อมูล user
store_code // เก็บข้อมูลร้าน
job_type // เก็บชื่อตำแหน่ง
linework // เป็น table ไว้สรุปหน้าที่งานแต่ละ user โดยดึงข้อมูลจาก 3 ตารางบนมาคิวรี่ตารางนี้
ประวัติการแก้ไข 2014-08-13 15:49:19 2014-08-14 11:39:17
Date :
2014-08-13 15:48:31
By :
nimirue
17.mysql_close();
บันทัดนี้มัน clear ทุกอย่างของ mysql เป็น null หมดครับ เอาไปไว้หลังสุด หรือไม่ต้องใช้ก็ได้ครับ
จบโปรแกรม มันก็ close เองครับ จะใช้ในกรณีที่ ต้องการเคลียน connection
หรือตัองการหน่วยความจำเพิ่ม ในขณะที่ยังทำงานอย่างอื่นต่อครับ
Date :
2014-08-13 16:09:16
By :
Chaidhanan
อ่า...แล้วมันเกี่ยวยังไงเหรอครับ = =a
ที่ผมเก็ตคือพี่จะบอกว่าเพราะบรรทัดนั้นทำให้คิวรี่ที่ทำก่อนนั้นมันเป็น null หมดจนค่าไม่มารึเปล่าครับ?
ถ้าใช่คือ ค่า คิวรี่ก่อนมันมันไม่ได้เป็น null นะครับ มันยังมาเป็นค่าให้ใช้กับ mysql_num_rows($query) อยู่นะครับ ถึงแม้จะปิดด้วย mysql_close(); แล้วก็ตาม
ส่วนเรื่องของ array
หน้าสำหรับใช้เช็คเงื่อนไข ผมทำตามนี้ครับ
$managestore = $_SESSION["storecode"];
foreach ( $managestore as $key=>$value ){
$manage = $managestore[$key];
.
.
.
.
.
.
.
.
.
}
ซึ่งพอทดสอบ submit ดูมันก็แจ้ง error ว่า
Warning: Invalid argument supplied for foreach() in C:\AppServ\www\test\submit.php on line 35
ซึ่งผมเข้าใจว่าตัวแปรที่ใช้ใน foreach มันทำ error เลยลองเช็คค่าตัว $managestore ดู ซึ่งค่าก็มาปกติ ( แต่มาตัวเดียว )
ตอนนี้เลยอยากรู้ว่าทำยังไงให้มันมา 5 ค่า ตามที่ query เรียกมาตั้งแต่แรกน่ะครับ
Date :
2014-08-13 16:31:06
By :
nimirue
ขอโทษครับ ผมสับสน กับ mysql_free_result() ครับ ชัก เบลอ เดี๋ยวต้องหา กาแฟซักแก้วครับ
$ss=array();
19.$result = mysql_fetch_assoc($query);
20.$ss["login"] = $result["fname"];
21.$ss["class"] = $result["id_type"];
22.$ss["id"] = $result["user_id"];
23.$ss['lname'] = $result['lname'];
24.$ss['storecode'] = $result['seven_code'];
$_SESSION['YOURFIELDNAME']=$ss;
หรือ จะเอาทั้งหมดเลย ก็ได้ครับ $_SESSION['YOURFIELDNAME']=$result;
Date :
2014-08-13 16:55:38
By :
Chaidhanan
จากโค้ดที่พี่ให้มา ดูเหมือนว่า มันต้องเปลี่ยนเป็นค่า array หลังจาก query เลยสินะครับ ( คือผมตัองแทรกทันทีตรงหน้า login_check.php )
ตอนนี้กำลังลองทำครับ งงอยู่หน่อยๆ คือ
- $_SESSION['YOURFIELDNAME'] ไอ้นี่คืออะไรเหรอครับ?
- $ss['storecode'] เรียกใช้แบบ array ยังไงครับ? ผมเรียกใช้แบบนี้เอาอ่ะครับ
$test['storecode'][0].$test['storecode'][1].$test['storecode'][2].$test['storecode'][3].$test['storecode'][4]
มันก็ขึ้นนะครับ แต่ไม่ขึ้นเป็นรหัสสาขา 4 อันแรก ( 2119389943684769 ) แต่ขึ้นเป็น 2119 แทน ( มันมาทีละตัวแทนน่ะครับ ) ผมทำผิดตรงไหนรึเปล่าหว่า = =''
อีกจุดที่ผมสังเกตได้ตอนลองทำครับ โค้ดนี้เอาไปใช้ในหน้าอื่นยังไงน่ะครับ ถ้ามันเป็น array แต่แรกแล้ว เพราะผมอยากให้มันเป็น session ก่อน เพื่อที่จะเอาค่าไปใช้กับหน้าไหนก็ได้ ( ค่า session ติดมากับการ login ) เช่น พอล็อกอินแล้วอยากจะบันทึกข้อมูลสักอย่าง ก็เอาค่า session มาทำเป็น arrayในหน้าที่บันทึกเอา ประมาณนี้น่ะครับ
Date :
2014-08-13 17:36:43
By :
nimirue
YOURFIELDNAME ชื่อ field ที่ต้องการครับ
foreach( $_SESSION['YOURFIELDNAME'] as $key=>$value){
echo $key,':', $value, "<br />";
}
หรือจะ print_r($_SESSION['YOURFIELDNAME']); ดูค่าตัวแปรเอาก็ได้ครับ
หรือ จะก็ลอง print_r($_SESSION) ดูเลยก็ได้ครับ
ตัว $_SESSION เป็น Array อยู่แล้วครับ
Date :
2014-08-13 17:43:59
By :
Chaidhanan
ผมลองทำตามดูละครับ แล้วไปเทสกับ foreach มันกลับไม่ทำงาน พอไปอ่านๆดูก็พอเก็ตแล้วว่าค่าที่จะใช้กับ foreach ได้ต้องเป็น array ซึ่งค่าที่ผมทำตามสูตรตอนนี้ ทำยังไงมันก็มาค่าเดียวครับ อีก 4 ค่าไม่มาเลย
ผมเลยลองย้อนๆดูที่ query ดูแล้วมาเอะใจตรงนี้...
if(mysql_num_rows($query)>0){
$result = mysql_fetch_assoc($query);
อันนี้ผมคาดเดาล้วนๆนะครับ คือผมจำได้ว่าถ้าจะให้ query มันแสดงหลายค่า เราต้องทำให้มัน loop จนโชว์ค่าทั้งหมดที่มี
ที่ผมทำตั้งนานแล้วค่ามันมาค่าเดียว เป็นเพราะผมไม่ได้ loop มันแต่แรกรึเปล่าหว่า... = =a
Date :
2014-08-13 18:18:39
By :
nimirue
ผมก็เพิ่งเข้าใจความต้องการ
$login=array();
$class=array();
$id=array();;
$lname=array();
$storecode=array();
while($result = mysql_fetch_assoc($query){
$login[] = $result["fname"];
$class[] = $result["id_type"];
$id[] = $result["user_id"];
$lname[] = $result['lname'];
$storecode[] = $result['seven_code'];
}
$_SESSION['login']=$login;
$_SESSION['class']=$class;
$_SESSION['id']=$id;
$_SESSION['lname']=$lname;
$_SESSION['storecode']=$storecode;
Date :
2014-08-13 19:51:20
By :
Chaidhanan
ลองดูนะครับ จะได้ $_SESSION['storecode'] เป็น Array
Code (PHP)
if(mysql_num_rows($query)>0){
/**********************************/
$storecode = array();
while ($result = mysql_fetch_assoc($query)) {
array_push($storecode, $result['seven_code']);
$fname = $result["fname"];
$id_type = $result["id_type"];
$user_id = $result["user_id"];
$lname = $result['lname'];
}
$_SESSION["login"] = $fname;
$_SESSION["class"] = $id_type;
$_SESSION["id"] = $user_id;
$_SESSION['lname'] = $lname;
$_SESSION['storecode'] = $storecode;
/**********************************/
session_write_close();
echo '<script type="text/javascript">
window.history.back();
</script>';
}
ประวัติการแก้ไข 2014-08-13 21:30:09
Date :
2014-08-13 21:29:41
By :
Krungsri
ลองดู
Code (PHP)
$num=mysql_num_rows($query);
if($num>0){
$i=0;
while ($result=mysql_fetch_array($query)) {
$a1[$i] = $result[fname];
$a2[$i] = $result[id_type];
$a3[$i] = $result[user_id];
$a4[$i] = $result[lname];
$a5[$i] = $result[seven_code];
$i++;
}
$_SESSION['login'] = $a1;
$_SESSION['class'] = $a2;
$_SESSION['id'] = $a3;
$_SESSION['lname'] = $a4;
$_SESSION['storecode'] = $a5;
*ได้ตัวแปรอาเรย์ ==> login[0],login[1],...,login[num]
ประวัติการแก้ไข 2014-08-13 22:26:29 2014-08-13 23:07:10 2014-08-13 23:15:54 2014-08-13 23:19:04 2014-08-14 00:21:42 2014-08-14 00:47:20
Date :
2014-08-13 22:25:45
By :
chai19
ผมว่าตามที่คุณ Krungsri คห.10 เขียนไว้น่าจะได้แล้วน่ะครับ
ส่วน ในตอน foreach ลอง echo ค่า $manage ผมว่ามีกี่ค่ามันก็ออกมาหมดน่ะครับ
Code (PHP)
$managestore = $_SESSION['storecode'];
foreach ($managestore as $key => $value){
$manage = $managestore[$key];
echo $manage;
}
แต่เมื่อคุณนำ $manage; ไปใช้นอก foreach มันก็จะมีค่าเดียวเสมอ ค่าค่าสุดท้ายของ array $_SESSION['storecode'];
ไม่รู้ผมเดาที่คุณนำไปใช้ถูกหรือเปล่าหน่ะ
Date :
2014-08-14 10:05:39
By :
ไวยวิทย์
แก้ไขภาพรูปให้ถูกกฏด้วยน่ะครับ
Date :
2014-08-14 11:11:39
By :
mr.win
ลองดู
}Code (PHP)
$result_array = array_search('$code', $manage);
if($result_array!=FALSE){
echo "ok";
}
else
{
print '<script type="text/javascript">
alert(\'รหัสสาขาไม่ใช่สาขาที่ท่านรับผิดชอบ\');
window.history.back();
</script>';
}
Date :
2014-08-14 16:29:12
By :
chai19
Load balance : Server 00