إستفسار عن تحديد صلاحيات اليوزر في تطبيق الويب
السلام عليكم ....
أعمل على تطبيق ويب حيث يتيح للأعضاء بعد تسجيل الدخول (إضافة/تعديل/حذف) أي بوست في صفحته الخاصة في الموقع.
حتى الآن عملت نظام Log In / Log out والعضو يمكنه إجراء العمليات لكن المشكلة أن البوست يتم إضافته للصفحة الرئيسية
كيف ممكن أجعل كل عضو له صلاحيات السابقة لكن في صفحته الخاصة فقط بدون صفحات الأعضاء الاخرين ؟؟
السكربت في المرفقات مع الصور
ساعد بالإجابة
"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."
الإجابات (6)
حل مشكلة التحديث
استبدل محتوى ملف update.php بالتالي
<?php
session_start();
require '../inc/functions.php';
$post = new Post;
if(isset($_SESSION['logged_in'])){
if(isset($_POST['title']) AND isset($_POST['content']) AND (isset($_POST['id']) )) {
$id = $_POST['id'];
$title = $_POST['title'];
$content = nl2br($_POST['content']);
$query = $pdo->prepare('UPDATE posts SET title = ? , content = ? WHERE id = ? ');
$query->bindValue(1, $title);
$query->bindValue(2, $content);
$query->bindValue(3, $id);
$query->execute();
header('Loaction : index.php');
}
include 'templates/header.php';
?>
<div class="row">
<?php if(isset($_GET['id'])): ?>
<?php $post = $post->fetch_data($_GET['id']); ?>
<div class="col-sm-3 col-sm-6 col-md-4 col-lg-offset-4 col-lg-4 ">
<div class="well">
<form action="update.php" method="post" rol="form">
<input type="hidden" name="id" value="<?php echo $post['id']; ?>"></input>
<div class="form-group">
<label for="">New Article or blog title </label>
<input type="text" name="title" class="form-control" placeholder="blog title" value="<?php echo $post['title']; ?>">
</div>
<div class="form-group">
<label for="">New Article or blog content </label>
<textarea clos="40" rows="20" name="content" class="form-control" placeholder="blog content"><?php echo $post['content']; ?></textarea>
</div>
<button class="btn btn-info btn-md btn-primary" type="submit" value="New ">Update</button><br />
</form>
</div>
</div>
<?php else: ?>
<?php $posts = $post->fetch_all(); ?>
<table class="table table-hover">
<thead>
<tr>
<th><h4>CMS or Blog title</h4></th>
<th>Require</th>
<th>Update</th>
</tr>
</thead>
<tbody>
<form action="update.php" method="get">
<?php foreach($posts as $post) : ?>
<tr>
<td><label for=""><?php echo $post['title']; ?></label></td>
<td><input type="checkbox" name="id" value="<?php echo $post['id']; ?>"></td>
<td><input type="submit" class="btn btn-info" value="Update Post"></td>
</tr>
<?php endforeach; ?>
</form> <!-- End form -->
</tbody>
</table>
<?php endif; ?>
</div> <!-- End row -->
<?php
include 'templates/footer.php';
}else{
header('Location: index.php');
}
?>
المشكلة:
- كان الملف لايحتوي على نموذج يستقبل البيانات لتعديلها ثم ارسالها لنفس الملف للتحديث
- كان فيه خطأ الأكواد التحقق انا وضحتها بالردود السابقة
- كان فيه خطأ بطريقة كتابة كود sql لتحديث المطلوب وضحتها بالرد السابق
الآن يعمل بالشكل المطلوب
نصائح:
- دائما التحقق من مدخلات الزوار وتنقيحها من اي اكواد خبيثه
- عدم استخدام md5 لتشفير كلمات السر لانها قديمه وفكها اصبح متوفر
بالنسبة لعملية رفع الملفات ممكن الإستفادة من هذا السؤال ومحتواه لخدمتك بكل سهولة
اما عملية عرض الملفات الخاصة بالعضو نفسه راح اراجعها وارجع ارد عليك بإذن الله
بالنسبة لعملية عرض اليوزر لتدويناته فقط من دون البقية يجب اضافة حقل جديد داخل جدول posts بمسمى user_id عندما يقوم العضو بكتابة تدوينة جديدة يتم تخزين id العضو ليسهل في المستقبل عند تعدد المستخدمين ان يعرف كل مستخدم تدويناته ومن السهل التحكم بصلاحيات التعديل والعرض كل شخص حسب صلاحياته
وممكن تطوير class post داخل ملف function.php ليحتوي method جديدة
public function fetch_user_data($id)
{
global $pdo;
$query = $pdo->prepare("SELECT id,image,timestamp,title,content, LEFT(content, 0) AS excerpt FROM posts WHERE user_id = ? ");
$query->bindValue(1, $id);
$query->execute();
return $query->fetchAll();
} /* End function fetch_user_data */
لم اقم بتجربة الكود اتمنى منك التجربة وتعديل المطلوب وان واجهتك مشكلة ساكون اكثر من سعيد للمساعدة
جربت الكود لكن للأسف ما يعمل
وبالنسبة لعامود user_id في جدول البوست كيف أربطه بعامود الid في جدول اليوزر ؟
44 دقائق مضت, Dem said:جربت الكود لكن للأسف ما يعمل
وبالنسبة لعامود user_id في جدول البوست كيف أربطه بعامود الid في جدول اليوزر ؟
جربت الكود عندي ويعمل بدون مشاكل وقمت بإضافة حقل جديد باسم user_id وادخلت فيه يدويا id للمستخدم admin الي هو ١
هنا كود class post الي بداخل ملف function.php
<?php
require 'connection.php';
/* function posts()
{
global $pdo;
// $query = $pdo->prepare("SELECT * FROM posts");
$query = $pdo->prepare("SELECT id,image,timestamp,title,content, LEFT(content, 0) AS excerpt FROM posts");
$query->execute();
return $query->fetchAll();
} */
class Post {
public function fetch_all()
{
global $pdo;
$query = $pdo->prepare("SELECT id,image,timestamp,title,content, LEFT(content, 0) AS excerpt FROM posts");
$query->execute();
return $query->fetchAll();
} /* End function fetch_all */
public function fetch_user_data($id)
{
global $pdo;
$query = $pdo->prepare("SELECT id,image,timestamp,title,content, LEFT(content, 0) AS excerpt FROM posts WHERE user_id = ? ");
$query->bindValue(1, $id);
$query->execute();
return $query->fetchAll();
} /* End function fetch_all */
public function fetch_data($id)
{
global $pdo;
$query = $pdo->prepare("SELECT * FROM posts WHERE id = ? ");
$query->bindValue(1, $id);
$query->execute();
return $query->fetch();
} /* End function fetch_data */
} /* End class Post */
?>
وقمت بتعديل ملف index.php تحت مجلد admin ليعرض تدوينات العضو نفسه ليصبح كود ملف index.php كالتالي
<?php
session_start();
require '../inc/connection.php';
// new code start from here
require '../inc/functions.php';
$post = new Post;
if(isset($_SESSION['logged_in'])) //when user logged IN control panel
{
include 'templates/header.php';
$posts = $post->fetch_user_data(1);
?>
<div class="container">
<div class="row">
<h1>PHP PDO CMS BLOG </h1>
<?php
foreach($posts as $post): ?>
<article class="col-md-6">
<div class="thumbnail">
<div class="caption">
<h2><a href="post.php?id=<?= $post['id']; ?>"><center> <?php echo $post['title']; ?></center></a></h2>
<div class="contant"><?php echo $post['excerpt']; ?></div><br>
<img class="img-circle " data-src="holder.js/140x140" ><?php $post ['image']; ?><br />
<br> <a href="post.php?id=<?= $post['id']; ?>" class="btn btn-info btn-lg btn-block">Read More</a>
</div>
</div>
</article>
<?php endforeach; ?>
</div>
</div>
<!-- new code end here -->
<div class="container">
<div class="row">
<div class="col-sm-3 col-sm-6 col-md-4 col-lg-offset-4 col-lg-4 ">
<div class="list-group">
<div class="list-group-item">
<a class="list-group-item" href="add.php">
<h4 class="list-group-item-heading">
Add Post or Article
</h4>
<p class="list-group-item-text">
Create New post or article to your CMS blog system with pdo way
</p>
</a>
<a class="list-group-item" href="update.php">
<h4 class="list-group-item-heading">
Update Post or Article
</h4>
<p class="list-group-item-text">
Modify post or article to your CMS blog system with pdo way
</p>
</a>
<a class="list-group-item" href="Delete.php">
<h4 class="list-group-item-heading">
Delete Post or Article
</h4>
<p class="list-group-item-text">
Delete Old post or article from your CMS blog system with pdo way
</p>
</a>
<a class="list-group-item active" href="logout.php">
<h4 class="list-group-item-heading">
Logout
</h4>
<p class="list-group-item-text">
Logout and go have some fun
</p>
</a>
</div>
</div> <!-- End list-group -->
<?php
include 'templates/footer.php';
}else{//if Not logged IN should enter username and password
if(isset($_POST['username'], $_POST['password'])) {
$username = $_POST['username'];
$password = md5($_POST['password']); //turn my password to MD5 style
// if username and password empty show error :
if (empty($username) or empty($password)) {
$error = 'Username or Password is Empty';
}else{
// if user enter username & password check it in DB
$query = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$query->bindValue(1, $username);
$query->bindValue(2, $password);
$query->execute();
$num = $query->rowCount();
// if username and password == true(1) in DB :
if($num == 1){
$_SESSION['logged_in'] = true;
header('location: index.php');
exit();
}else{ // if username and password == false(2) NOT in DB :
$error = 'Wrong Username or Password';
}
}
}//End IF
include 'templates/header.php';
?>
<?php if(isset($error)) { ?>
<div class="col-sm-3 col-sm-6 col-md-4 col-lg-offset-3 col-lg-6 ">
<p class="bg-danger btn-lg"><?php echo $error; ?></p>
</div><br>
<?php } ?>
<br>
<div class="row">
<div class="col-sm-3 col-sm-6 col-md-4 col-lg-offset-4 col-lg-4 ">
<div class="well">
<form action="index.php" method="post" rol="form">
<div class="form-group">
<label for="">Username : </label>
<input type="text" name="username" class="form-control" placeholder="Enter ID Number" >
</div>
<div class="form-group">
<label for="Password">Password : </label>
<input type="password" name="password" class="form-control" placeholder="Password">
</div>
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> Remember me </label>
</div>
<button class="btn btn-info btn-md btn-primary btn-block" type="submit" value="Login">Sign in</button><br />
</form>
</div></div></div>
</div> <!-- end container -->
<?php include 'templates/footer.php';
} ?>
بالنسبة لطريقة الربط تكون عن طريق الجلسات
- بعد مايسجل العضو دخول سوي استعلام يقوم بتحديد كل معلومات العضو
- يتم تخزينها داخل متغير بالجلسات SESSION نوع المتغير مصفوفة يحتوي كل معلومات العضو مثل اسمه ورقم العضوية والبريد الالكتروني اذا موجود
- ثم نستخدم رقم العضوية المخزن بالجلسة لما يقوم العضو بكتابة تدوينة جديدة وتخزينها داخل user_id بجدول posts لعملية الربط بشكل آلي
- وممكن عرض جميع التدوينات الخاصة بالعضو بالطريقة الي فوق ونفس الكود الي كتبته بالسابق
في ٢٨/٢/٢٠١٦ at 19:00, Ali Majrashi said:جربت الكود عندي ويعمل بدون مشاكل وقمت بإضافة حقل جديد باسم user_id وادخلت فيه يدويا id للمستخدم admin الي هو ١
هنا كود class post الي بداخل ملف function.php
وقمت بتعديل ملف index.php تحت مجلد admin ليعرض تدوينات العضو نفسه ليصبح كود ملف index.php كالتالي
بالنسبة لطريقة الربط تكون عن طريق الجلسات
- بعد مايسجل العضو دخول سوي استعلام يقوم بتحديد كل معلومات العضو
- يتم تخزينها داخل متغير بالجلسات SESSION نوع المتغير مصفوفة يحتوي كل معلومات العضو مثل اسمه ورقم العضوية والبريد الالكتروني اذا موجود
- ثم نستخدم رقم العضوية المخزن بالجلسة لما يقوم العضو بكتابة تدوينة جديدة وتخزينها داخل user_id بجدول posts لعملية الربط بشكل آلي
- وممكن عرض جميع التدوينات الخاصة بالعضو بالطريقة الي فوق ونفس الكود الي كتبته بالسابق
جربت الكود الي كتبت صار البوست ينضاف في صفحة الindex للادمن مع لوحة التحكم
كيف أجعل البوست ينضاف في صفحة اليوزر الخاصة ؟ أنا عملت صفحة خاصة لكل يوزر من وين أحدد مكان عرضها ؟
وأيضا عملت تسجيل ليوزر ثاني و اضفت بوست جعلت رقم user_id له 2 يدويا مثل رقم id اليوزر الثاني لكن اذا دخلت صفحته أجد البوست الاول
ما أجد البوست الي مفترض هو اضافه !!
أضفت بعد السيشن فاريبل اليوزر مثل الي في هذا الرابط لكن مافيه تغيير http://www.formget.com/login-form-in-php/
أعتذر للإزعاج لكن المشكلة معقدة بالنسبة لي ومن فترة أحاول أحل المشكلة بدون نتيجة للأسف..
عندك اخطاء باماكن كتابة الاكواد
السبب انه مايعرض الا تدوينات العضو رقم ١ هو ان الكود هذا لازم يكون دايناميك
$posts = $post->fetch_user_data(1);
هذا الكود المسؤل عن عرض التدوينات بلوحة التحكم للعضو
انا اعطيتك الطريقة وهي بعد مايسجل العضو دخول نحفظ بياناته بمتغير داخل جلسة ونستخدم هالبيانات لجلب التدوينات لتحديث التدوينات وبعد عند كتابة اي تدوينة جديدة
االتعديلات داخل ملف index.php داخل مجلد admin
نعدل كود الي يتحقق من بيانات العضو ثم تسجيل دخوله للتالي
// if username and password empty show error :
if (empty($username) or empty($password)) {
$error = 'Username or Password is Empty';
}else{
// if user enter username & password check it in DB
$query = $pdo->prepare("SELECT id,username FROM users WHERE username = ? AND password = ?");
$query->bindValue(1, $username);
$query->bindValue(2, $password);
$query->execute();
$num = $query->rowCount();
// if username and password == true(1) in DB :
if($num == 1){
$_SESSION['logged_in'] = true;
$_SESSION['user'] = $query->fetch();
header('location: index.php');
exit();
}else{ // if username and password == false(2) NOT in DB :
$error = 'Wrong Username or Password';
}
}
- عدلنا على الكويري لجلب بيانات العضو من لوحة التحكم بدل جلب كل البيانات راح نستدعي فقط اسم المستخدم و id فقط
- بعدها اضفنا متغير جديد بالجلسة وخزنا فيه بيانات العضو الي قام بتسجيل الدخول تحت
$_SESSION['user']
وبعدين نستخدم هالمتغير لجلب بيانات العضو الي مسجل دخول باستخدام هالكود هو نفس الي فوق بس صار الحين مرن ويقبل متغير العضو مسجل الدخول لجلب تدويناته الخاصة
$posts = $post->fetch_user_data($_SESSION['user']['id']);
طبعا لازم تسجيل خروج ثم تسجيل دخول للسكربت عشان يشتغل بالشكل الصحيح
راح يكون الكود داخل ملف index.php داخل الملجد admin بهالشكل
<?php
session_start();
require '../inc/connection.php';
// new code start from here
require '../inc/functions.php';
$post = new Post;
if(isset($_SESSION['logged_in'])) //when user logged IN control panel
{
//die(var_dump($_SESSION['user']));
include 'templates/header.php';
$posts = $post->fetch_user_data($_SESSION['user']['id']);
?>
<div class="container">
<div class="row">
<h1>PHP PDO CMS BLOG </h1>
<?php
foreach($posts as $post): ?>
<article class="col-md-6">
<div class="thumbnail">
<div class= caption">
<h2><a href="post.php?id=<?= $post['id']; ?>"><center> <?php echo $post['title']; ?></center></a></h2>
<div class="contant"><?php echo $post['excerpt']; ?></div><br>
<img class="img-circle " data-src="holder.js/140x140" ><?php $post ['image']; ?><br />
<br> <a href="post.php?id=<?= $post['id']; ?>" class="btn btn-info btn-lg btn-block">Read More</a>
</div>
</div>
</article>
<?php endforeach; ?>
</div>
</div>
<!-- new code end here -->
<div class="container">
<div class="row">
<div class="col-sm-3 col-sm-6 col-md-4 col-lg-offset-4 col-lg-4 ">
<div class="list-group">
<div class="list-group-item">
<a class="list-group-item" href="add.php">
<h4 class="list-group-item-heading">
Add Post or Article
</h4>
<p class="list-group-item-text">
Create New post or article to your CMS blog system with pdo way
</p>
</a>
<a class="list-group-item" href="update.php">
<h4 class="list-group-item-heading">
Update Post or Article
</h4>
<p class="list-group-item-text">
Modify post or article to your CMS blog system with pdo way
</p>
</a>
<a class="list-group-item" href="Delete.php">
<h4 class="list-group-item-heading">
Delete Post or Article
</h4>
<p class="list-group-item-text">
Delete Old post or article from your CMS blog system with pdo way
</p>
</a>
<a class="list-group-item active" href="logout.php">
<h4 class="list-group-item-heading">
Logout
</h4>
<p class="list-group-item-text">
Logout and go have some fun
</p>
</a>
</div>
</div> <!-- End list-group -->
<?php
include 'templates/footer.php';
}else{//if Not logged IN should enter username and password
if(isset($_POST['username'], $_POST['password'])) {
$username = $_POST['username'];
$password = md5($_POST['password']); //turn my password to MD5 style
// if username and password empty show error :
if (empty($username) or empty($password)) {
$error = 'Username or Password is Empty';
}else{
// if user enter username & password check it in DB
$query = $pdo->prepare("SELECT id,username FROM users WHERE username = ? AND password = ?");
$query->bindValue(1, $username);
$query->bindValue(2, $password);
$query->execute();
$num = $query->rowCount();
// if username and password == true(1) in DB :
if($num == 1){
$_SESSION['logged_in'] = true;
$_SESSION['user'] = $query->fetch();
header('location: index.php');
exit();
}else{ // if username and password == false(2) NOT in DB :
$error = 'Wrong Username or Password';
}
}
}//End IF
include 'templates/header.php';
?>
<?php if(isset($error)) { ?>
<div class="col-sm-3 col-sm-6 col-md-4 col-lg-offset-3 col-lg-6 ">
<p class="bg-danger btn-lg"><?php echo $error; ?></p>
</div><br>
<?php } ?>
<br>
<div class="row">
<div class="col-sm-3 col-sm-6 col-md-4 col-lg-offset-4 col-lg-4 ">
<div class="well">
<form action="index.php" method="post" rol="form">
<div class="form-group">
<label for="">Username : </label>
<input type="text" name="username" class="form-control" placeholder="Enter ID Number" >
</div>
<div class="form-group">
<label for="Password">Password : </label>
<input type="password" name="password" class="form-control" placeholder="Password">
</div>
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> Remember me </label>
</div>
<button class="btn btn-info btn-md btn-primary btn-block" type="submit" value="Login">Sign in</button><br />
</form>
</div></div></div>
</div> <!-- end container -->
<?php include 'templates/footer.php';
} ?>
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !