|
|
|
สอบถามวีธีรวมคำสั่ง IF else ที่เหมือนกันแตกต่างตรงค่าที่ดึงมาจากดาต้าเบสให้เหลือเพียงชุดเดียวจะต้องเขียนอย่างไรครับ |
|
|
|
|
|
|
|
จากชุดคำสั่ง if else ข้างล่างนั้นจะเหมือนๆกันแตกต่างเพียงค่าที่ดึงมาจากดาต้าเบส(Ms SQL) มีวิธีแปลงอย่างไรให้เป็นแบบฟังก์ชั่นคำนวนระยะเวลาที่เพียงแทนค่าตัวแปลใว้หลัง duration(..... , .....) ก็สามารถคำนวนแล้วแสดงผลออกมาได้เลยนะครับ
Code (PHP)
<?php
if ($objResult["DOB"]=="") { $DOB ="";} else{ $DOB = date('d M Y',strtotime($objResult["DOB"])) ;}
if ($objResult["PassportIssue"]=="") { $PassportIssue ="";} else{ $PassportIssue = date('d M Y',strtotime($objResult["PassportIssue"])) ;}
if ($objResult["PassportExpire"]=="") { $PassportExpire ="";} else{ $PassportExpire = date('d M Y',strtotime($objResult["PassportExpire"])) ;}
if ($objResult["WPIssue"]=="") { $WPIssue ="";} else{ $WPIssue = date('d M Y',strtotime($objResult["WPIssue"])) ;}
if ($objResult["WPExpire"]=="") { $WPExpire ="";} else{ $WPExpire = date('d M Y',strtotime($objResult["WPExpire"])) ;}
if ($objResult["VISAIssue"]=="") { $VISAIssue ="";} else{ $VISAIssue = date('d M Y',strtotime($objResult["VISAIssue"])) ;}
if ($objResult["VISAExpire"]=="") { $VISAExpire ="";} else{ $VISAExpire = date('d M Y',strtotime($objResult["VISAExpire"])) ;}
echo $DOB;
echo $PassportIssue;
echo $.....;
?>
Code (PHP)
function duration($begin,$end){
$remain=intval(strtotime($end)-strtotime($begin));
$wan=floor($remain/86400);
$l_wan=$remain%86400;
$hour=floor($l_wan/3600);
$l_hour=$l_wan%3600;
$minute=floor($l_hour/60);
$second=$l_hour%60;
return " ".$wan." วัน ".$hour." ชั่วโมง ".$minute." นาที ".$second." วินาที";
}
echo '<td>'.duration($time,$today).'</td>';
$Latest_day = "2020-06-18 12:00:00";
echo '<p>Latest compile : '.$Latest_image.' @'.duration($Latest_day,$today).'</p>';
Tag : PHP, Ms SQL Server 2012
|
|
|
|
|
|
Date :
2020-12-23 19:08:39 |
By :
1621894507854149 |
View :
717 |
Reply :
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. แบบฟังก์ชัน (ที่คุณต้องการ)
asgres("DOB");
asgres("PassportIssue");
asgres("PassportExpire");
asgres("WPIssue");
asgres("WPExpire");
asgres("VISAIssue");
asgres("VISAExpire");
function asgres($k) {
if ($objResult[$k] == "") {
$$k = "";
} else {
$$k = date('d M Y',strtotime($objResult[$k]));
}
}
หรือ
2. แบบวนซ้ำ (วิธีธรรมชาติ)
foreach ($objResult as $k => $v) {
$$k = empty($v) ? "" : date('d M Y',strtotime($objResult[$k]));
}
|
|
|
|
|
Date :
2020-12-23 20:14:46 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แบบที่1.นำไปใช้แล้วว่างไม่แสดงผลอะไรครับ
ผมทดลองสั่งเพียงแค่
Code (PHP)
if($_GET["txtPassportNo"] != "")
{
$strSQL2 = "SELECT * FROM tblEmployee WHERE PassportNo LIKE '%".$_GET["txtPassportNo"]."%' ORDER BY [PassportNo] ";
$objQuery = mssql_query($strSQL2) or die ("Error Query [".$strSQL2."]");
while($objResult = mssql_fetch_array($objQuery))
{
function asgres($k) {
$$k = $objResult["DOB"];
return $$k;
}
echo asgres("DOB");
//echo asgres("VISAExpire") ;
หรือก็คือไม่สนว่าใน asgres(...)จะมีค่าอะไรให้มันดึง $objResult["DOB"] ออกมาแสดงผลเลยก็ยังว่างเปล่าครับ
ปล.$objResult["....."] คือข้อมูลที่ดึงจาก Ms SQL ที่กรองหมายเลข PassportNo มาก่อนแล้ว
|
|
|
|
|
Date :
2020-12-24 12:45:08 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมทำแบบก็อปวางให้แล้วไม่ต้องดัดแปลง เวลาแสดง
Code (PHP)
echo $DOB;
echo $PassportIssue;
ไม่ใช่
Code (PHP)
echo asgres("DOB");
echo asgres("...");
|
|
|
|
|
Date :
2020-12-24 13:12:11 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อีกอย่างคุณลืมเรียกฟังก์ชัน
Code (PHP)
asgres("DOB");
asgres("ชื่อฟิลด์");
asgres("...");
ถ้าอยาก echo ได้เลยต้อง return ค่าจากฟังก์ชันด้วย
|
|
|
|
|
Date :
2020-12-24 13:15:05 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็อปวาง error ตั้งแต่ asgres("DOB"); ................................... เลยครับ
|
|
|
|
|
Date :
2020-12-24 13:25:48 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
error ว่าอะไร undefined function หรือ ถ้าใช่ก็สลับนิยามฟังก์ชันก่อน แล้วค่อยเรียก
|
|
|
|
|
Date :
2020-12-24 13:30:32 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันหา $objResult ไม่เจอหรือเปล่า นิยามอยู่ตรงนี้แล้วเอาออกไปไหน ขอดูแบบสมบูรณ์หน่อย
Code (PHP)
while($objResult = mssql_fetch_array($objQuery)) // นี่คือนิยามของ $objResult
//ลองวางใน scope ดู
|
|
|
|
|
Date :
2020-12-24 13:50:20 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช่่ครับ เหมือนว่าตัว $objResult จะไม่ยอมดึงค่ามาใส่ใน function นะครับนี่
โค้ดทั้งหน้าครับ
Code (PHP)
<!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=TIS-620" />
<title>MOU2</title>
</head>
<?php
$objConnect = mssql_connect("localhost","MOU2","MOU2") or die("Error Connect to Database");
$objDB = mssql_select_db("MOU2");
echo '
<link href="css/responsive.css?fin20" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/css/index2.css?fin20" />
<meta name="viewport" content="width=device-width, initial-scale=1">';
?>
<body>
<form action="<?=$_SERVER['SCRIPT_NAME'];?>" method="get" name="form1">
<table width="80%" border="1" align="center">
<tr style="background-color: darkseagreen;">
<th height="40">หมายเลข Passport :
<select name="txtPassportNo" type="text" id="txtPassportNo" value="<?=$_GET["txtPassportNo"];?>">
<option value=""><-- Select Passport --></option>
<?
$strSQL = "SELECT * FROM tblEmployee ORDER BY PassportNo ASC";
$objQuery = mssql_query($strSQL);
while($objResuut = mssql_fetch_array($objQuery))
{
?>
<option value="<?php echo $objResuut["PassportNo"];?>"><?php echo $objResuut["PassportNo"];?></option>
<?
}
?>
</select>
<input name="btnSubmit" type="submit" value="Submit">
</th>
</tr>
</table>
</form>
<br/>
<?php
if($_GET["txtPassportNo"] != "")
{
$strSQL2 = "SELECT * FROM tblEmployee WHERE PassportNo LIKE '%".$_GET["txtPassportNo"]."%' ORDER BY [PassportNo] ";
$objQuery = mssql_query($strSQL2) or die ("Error Query [".$strSQL2."]");
while($objResult = mssql_fetch_array($objQuery))
{
function asgres($k) {
if ($objResult[$k] == "") {
$$k = "";
} else {
$$k = date('d M Y',strtotime($objResult[$k]));
}
}
asgres("DOB");
asgres("PassportIssue");
asgres("PassportExpire");
asgres("WPIssue");
asgres("WPExpire");
asgres("VISAIssue");
asgres("VISAExpire");
echo $DOB;
echo $PassportIssue;
}
}
?>
<br />
<?php
mssql_close($objConnect);
?>
<script src="js/bootstrap.js"></script>
</body>
</html>
|
|
|
|
|
Date :
2020-12-24 13:55:50 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หรือเป็นเพราะรันบน PHP 5.2.17 ครับนี่ (ขอแนวทางเปลี่ยนเป็น PHP 7.+ ด้วยครับผม)
|
|
|
|
|
Date :
2020-12-24 14:02:54 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองแบบผสมโรง
Code (PHP)
<!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=TIS-620" />
<title>MOU2</title>
</head>
<?php
$objConnect = mssql_connect("localhost","MOU2","MOU2") or die("Error Connect to Database");
$objDB = mssql_select_db("MOU2");
echo '
<link href="css/responsive.css?fin20" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/css/index2.css?fin20" />
<meta name="viewport" content="width=device-width, initial-scale=1">';
?>
<body>
<form action="<?=$_SERVER['SCRIPT_NAME'];?>" method="get" name="form1">
<table width="80%" border="1" align="center">
<tr style="background-color: darkseagreen;">
<th height="40">หมายเลข Passport :
<select name="txtPassportNo" type="text" id="txtPassportNo" value="<?=$_GET["txtPassportNo"];?>">
<option value=""><-- Select Passport --></option>
<?
$strSQL = "SELECT * FROM tblEmployee ORDER BY PassportNo ASC";
$objQuery = mssql_query($strSQL);
while($objResuut = mssql_fetch_array($objQuery))
{
?>
<option value="<?php echo $objResuut["PassportNo"];?>"><?php echo $objResuut["PassportNo"];?></option>
<?
}
?>
</select>
<input name="btnSubmit" type="submit" value="Submit">
</th>
</tr>
</table>
</form>
<br/>
<?php
function asgres($obj) {
foreach ($obj as $k => $v) {
$$k = empty($v) ? "" : date('d M Y',strtotime($obj[$k]));
}
}
if($_GET["txtPassportNo"] != "") {
$strSQL2 = "SELECT * FROM tblEmployee WHERE PassportNo LIKE '%".$_GET["txtPassportNo"]."%' ORDER BY [PassportNo] ";
$objQuery = mssql_query($strSQL2) or die ("Error Query [".$strSQL2."]");
while($objResult = mssql_fetch_array($objQuery))
{
asgres($objResult);
echo $DOB;
echo $PassportIssue;
}
}
?>
<br />
<?php
mssql_close($objConnect);
?>
<script src="js/bootstrap.js"></script>
</body>
</html>
|
|
|
|
|
Date :
2020-12-24 14:24:38 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รายงานผล หน้าเว็บขาวสะอาดครับ แต่ในคำส่ง [font=Verdana]while($objResult = mssql_fetch_array($objQuery))[/font] สั่งเรียกตัวอื่นออกมาก็แสดงถูกต้องนะ
Code (PHP)
while($objResult = mssql_fetch_array($objQuery))
{
asgres($objResult);
echo $DOB;
echo $PassportIssue;
//แสดงผล
echo $objResult["DOB"];
echo $objResult["PassportNo"];
echo $objResult["อื่นๆ"];
?>
|
|
|
|
|
Date :
2020-12-24 14:53:58 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองเช็คในฟังก์ชันหน่อย
Code (PHP)
function asgres($obj) {
print_r($obj);
foreach ($obj as $k => $v) {
//$$k = empty($v) ? "" : date('d M Y',strtotime($obj[$k]));
echo "1. " . $v . "<br>";
echo "2. " . $obj[$k] . "<br>";
}
}
ได้อะไรครับ
|
|
|
|
|
Date :
2020-12-24 15:09:41 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
//...
function asgres($obj)
{
foreach ($obj as $k => $v) {
if (!is_numeric($k[0])) {
$$k = empty($v) ? "" : date('d M Y', strtotime($v));
}
}
}
if ($_GET["txtPassportNo"] != "") {
$strSQL2 =
"SELECT col1,col2,col3 FROM tblEmployee WHERE PassportNo LIKE '%" .
$_GET["txtPassportNo"] .
"%' ORDER BY [PassportNo] ";
($objQuery = mssql_query($strSQL2)) or
die("Error Query [" . $strSQL2 . "]");
while ($objResult = mssql_fetch_array($objQuery)) {
asgres($objResult);
echo $DOB;
echo $PassportIssue;
}
}
//...
|
|
|
|
|
Date :
2020-12-24 15:49:27 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่มีตัวแปลเป็นตัวเลขนะครับ จะมีก็แต่ค่าในตัวแปร
Code (PHP)
<?php
function asgres($obj) {
print_r($obj);
foreach ($obj as $k => $v) {
$$k = empty($v) ? "" : date('d M Y',strtotime($obj[$k]));
echo "1. " . $v . "<br>";
echo "2. " . $obj[$k] . "<br>";
}
}
if($_GET["txtPassportNo"] != "") {
$strSQL2 = "SELECT PassportNo,DOB,PassportIssue,PassportExpire,VISAIssue,VISAExpire FROM tblEmployee WHERE PassportNo LIKE '%".$_GET["txtPassportNo"]."%' ";
$objQuery = mssql_query($strSQL2) or die ("Error Query [".$strSQL2."]");
while($objResult = mssql_fetch_array($objQuery))
{
asgres($objResult);
//ไม่แสดง
echo $DOB;
echo $PassportIssue;
//แสดงผล
echo $objResult["DOB"].'<br>' ;
echo $objResult["PassportNo"];
?>
|
|
|
|
|
Date :
2020-12-24 15:54:16 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หรือเปลี่ยนไปใช้ fetch_assoc แทน
Code (PHP)
//...
function asgres($obj)
{
foreach ($obj as $k => $v) {
$$k = empty($v) ? "" : date('d M Y', strtotime($v));
}
}
if ($_GET["txtPassportNo"] != "") {
$strSQL2 =
"SELECT * FROM tblEmployee WHERE PassportNo LIKE '%" .
$_GET["txtPassportNo"] .
"%' ORDER BY [PassportNo] ";
($objQuery = mssql_query($strSQL2)) or
die("Error Query [" . $strSQL2 . "]");
while ($objResult = mssql_fetch_assoc($objQuery)) {
asgres($objResult);
echo $DOB;
echo $PassportIssue;
}
}
//...
|
|
|
|
|
Date :
2020-12-24 15:59:12 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
No.16 fetch_array หรือ No.18 fetch_assoc ผลเหมือนกัันครับคือไม่แสดง
|
|
|
|
|
Date :
2020-12-24 16:13:43 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมเอา No.18 ไม่วางแทนที่ใน No.11 ตรวจสอบและทดลองรัน
1.รันทดสอบเลย
2.เอาวงเล็บ ($objQuery = mssql_query($strSQL2)) ออกเป็นด้านล่างผลคือหน้าขาวนะครับ --*--
Code (PHP)
<!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=TIS-620" />
<title>MOU2</title>
</head>
<?php
$objConnect = mssql_connect("localhost","MOU2","MOU2") or die("Error Connect to Database");
$objDB = mssql_select_db("MOU2");
echo '
<link href="css/responsive.css?fin20" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/css/index2.css?fin20" />
<meta name="viewport" content="width=device-width, initial-scale=1">';
?>
<body>
<form action="<?=$_SERVER['SCRIPT_NAME'];?>" method="get" name="form1">
<table width="80%" border="1" align="center">
<tr style="background-color: darkseagreen;">
<th height="40">หมายเลข Passport :
<select name="txtPassportNo" type="text" id="txtPassportNo" value="<?=$_GET["txtPassportNo"];?>">
<option value=""><-- Select Passport --></option>
<?
$strSQL = "SELECT * FROM tblEmployee ORDER BY PassportNo ASC";
$objQuery = mssql_query($strSQL);
while($objResuut = mssql_fetch_array($objQuery))
{
?>
<option value="<?php echo $objResuut["PassportNo"];?>"><?php echo $objResuut["PassportNo"];?></option>
<?
}
?>
</select>
<input name="btnSubmit" type="submit" value="Submit">
</th>
</tr>
</table>
</form>
<br/>
<?php
function asgres($obj)
{
foreach ($obj as $k => $v) {
$$k = empty($v) ? "" : date('d M Y', strtotime($v));
}
}
if ($_GET["txtPassportNo"] != "") {
$strSQL2 = "SELECT * FROM tblEmployee WHERE PassportNo LIKE '%" .$_GET["txtPassportNo"] ."%' ";
($objQuery = mssql_query($strSQL2)) or die("Error Query [" . $strSQL2 . "]");
while ($objResult = mssql_fetch_assoc($objQuery)) {
asgres($objResult);
echo $DOB;
echo $PassportIssue;
}
}
mssql_close($objConnect);
?>
<script src="js/bootstrap.js"></script>
</body>
</html>
ปล.ที่ $strSQL2 ผมเอา ORDER BY [PassportNo] ออก
|
|
|
|
|
Date :
2020-12-24 16:34:11 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สุดท้ายที่ต้องเช็คก็ Variable scope
Code (PHP)
function asgres($obj) {
foreach ($obj as $k => $v) {
global $$k; // เพิ่มบรรทัดนี้
$$k = empty($v) ? "" : date('d M Y', strtotime($v));
}
}
ถ้ายังไม่ได้อีกก็...
|
|
|
|
|
Date :
2020-12-24 16:52:11 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
function asgres($obj) {
foreach ($obj as $k => $v) {
global $$k; // เพิ่มบรรทัดนี้
$$k = empty($v) ? "" : date('d M Y', strtotime($v));
}
}
ว่าแต่คำสั่ง foreach นั่นมันจะทำและมีผลกับดาต้าทุกตัวที่ดึงมาเลยใช่ใหมครับนี่ แล้วงี้อย่างตัวแปล [Prefix] ซึ่งเป็นคำนำหน้า Mr. Ms. Mrs. ผมจะเอาไปทำ if else หรือ Select case ให้เป็น นาย นาง นางสาว ยังไงครับนี่
|
|
|
|
|
Date :
2020-12-24 17:24:07 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สิ่งสำคัญต้องศึกษาเรื่อง ไวยกรณ์ ตัวแปร นอก/ใน ฟังก์ชั่นให้เข้าใจให้มากๆ
จะได้ประยุกต์ตัวอย่างต่างๆ ได้
|
|
|
|
|
Date :
2020-12-24 17:28:59 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รายงานแก้ใหม่โดย
> ใช้ If else ตาม No.1
> ใช้ return ค่าจากฟังก์ชันจึงไม่มีการประกาศตาม No.4
> ถอด $objResult2 ออกจากในชุดคำสั่ง If else แต่เป็นเป็นส่งเข้ามาตามข้อต่อไป
> ใช้คำสั่ง echo asgres($objResult2["DOB"]) ในการเรียกฟังก์ชั่นและแสดงผลเฉพาะตัวแปลที่ต้องการเป็นตัวๆไป
Code (PHP)
if ($_GET["txtPassportNo"] != "") {
$strSQL2 = "SELECT * FROM tblEmployee WHERE PassportNo LIKE '%" .$_GET["txtPassportNo"] ."%' ";
($objQuery2 = mssql_query($strSQL2)) or die("Error Query [" . $strSQL2 . "]");
while ($objResult2 = mssql_fetch_assoc($objQuery2)) {
// asgres($objResult2);
function asgres($k) {
if ($k == "") {
$tk = "";
} else {
$tk = date('d M Y',strtotime($k));
}
return $tk;
}
echo asgres($objResult2["DOB"]) .'<br>';
echo asgres($objResult2["PassportIssue"]) .'<br>';
echo asgres($objResult2["PassportExpire"]) .'<br>';
?>
ทีนี้ผมก็สามารถที่จะเอาตัวแปลอื่นไปทำอย่างอื่่นได้เลยล่ะครับ ^-^
|
ประวัติการแก้ไข 2020-12-24 18:22:14 2020-12-24 18:49:27
|
|
|
|
Date :
2020-12-24 18:19:35 |
By :
1621894507854149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จริง... ผมดูละครน้ำเน่าไปด้วยเลยลืมคิดเรื่องนี้ไป ...ดีงาม
|
|
|
|
|
Date :
2020-12-24 18:55:45 |
By :
ล่องหน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|