|
|
|
รบกวนสอบถามพี่ ๆ ว่าจะทำการ update ใบเสนอราคาเมื่อลูกค้าชำระเงินแล้วให้สามารถกดแล้วหักออกจากสต็อกได้เลยค่ะ |
|
|
|
|
|
|
|
ตั้งแต่ 082 ลงมา
update tb_quotationstock
คุณไม่ได้ใส่เงื่อนไขอะไรเลย มันก็อัพเดททั้งหมดน่ะสิ
จะให้มันอัพเดทเฉพาะอะไรก็ใส่เงื่อนไขลงไป
|
|
|
|
|
Date :
2021-07-06 18:44:45 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณ mr.v มากค่ะ ที่ชี้ทางให้เดินต่อ แม้ว่าจะยากจะพยายามค่ะ
|
|
|
|
|
Date :
2021-07-06 20:45:16 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ดูโค้ดตั้งแต่เปิด <form> ไปจนถึงปิด </form> ผมยังไม่เห็นการส่งตัวระบุค่าตรงไหนว่าจะต้องอัพเดท identity ไหนนะครับ
ตรงนี้ก็ต้องดูด้วย
สมมุติในตารางมีคอลัมน์ที่ชื่อ qstock_id เป็นตัวระบุ id ก็เอาอันนี้แนบลงไปใน <form>...</form> ด้วย
แล้วตอนรับก็รับค่านี้ไปใส่ในคำสั่ง UPDATE WHERE qstock_id = ไอดีที่เราระบุ ให้มันอัพเดทเฉพาะเจาะจงลงไป
ตรงนี้คิดว่าคงทำได้มั้ง ทำมาถึงขนาดนี้แล้ว มันแค่พลาดขาดตรงนั้นนิดตรงนี้หน่อย ไม่น่าเกินความสามารถ
|
|
|
|
|
Date :
2021-07-06 21:16:38 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คำแนะนำมีกำลังใจมากเลยค่ะ ทำให้รู้ว่าต้องเดินอย่างไร ไปทางไหน สุดยอดค่ะ
|
|
|
|
|
Date :
2021-07-06 21:53:39 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หากใช้การ update จาก เลขที่ใบเสนอราคา quotation_no ซึ่งใน 1 ใบมีสินค้าหลายรายการ ยังคิดไม่ออกค่ะ
|
|
|
|
|
Date :
2021-07-07 16:13:53 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จากหน้าที่แสดงเลขที่ ที่มี 2 รายการ คลิกตรงเลขที่แล้วแสดงสินค้าถูกต้องมั้ย?
มีรายการอื่นมาปนหรือยังไง?
ที่ว่ามีแค่ 2 รายการแต่มันจะต้องมีกี่รายการ?
อ่านแล้วงงๆ อธิบายตามลำดับโดยละเอียดหน่อยครับ
แล้วในหน้าที่คลิกไปแล้วจากเลขที่ ไปหน้าแสดงรายการสินค้า โค้ดล่าสุดเอามาลงด้วย
ไล่จากตรงนี้ก่อน คือหน้าแสดงรายการเลขที่ คลิกแล้วแสดงรายการสินค้า ตรงนี้แหละถ้ามันแสดงออกมาถูกก็จะพอไปต่อได้เพราะมันจะต้องนับเอาจากจำนวนสินค้าตรงนี้ไปหักตัดสต็อก
|
|
|
|
|
Date :
2021-07-07 21:15:43 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อธิบายเป็นภาพให้ค่ะ
|
|
|
|
|
Date :
2021-07-08 09:20:24 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
show_quotation.php หน้า show รายการแบบ SELECT DISTINCT ค่ะ
Code (PHP)
<?php include('header.php'); ?>
</style>
<!-- เนื้อหา -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<br/>
<section class="content-header">
<h1>
Show quotation
</h1>
</section>
<!-- Main content -->
<section class="content">
<div class="CSSTableGenerator" >
<table >
<tr>
<td>ลำดับ</td>
<td>เลขที่</td>
<td>ชื่อลูกค้า</td>
<td>ผู้จัดทำ</td>
<td>สถานะ</td>
<td>วันที่เสนอราคา</td>
</tr>
<?php
$sql="
SELECT DISTINCT
tb_quotationstock.quotation_no AS qr_no,
Sum(tb_quotationstock.quotation_total) AS total,
tb_member.member_fname,
tb_member.member_tel,
tb_employee.employee_name,
tb_quotationstock.quotation_status,
Max(tb_quotationstock.quotation_date) AS qr_date
FROM
tb_quotationstock
INNER JOIN tb_member ON tb_quotationstock.member_id = tb_member.member_id
INNER JOIN tb_employee ON tb_quotationstock.employee_id = tb_employee.employee_id
GROUP BY
tb_quotationstock.quotation_no,
tb_member.member_fname,
tb_member.member_tel,
tb_employee.employee_name,
tb_quotationstock.quotation_status
order by qr_date desc
";
if(isset($_POST['search']))
{
$txt_search=$_POST['txt_search'];
$sql.=" where";
$sql.=" tb_quotationstock.quotation_no like '%".$txt_search."%'";
}
$result=$cls_con->select_base($sql);
$i=1;
while($row =mysqli_fetch_array($result))
{
?>
<tr>
<td><?=$i++;?></td>
<td><?=$row['qr_no'];?></td>
<td><?=$row['member_fname'];?></td>
<td><?=$row['employee_name'];?></td>
<td><?=$row['quotation_status'];?></td>
<td><?=$row['qr_date'];?></td>
</tr>
<?php } ?>
</table>
</div>
</section><!-- /.content -->
</div>
<!-- เนื้อหา -->
<?php include('footer.php'); ?>
|
|
|
|
|
Date :
2021-07-08 09:37:39 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมไม่เห็นลิ้งค์ <a> จากไฟล์ show_quotation.php เลย ไม่รู้ว่าดักคลิกลิ้งค์ยังไง
สมมุติว่าเมื่อลิ้งค์ไปยังหน้า quotation_stock.php ตัวที่ระบุหมายเลขคือ ?qr_no=xxxx
เวลารับค่ามาแสดงในหน้า quotation_stock ก็จะรับด้วย $_GET['qr_no'] ซึ่งเอามาแสดงรายการสินค้า ตรงนี้ผมก็ไม่เห็นสักที่เลย ที่ระบุเงื่อนไขไว้ว่าเอารหัสนี้เท่านั้นมาแสดงสินค้า เลยไม่รู้ว่ามันแสดงออกมาได้ยังไงไม่ปนกันมั่ว
เหมือนกับคุณกั๊กโค้ดเอาไว้ เพราะจากโค้ดที่แปะมันไม่มีตั้งแต่ลิ้งค์ไปหน้า quotation_stock และในหน้า quotation_stock ก็ไม่มีโค้ดที่ระบุเงื่อนไขว่าจะต้องใช้รหัสนี้ๆๆ
ก็ถ้าสมมุติจากตามที่ผมบอก ใน <form>ก็เพิ่ม ?qr_no=<?php echo $_GET['qr_no'];?> เข้าไปใน attribute action ซึ่งก็ไม่มีอีกเหมือนกัน
ตัวอย่าง <form method="post" action="?qr_no=<?php echo $_GET['qr_no'];?>">...</form>
แล้วในหน้าที่รับค่า post ก็เอา $_GET['qr_no'] มาใส่ใน where ในคำสั่ง mysql update
คือรับค่ารหัสมาเป็นทอดๆแล้วส่งต่อๆไปให้มันระบุตัวตนแยกออกจากรหัสอื่นๆ
|
|
|
|
|
Date :
2021-07-08 09:54:00 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอโทษค่ะ ไฟล์ show_quotation.php ยังไม่มีการทำลิงค์ค่ะ เนื่องจาก focus ไปที่หน้าตัดสต็อก จากคำแนะนำจะทำตามขั้นตอน mr.v ค่ะ
|
|
|
|
|
Date :
2021-07-08 10:03:46 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำแล้วได้ผลยังไงเอาโค้ดมาแปะพร้อมอธิบายด้วยเน่อ
|
|
|
|
|
Date :
2021-07-08 17:02:11 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยังไม่ได้ค่ะ แต่ได้ทดสอบใส่ค่าตรงๆ ดูได้ค่ะ
ไฟล์ส่ง Code (PHP)
<?php include('header.php'); ?>
</style>
<!-- เนื้อหา -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<br/>
<section class="content-header">
<h1>
Show quotation
</h1>
</section>
<!-- Main content -->
<section class="content">
<div class="CSSTableGenerator" >
<table >
<tr>
<td>ลำดับ</td>
<td>เลขที่</td>
<td>ชื่อลูกค้า</td>
<td>ผู้จัดทำ</td>
<td>สถานะ</td>
<td>วันที่เสนอราคา</td>
</tr>
<?php
$sql="
SELECT DISTINCT
tb_quotationstock.quotation_no AS qr_no,
Sum(tb_quotationstock.quotation_total) AS total,
tb_member.member_fname,
tb_member.member_tel,
tb_employee.employee_name,
tb_quotationstock.quotation_status,
Max(tb_quotationstock.quotation_date) AS qr_date
FROM
tb_quotationstock
INNER JOIN tb_member ON tb_quotationstock.member_id = tb_member.member_id
INNER JOIN tb_employee ON tb_quotationstock.employee_id = tb_employee.employee_id
GROUP BY
tb_quotationstock.quotation_no,
tb_member.member_fname,
tb_member.member_tel,
tb_employee.employee_name,
tb_quotationstock.quotation_status
order by qr_date desc
";
if(isset($_POST['search']))
{
$txt_search=$_POST['txt_search'];
$sql.=" where";
$sql.=" tb_quotationstock.quotation_no like '%".$txt_search."%'";
}
$result=$cls_con->select_base($sql);
$i=1;
while($row =mysqli_fetch_array($result))
{
?>
<tr>
<td><?=$i++;?></td>
<td><?=$row['qr_no'];?></td>
<td><?=$row['member_fname'];?></td>
<td><?=$row['employee_name'];?></td>
<td><?=$row['quotation_status'];?></td>
<td><?=$row['qr_date'];?></td>
<td><a href="quotation_stock.php?id=<?=$row['qr_no'];?>"target="_blank"><img src="../images/minus25.png" /></a></td>
</tr>
<?php } ?>
</table>
</div>
</section><!-- /.content -->
</div>
<!-- เนื้อหา -->
<?php include('footer.php'); ?>
ไฟล์รับค่ะ
Code (PHP)
<?php include('header.php'); ?>
<div class="content-wrapper">
<section class="content-header">
<h1>
Cut off stock from quotations
</h1>
</section>
<section class="content">
<br/>
<?php
$id=$_GET['id'];
$sqlg=" select * from quotation_vwstock";
$sqlg.=" where quotation_no='Wan-1245'";
//$sqlg.=" where quotation_status='เสนอราคาเรียบร้อย'";
$numg=$cls_con->select_numrows($sqlg);
if($numg>=1)
{
?>
<form method="post">
<div class="CSSTableGenerator" >
<table >
<tr>
<td>ลำดับ</td>
<td>หมายเลข</td>
<td>รหัสสินค้า</td>
<td>ชื่อสินค้า</td>
<td>ลูกค้า</td>
<td>รูปสินค้า</td>
<td>ราคา</td>
<td>จำนวนตัดสต็อก</td>
<td>หน่วย</td>
<td>ชื่อพนักงาน</td>
<td>สถานะ</td>
<td>วันที่</td>
</tr>
<?php
$result=$cls_con->select_base($sqlg);
while($row =mysqli_fetch_array($result))
{
?>
<tr>
<td><?=$row['quotation_id'];?></td>
<td><?=$row['quotation_no'];?></td>
<td><?=$row['pro_no'];?></td>
<td><?=$row['pro_name'];?></td>
<td><?=$row['member_fname'];?></td>
<td><img src="../upload/<?=$row['pro_pic1'];?>" width="100"></td>
<td><?=$row['quotation_total'];?></td>
<td><?=$row['quotation_qty'];?></td>
<td><?=$row['quotation_unit'];?></td>
<td><?=$row['employee_name'];?></td>
<td><?=$row['quotation_status'];?></td>
<td><?=$row['quotation_date'];?></td>
</tr>
<?php } ?>
</table>
</div>
<hr/>
<center>
<button type="submit" name="confirm" class="btn btn-info">ตัดสต็อก</button>
<br/>
<br/>
</center>
</form>
<?php
}
?>
<?php
if(isset($_POST['confirm']))
{
$sqlc=" select * from tb_quotationstock";
$sqlc.=" where";
$sqlc.=" quotation_status='เสนอราคาเรียบร้อย'";
$resultc=$cls_con->select_base($sqlc);
while($rowc=mysqli_fetch_array($resultc))
{
$pro_idc=$rowc['pro_id'];
$quotation_qty=$rowc['quotation_qty'];
$remain=find_remainqty($pro_idc);
$new_quotation=$remain-$quotation_qty;
update_qty($pro_idc,$new_quotation);
}
$sqli=" update tb_quotationstock";
$sqli.=" set";
$sqli.=" quotation_status='ยืนยันการตัดสต็อก'";
$sqli.=" where";
$sqli.=" quotation_status='เสนอราคาเรียบร้อย'";
if($cls_con->write_base($sqli)==true){
echo $cls_con->show_message('ยืนยันการตัดสต็อกสำเร็จ');
echo $cls_con->goto_page(1,'show_takecm.php');
}
else{
echo $cls_con->show_message('ยืนยันการตัดสต็อกไม่สำเร็จ');
}
}
?>
</section>
</div>
<?php
function find_remainqty($pro_id)
{
$cls_con=new class_conn;
$sql=" select * from tb_product";
$sql.=" where";
$sql.=" pro_id='$pro_id'";
$result=$cls_con->select_base($sql);
while($row=mysqli_fetch_array($result))
{
$pro_qty=$row['pro_qty'];
}
return $pro_qty;
}
function update_qty($pro_id,$new_qty)
{
$cls_con=new class_conn;
$sql=" update tb_product";
$sql.=" set";
$sql.=" pro_qty='$new_qty'";
$sql.=" where";
$sql.=" pro_id='$pro_id'";
$cls_con->write_base($sql);
echo $sql;
}
?>
|
ประวัติการแก้ไข 2021-07-09 15:37:01 2021-07-09 15:38:42
|
|
|
|
Date :
2021-07-09 15:35:40 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สร้างตัวแปรรับค่าแล้วเอาไปใช้แทน
Code (PHP)
$id=$_GET['id'];
$qr_no = $_GET['qr_no'];
$sqlg=" select * from quotation_vwstock";
$sqlg.=" where quotation_no='$qr_no' ";
หรือ
$sqlg.=" where quotation_no='".$_GET['qr_no']."'";
|
|
|
|
|
Date :
2021-07-09 17:11:46 |
By :
ผ่านมา |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้แล้วค่ะ ขอบคุณมากนะค่ะ
Code (PHP)
ไฟล์รับค่ะ
<?php
$id=$_GET['id'];
$sqlg=" select * from quotation_vwstock";
$sqlg.=" where quotation_no='".$_GET['id']."'";
$numg=$cls_con->select_numrows($sqlg);
if($numg>=1)
{
?>
|
ประวัติการแก้ไข 2021-07-09 17:51:34
|
|
|
|
Date :
2021-07-09 17:49:44 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช่แล้ว ส่งค่าไปเป็น ?id=xxx ก็ต้องรับด้วย $_GET['id'] ไม่ใช่ $_GET['qr_no']
แล้วเมื่อเอาเงื่อนไขมาแสดงได้แล้วก็ใช้ในการอัพเดทก็ไม่ยากอีกแล้ว ดีใจด้วย
|
|
|
|
|
Date :
2021-07-09 17:52:40 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณทั้ง 2 คน คุณ mr.v และคุณที่ใช้ภาษารัสเซีย ที่ช่วยให้งานทำต่อไปได้ ขั้นต่อไปคือการ update เฉพาะที่ได้รับค่ามาค่ะ
|
|
|
|
|
Date :
2021-07-09 18:01:57 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Project การตัดสต็อกจากใบเสนอราคา (ใบที่ชำระเงินแล้ว) เสร็จสมบูรณ์ ขอบคุณอีกครั้งสำหรับการแนะนำของพี่ ๆ
ส่วนการ update ที่เพิ่ม code เข้าไป คือส่วนที่ทำบรรทัดเยื้องไว้ค่ะ
Code (PHP)
<?php
if(isset($_POST['confirm']))
{
$sqlc=" select * from tb_quotationstock";
$sqlc.=" where";
$sqlc.=" quotation_status='เสนอราคาเรียบร้อย'";
$sqlc.=" and";
$sqlc.=" quotation_no='".$_GET['id']."'";
$resultc=$cls_con->select_base($sqlc);
while($rowc=mysqli_fetch_array($resultc))
{
$pro_idc=$rowc['pro_id'];
$quotation_qty=$rowc['quotation_qty'];
$remain=find_remainqty($pro_idc);
$new_quotation=$remain-$quotation_qty;
update_qty($pro_idc,$new_quotation);
}
$sqli=" update tb_quotationstock";
$sqli.=" set";
$sqli.=" quotation_status='ยืนยันการตัดสต็อก'";
$sqli.=" where";
$sqli.=" quotation_no='".$_GET['id']."'";
$sqli.=" and";
$sqli.=" quotation_status='เสนอราคาเรียบร้อย'";
if($cls_con->write_base($sqli)==true){
echo $cls_con->show_message('ยืนยันการตัดสต็อกสำเร็จ');
echo $cls_con->goto_page(1,'show_takecm.php');
}
else{
echo $cls_con->show_message('ยืนยันการตัดสต็อกไม่สำเร็จ');
}
}
?>
|
ประวัติการแก้ไข 2021-07-09 19:28:33 2021-07-09 19:28:39 2021-07-09 19:29:48 2021-07-09 19:30:54 2021-07-09 19:31:48 2021-07-09 19:32:32
|
|
|
|
Date :
2021-07-09 19:27:33 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เสริม เรื่อง sql injection สักหน่อย
กรณีการนำตัวแปร request ( $_GET , $_POST, $_REQUEST )
ไปใช้ กับ sql statement จำเป็นต้อง escape ( แปลงข้อมูลให้อยู่รูปแบบ ปลอดภัย)
ตัวอย่าง ตัวแปรที่เป็นตัวเลข
$id = $_GET['id'] * 1;
ตัวอย่าง ตัวแปรที่เป็นtext
$nm = addslashes($_GET['nm']);
$sql = "select * from tb_name where id=$id and name='$nm'";
หรือ ใช้ function prepare ของแต่ละเครื่องมือ ซึ่งเราไม่ต้องทำการ escape เอง
ตัวอย่าง mysqli
Code (PHP)
$stmt = $con->prepare('select * from tb_name where id=? and name=?' );
$stmt->bind_param('is', $_GET['id'], $_GET['nm'] );
$stmt->execute();
$result = $stmt->get_result();
|
|
|
|
|
Date :
2021-07-10 11:13:58 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณ คุณ Chaidhanan มากค่ะ ที่เตือนสติเรื่อง ความปลอดภัย จะแก้ไขให้มีความปลอดภัยมากขึ้นค่ะ
|
|
|
|
|
Date :
2021-07-10 12:17:37 |
By :
Wandeena |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|