#php #if-statement #session #echo
#php #if-оператор #сессия #echo
Вопрос:
Я создал базу данных клиентов, в которой 4-5 сотрудников будут иметь доступ к логину для просмотра, редактирования и удаления записей.
Мне нужна html-таблица, в которой перечислены записи клиентов, чтобы показывать ссылку «Редактировать» и «Удалять» только тогда, когда идентификатор пользователя, вошедшего в систему ($_SESSION[userId]), совпадает с идентификатором пользователя, создавшего запись. Итак, если сотрудник создал 3 из 5 записей, он должен видеть только гиперссылки «редактировать» и «удалить» для этих трех записей, и ничего для двух других.
Мне удалось добраться до точки работы сеансов — однако, будучи новичком в PHP, я не уверен, куда именно поместить мой оператор IF, чтобы повторить ссылки «Редактировать» и «Удалить» — и полностью запутался в том, как это точно написать. Я перепробовал много попыток, но сейчас я рву на себе волосы! Любая помощь будет высоко оценена.
Это мой файл начала сеанса (authenticate.php ):
<?php
session_start();
$_SESSION["staffID"] = "staffID";
?>
Файл входа персонала (staff_login.php ):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Staff login</title>
</head>
<body>
<?php
require("db.php");
session_start();
// If form submitted, insert values into the database.
if (isset($_POST['username'])){
// removes backslashes
$username = stripslashes($_REQUEST['username']);
//escapes special characters in a string
$username = mysqli_real_escape_string($con,$username);
$password = stripslashes($_REQUEST['password']);
$password = mysqli_real_escape_string($con,$password);
//Checking if user existing in the database or not
$query = "SELECT * FROM `staff login` WHERE username='$username'
and password='$password'";
$result = mysqli_query($con,$query) or die(mysql_error());
$rows = mysqli_num_rows($result);
if($rows==1){
$_SESSION['username'] = $username;
$_SESSION[staffID] = $rows["$staffID"];
// Redirect user to edit_contact.php - was index.php -
header("Location: edit_contact.php");
}
else
{
echo "<div class='form'>
<h3>Username/password is incorrect.</h3>
<br/>Click here to <a href='staff_login.php'>Login</a></div>";
}
}else{
?>
<div class="form">
<h1>Staff login</h1>
<form action="" method="post" name="login">
<input type="text" name="username" placeholder="Username" required />
<input type="password" name="password" placeholder="Password" required />
<input name="submit" type="submit" value="Login" />
</form>
</div>
<?php } ?>
</body>
</html>
И php-файл для отображения записей в таблице с гиперссылками «Редактировать» и «Удалить»:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Edit contact</title>
</head>
<body>
<h2>Tate Finance Customer contact details</h2>
<?php
//***edit_contact.php***///
// Developed by: []
// Contact: []
// Created: [November 2018]
// Last Modified: [26 November 2018]
/* Purpose: This file lists all contacts from the mycontacts database in a table for logged in users to add, edit or delete their contacts.*/
//include authenticate.php file on all secure pages
require('db.php');
include("authenticate.php");
?>
<!--Add welcome note to staff user-->
<p>Welcome <?php echo $_SESSION['username']; ?>!</p>
<p><a href="logout.php">Logout</a></p>
<h3><a href="insert.php">Add new customer</a></h3>
<?php
$con = mysqli_connect("localhost","root","xxxxxx","mycontacts");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
// Show all contacts from database in a table list
$query = "SELECT * FROM contact ORDER BY conName ASC";
$rst = mysqli_query($con,$query);
if($rst)
{
if(mysqli_num_rows($rst)>0)
{
// Table design for contacts list
echo "<table border='1'><tr><td>Edit contact</td><td>Name</td><td>Address</td><td>Phone</td><td>Mobile</td><td>Email</td></tr>";
while ($row = mysqli_fetch_assoc($rst))
{
/* Present contacts details in table list according to id selected, with links to edit or delete according to contactID selected */
/* This is where I think my IF statement needs to go, but can't figure out how/what to write to make it work */
echo "<tr><td><a href=editContact.php?id=".$row['contactID'].">Edit</a><a href=delete_record.php?id=".$row['contactID'].">amp;nbsp;amp;nbsp;Delete</a></td><td>".$row['conName']."</td><td>".$row['conAddress']."</td><td>".$row['conPhone']."</td><td>".$row['conMobile']."</td><td>".$row['conEmail']."</td></tr>";
}
echo "</table>";
}
}
else
{
echo "No results found";
}
}
?>
</body>
</html>
Комментарии:
1.
session_start()
должен предшествовать любому виду вывода. Вы выводите необработанный HTML перед его вызовом.
Ответ №1:
while ($row = mysqli_fetch_assoc($rst))
{
echo "<tr>";
if($_SESSION["staffID"] == $id_of_creator){
echo "<td>".
"<a href=editContact.php?id=".$row['contactID'].">Edit</a>".
"<a href=delete_record.php?
id=".$row['contactID'].">amp;nbsp;amp;nbsp;Delete</a> ".
"</td>";
}else echo "<td></td>";
echo "<td>".$row['conName']."</td><td>".$row['conAddress']."</td><td>".$row['conPhone']."</td><td>".$row['conMobile']."</td><td>".$row['conEmail']."</td></tr>";
}
Ответ №2:
<?php
while($row = mysqli_fetch_assoc($selectAllCustomer)){
$id = $row['customer_id'];
$name= $row['customer_id'];
$email= $row['customer_email'];
echo "<tr>";
if($_SESSION['staffID'] == $Admin_Id){
echo "<td>".$name."</td>";
echo "<td>".$email."</td>";
echo "<td>";
echo "<a href='editPage.php?edit='".$id."'>Edit</a>";
echo "</td><td>";
echo "<a href='deletePage.php?delete='".$id."'>Delete</a>";
echo "</td>";
}else{
echo "<td>".$name."</td>";
echo "<td>".$email."</td>";
}
echo "</tr>";
}
NB: the valiable $admin_Id, is a id of the creator
?>
Комментарии:
1. Спасибо! Теперь я понимаю, как включить в него оператор IF, чтобы таблица customer возвращала гиперссылки, когда это необходимо. Однако, боюсь, я не понимаю: if ($_SESSION[‘StaffID’] == $Admin_ID) и if ($_SESSION [«StaffID»] == $id_of_creator) — в том смысле, что я понятия не имею, на что заменить $ Admin_ID или $ id_of_creator? Я думал, что это будет просто повторение $ _SESSION[«StaffID»] = $rows[«StaffID»]; ? Но это не работает. Извините, я новичок.
2. Я думаю, вам нужно добавить имя поля, подобное
"creator_Id"
или любому другому, в котором, когда сотрудник добавляет записи, его / ееid
сохраняется в этом столбце. Таким образом, при выборе записей клиента в каждой строке записей будут указаныid
сотрудники, которые их создали. Исходя из этого, вы можете сравнитьid
сотрудников, которые в данный момент вошли в систему, и сотрудников из базы данных.