สอบถามเรื่อง SELECT * FROM Where และ session ติดปัญหานานมากครับ
สอบถามครับ พอดีผมทำหน้าอัปเดท แก้ไข ของแต่ละ user
ผมติดปัญหานี้นานมากครับ
ผมทำการ login ด้วย id test1 ไปยังหน้าโชว์ข้อมูล ในข้อมูลนั้น มีหลาย id เป็นข้อมูลของการเช่ารถ ของ id test แล้วทำการ แก้ไขข้อมูล ลำดับที 1 url update.php?u=273 มันก็จะแสดง ข้อมูลที่ได้ทำการจองรถไว้ ของ id test ปกติ
ผมลองทดสอบ เข้าไอดี test2 แล้วทำการก็อป url ของ id test1 ไป update.php?u=273 ปรากฏว่ามันก็แสดงของ id test1
ผมติดปัญหาว่า ต้องการให้มันไม่แสดงข้อมูลของบุคคลอื่น หรือเข้าถึงข้อมูลบุคคลอื่น ลองทำ session แล้วก็ไม่ได้ งง มากครับ
code ที่ใช้
Code (PHP)
<?php
session_start();
//PUT THIS HEADER ON TOP OF EACH UNIQUE PAGE
if(!isset($_SESSION['id'])){
header("location:login.php");
header("Content-type: text/html; charset=utf-8");
}
include "config.php";
include_once('config/dbconnect.php');
if(isset($_GET['u'])):
if(isset($_POST['bts'])):
$stmt = $mysqli->prepare("UPDATE ven_rent SET van_type =?, van_dstart=?, rent_estart=?, rent_address=?, rent_tel=?, first_rentname=? , last_rentname=? , rent_amount=? WHERE id_van=?");
$stmt->bind_param('ssssssssss', $vr, $vp, $vs, $ve, $rd, $rt, $fr,$lr,$ra,$id);
$vr = $_POST['vr'];
$vp = $_POST['vp'];
$vs = $_POST['vs'];
$ve = $_POST['ve'];
$rd = $_POST['rd'];
$rt = $_POST['rt'];
$rt = $_POST['rt'];
$fr = $_POST['fr'];
$lr = $_POST['lr'];
$ra = $_POST['ra'];
$id = $_POST['id'];
if($stmt->execute()):
echo "<script>location.href='datatable.php'</script>";
else:
echo "<script>alert('".$stmt->error."')</script>";
endif;
endif;
$res = $mysqli->query("SELECT * FROM ven_rent WHERE id_van = ".$_GET['u']);
$row = $res->fetch_assoc();
?>
ขอบคุณครับTag : PHP
Date :
2016-04-26 21:27:55
By :
yuttakarn1
View :
1698
Reply :
16
where id_van=xxxx and user_id = $_SESSION['profile']['user_id ']
สีแดงไม่รู้คุณเก็บ session ไว้ยังไง ก็ตรวจสอบประมาณนี้
Date :
2016-04-26 22:43:09
By :
Chaidhanan
ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2016-04-26 22:43:09
รายละเอียดของการตอบ ::
สวัสดีครับ
ผมกับค่า SESSION ID จากการ login เข้ามาของไอดีนั้น
นี้หน้า page login ตอนนี้ยังทำหน้าแก้ไขให้แก้ไขได้เฉพาะ id ที่ login เข้ามา ไมไ่ด้เลยครับ มันสามารถเข้าถึงได้ทุกไอดีเลย
ปล. ผมทำโปรเจคส่งมหาลัยครับ ผมไม่ค่อยเก่งเรื่อง code ขอบคุณมากครับ ขออนุญาติเรียก อาจารย์ครับ
Code (PHP)
<?php
session_start();
if(isset($_SESSION['id'])!="") {
header("Location: system/index.php");
}
include_once 'config/dbconnect.php';
//check if form is submitted
if (isset($_POST['login'])) {
$login_user = mysqli_real_escape_string($MySQLi_CON, $_POST['email']);
$pw_user = mysqli_real_escape_string($MySQLi_CON, $_POST['password']);
$result = mysqli_query($MySQLi_CON, "SELECT * FROM user_rent WHERE email = '" . $login_user . "' and password = '" . $pw_user . "'");
if ($row = mysqli_fetch_array($result)) {
$_SESSION['id_user'] = $row['id_user'];
$_SESSION['id'] = $row['id'];
$_SESSION['firstname'] = $row['firstname'];
$_SESSION['email'] = $row['email'];
header("Location: system/index.php");
} else {
$errormsg = '<div class="alert alert-danger" role="alert"><strong>ล็อกอินไม่ถูกต้อง</strong> หรือบัญชีของท่านยังไม่ได้รับการยืนยัน โปรดลองใหม่อีกครั้ง</div> <div class="modal-title f-xxl" id="loginModalLabel">ลงชื่อเข้าใช้งานระบบ</div>';
}
}
?>
อันนี้หน้าฟอม โชวข้อมูลของไอดีนั้นๆครับ
Code (PHP)
<thead>
<tr>
<th>ที่</th>
<th>รหัสการจอง</th>
<th>วันที่จอง</th>
<th>เที่ยวไป</th>
<th>เที่ยวกลับ</th>
<th>ราคารวม</th>
<th>สถานะ</th>
</tr>
</thead>
<tbody>
<?php
$res = $mysqli->query("SELECT * FROM ven_rent WHERE id = '".$_SESSION['id']."' ");
while ($row = $res->fetch_assoc()):
?>
<tr>
<td><?php echo $row['id_van']?></td>
<td><?php echo $row['van_dstart']?></td>
<td><?php echo $row['rent_estart']?></td>
<td><?php echo $row['rent_address']?></td>
<td><?php echo $row['rent_tel']?></td>
<td><?php echo $row['first_rentname']?></td>
<td><?php echo $row['first_rentname']?></td>
<td>
<ul class="icons-list">
<li><a href="update.php?u=<?php echo $row['id_van'] ?>" data-popup="tooltip" title="แก้ไข"><i class="icon-pencil7"></i></a></li>
<li><a onclick="return confirm('Are you want deleting data')" href="delete.php?d=<?php echo $row['id_van'] ?>"><i class="icon-trash"></i></a></li>
<li><a href="#" data-popup="tooltip" title="Options"><i class="icon-cog7"></i></a></li>
</ul>
</td>
<?php
endwhile;
?>
</tbody>
</table>
สำหรับไอ้นนี้หน้า แก้ไข อัปเดท
Code (PHP)
<?php
session_start();
//PUT THIS HEADER ON TOP OF EACH UNIQUE PAGE
if(!isset($_SESSION['id'])){
header("location:login.php");
header("Content-type: text/html; charset=utf-8");
}
include "config.php";
include_once('config/dbconnect.php');
if(isset($_GET['u'])):
if(isset($_POST['bts'])):
$stmt = $mysqli->prepare("UPDATE ven_rent SET van_type =?, van_dstart=?, rent_estart=?, rent_address=?, rent_tel=?, first_rentname=? , last_rentname=? , rent_amount=? WHERE id_van=?");
$stmt->bind_param('ssssssssss', $vr, $vp, $vs, $ve, $rd, $rt, $fr,$lr,$ra,$id);
$vr = $_POST['vr'];
$vp = $_POST['vp'];
$vs = $_POST['vs'];
$ve = $_POST['ve'];
$rd = $_POST['rd'];
$rt = $_POST['rt'];
$rt = $_POST['rt'];
$fr = $_POST['fr'];
$lr = $_POST['lr'];
$ra = $_POST['ra'];
$id = $_POST['id'];
if($stmt->execute()):
echo "<script>location.href='datatable.php'</script>";
else:
echo "<script>alert('".$stmt->error."')</script>";
endif;
endif;
$res = $mysqli->query("SELECT * FROM ven_rent WHERE id_van = ".$_GET['u']);
$row = $res->fetch_assoc();
?>
Date :
2016-04-26 23:16:40
By :
yuttakarn1
Code
form show data u = id_van
<li><a href="update.php?u=<?php echo $row['id_van'] ?> "
data-popup="tooltip" title="แก้ไข"><i class="icon-pencil7"></i></a></li>
หน้าแก้ไข
Code
if(isset($_GET['u'])): // เอาค่า u เป็น id_van
$stmt = $mysqli->prepare(
"UPDATE ven_rent SET van_type =?, van_dstart=?, rent_estart=?, rent_address=?,
rent_tel=?, first_rentname=? , last_rentname=? , rent_amount=?
WHERE id_van=? ");
$stmt->bind_param( 'ssssssssss', $vr, $vp, $vs, $ve, $rd, $rt, $fr,$lr,$ra,
$id );
$id = $_POST['id']; // แต่เอาค่า $_POST[id] มาใส่แทน บันทัดนี้ อ้างอิง id ผิด มันอัพเดท ผิด เรคคอร์ด หรือเปล่า
แก้เป็น
Code
$stmt = $mysqli->prepare(
"UPDATE ven_rent SET van_type =?, van_dstart=?, rent_estart=?, rent_address=?,
rent_tel=?, first_rentname=? , last_rentname=? , rent_amount=?
WHERE id_van=? and id = ? " );
$stmt->bind_param( 'ssssssssss', $vr, $vp, $vs, $ve, $rd, $rt, $fr,$lr,$ra,
$id, $user_id );
$id = $_GET['u'] ;
$user_id = $_SESSION['id']; // ตรงนี้ไม่รู้ว่า กำหนด pk / fk ไว้อย่างไร ถูกฟีลด์หรือเปล่า แก้ไขเอาเอง
ปล. ตั้งชื่อให้มันสื่อความหมายหน่อยครับ id ของอะไรก็ใส่เข้าไปเต็มๆ
ตัวอย่าง pk_user_id, pk_van_id, fk_trans_id, fk_van_id
fk_user_id, fk_detail_id, pk_account_id
ประวัติการแก้ไข 2016-04-27 05:55:12
Date :
2016-04-27 05:49:43
By :
Chaidhanan
ใส่โค้ดนี้ไว้ด้านบนครับ ก่อนจะมีการ QUERY ดึงข้อมูลผู้ใช้งานก็ได้
Code (PHP)
$u_id = $_GET['u'];
if( $_SESSION['id'] != $u_id ) {
echo '<script>';
echo "alert(\"คุณไม่มีสิทธิ์ใช้งานในส่วนนี้!!!\");";
echo "window.location.href = 'index.php';";
echo '</script>';
}
Date :
2016-04-27 09:27:27
By :
arm8957
ผมก็ไม่ทราบนะครับว่าคุณออกแบบไว้ยังไง แต่โดยทั่วไป(ส่วนตัวผมเอง) ถ้าเป็นการแก้ไขข้อมูลส่วนตัวหรือข้อมูลอะไรก็แล้วแต่ ผมจะใช้ $_SESSION['id'] ที่ได้จากการล็อคอินทั้งหมด จะไม่รับค่าจาก $_GET แบบตรงๆ หรือถ้ารับค่า $_GET ก็จะมีการเข้ารหัสด้วยเพื่อไม่ให้ User แก้ไขเองได้ง่ายๆ ที่จริงเรื่องที่คุณทำอยู่มันไม่ได้ซับซ้อนอะไรเลยนะครับ ลองออกแบบดีๆ
Date :
2016-04-27 10:11:09
By :
arm8957
ก่อนอื่น ผมคิดว่า จขกท ต้องใจเย็นๆ ก่อน อาการแบบนี้ผมเคยเป็นครับ อารมณ์แบบอยากจะให้ได้ๆ แต่มันก็นึกภาพไม่ออก มองอะไรไม่เห็น ถ้ากำลังมึนๆ ลองนิ่งๆ ใจเย็นๆ แล้วกลับมาทำใหม่ครับ อาจจะช่วยให้แก้ปัญหาที่กำลังเจออยู่ได้ดีขึ้น เพราะตอนนี้ ต้องการแต่จะได้คำตอบที่ทำให้ทำงานได้เลย เดี๋ยวพอทำใจร่มๆ แล้วเข้าใจการทำงานรับรองว่า ร้อง อ๋อ แน่ๆ ครับ
ตอนนี้ต้องถาม จขกท ว่าเข้าใจการแก้ปัญหาหรือยัง? ไม่นับเรื่องการลงโค้ด ถ้าเข้าใจแล้วค่อยมาดูกันต่อว่า ทำไมถึงไมได้? ตอนนี้คำตอบจากพี่ๆ ที่เค้ามาตอบน่ะผมว่าครบแล้วครับ แค่เค้าไม่ได้เขียนออกมาให้คุณเป๊ะๆ เลยทำให้พาลหงุดหงิด ใจเย็นๆ นะครับ
ปล. อันนี้คือแนะนำแบบที่ไม่รู้ว่างานเร่งมั้ยหรือเปล่า? แต่ยังไงก็อยากให้ตั้งสติก่อนลองเช็คทุกๆ การทำงานเลย มันจะช่วยได้อีกทางหนึงครับ นอกจากเป็นการ Debug แล้วยังช่วยให้เรียนรู้เพิ่มเติมจากที่สิ่งที่เรากำลังทำ เพราะ จขกท ไปเอาตัวอย่างมาเขียนก็อาจจะไม่เข้าใจโค้ดทั้งหมด ...
Code (PHP)
<?php
session_start();
// Get current user_id from session
$user_session_id = $_SESSION['id'];
// Get current user_id from URL
// Example from your URL http://localhost/xxxx/pdate.php?u=273
$user_get_id = $_GET['u'];
// Check current user can edit
if ($user_id == $$user_session_id) {
// Edit .....
} else {
echo "You Cannot Edit";
}
?>
ประวัติการแก้ไข 2016-04-27 10:51:26 2016-04-28 09:59:50
Date :
2016-04-27 10:39:01
By :
ALTELMA
Date :
2016-04-28 09:21:12
By :
mr.win
Load balance : Server 05