在 php 中设置某些条件后,某些项目不会回显
Posted
技术标签:
【中文标题】在 php 中设置某些条件后,某些项目不会回显【英文标题】:some item won't echo after putting some condition in php 【发布时间】:2011-09-09 02:16:49 【问题描述】:通过我之前发布的这个链接Echo problem when a different user logs in,我设法解决或解决了我的问题。但不知何故,发生了一个小错误。虽然我的管理页面工作正常,但我的超级管理员和其他帐户开始输出错误(尽管它们并不是真正的错误)。员工ID和员工姓名在超级管理员页面和其他帐户中没有回显,但标题(文件上传)、文件日期和状态已回显。
//我的意思是,这就是回声假设的样子: *EmployeeID* *EmployeeName* *Title* *FileDate* *Status* 20132248 Danica 文件8 2001 年 1 月 8 日 已批准 20896647 Jan file7 2000 年 12 月 12 日 未批准 20864125 Keisha 文件2 2000 年 2 月 1 日 批准 16521253 Riorei 文件 2003 年 3 月 20 日 10 月 未批准 文件 3 2002 年 7 月 14 日 批准 //相反,它像这样回响 *EmployeeID* *EmployeeName* *Title* *FileDate* *Status* 文件8 2001 年 1 月 8 日 批准 file7 2000 年 12 月 12 日 未批准 20864125 Keisha 文件2 2000 年 2 月 1 日 批准 文件 2003 年 3 月 20 日 10 日 未批准 文件 3 2002 年 7 月 14 日 批准 //这是出现在我的本地主机上的实际输出这是我认为可能导致问题的一组代码,我将注释其中的 if 语句我认为问题导致错误
<?php
$search = '%';
$fgmembersite->DBLogin();
$limit = 5;
if(isset($_GET['offset']))
$offset = mysql_real_escape_string($_GET['offset']);
else
$offset = 0;
//for namelist a-z
$listname = '%';
If (isset($_GET['namelist']))
$listname = $_GET['namelist'];
//for search file
if(isset($_POST['searchfile']))
$search = $_POST['searchfile'];
else if(isset($_GET['searchfile']))
$search = $_GET['searchfile'];
if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa' OR $_SESSION[$fgmembersite->GetLoginSessionVar()] == 'admin')
//$sql="select * from gmdc_employee where employee_name like '%$search%' AND employee_name like '$listname%' ";
$sql="SELECT `e`.* FROM `gmdc_employee` `e` JOIN `gmdc_user` `u` ON ( `u`.`company_id` = `e`.`company_id` ) WHERE (`u`.`company_name` LIKE '%$search%' OR `e`.`employee_name` LIKE '%$search%' OR `e`.`employee_id` LIKE '%$search%') AND `e`.`employee_name` LIKE '$listname%' ";
else
$sql = "select `e`.* from `gmdc_user` `u`, `gmdc_employee` `e` where `u`.`username` = '".$_SESSION[$fgmembersite->GetLoginSessionVar()]."' and `u`.`company_id` = `e`.`company_id` AND `e`.`employee_name` like '$listname%' AND `e`.`employee_name` like '%$search%'";
$query = mysql_query("$sql ORDER BY `e`.`employee_name`, `e`.`confirmation` DESC ,`e`.`file_id` DESC,`e`.`file_date` DESC LIMIT $offset,$limit") or die ( mysql_error () );
$result = mysql_query($sql) or die (mysql_error());
$total = mysql_num_rows($result);
$emp_id = ""; //This will be use to remove employee_id if its already echoed.
$emp_name = ""; //This will be use to remove employee_name if its already echoed.
if(!$result || mysql_num_rows($result) <= 0)
$fgmembersite->HandleError("No file found.");
return false;
while ($row = mysql_fetch_assoc($query))
$file_id = $row['file_id'];
$file_desc = $row['file_description'];
$file_date = $row['file_date'];
$file_name = $row['file_name'];
$file_accs = $row['folder_access'];
$file_employee = $row['employee_id'];
$file_confir = $row['confirmation'];
$file_ename = ucwords($row['employee_name']);
$emp_id=$emp_id==$row['employee_id']?"":$row['employee_id'];
$emp_name=$emp_name==$row['employee_name']?"":$row['employee_name'];
$info = pathinfo($file_name);
$file_ext = $info['extension'];
if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
echo '<tr>
<td>
</td>
</tr>
<tr class="subone">
<td class="sub" >
'.$emp_id.'
<br />
</td>';
if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
?><td class="sub" >
<a href="" onclick = javascript:newPopup('addfile.php?emp=<?php echo $file_employee ?>');><?php echo$emp_name?></a>
<br />
</td><?php
else
echo '<td class="sub" >
'.$emp_name.'
<br />
</td>';
echo'<td class="sub" >
<a href="'.$file_accs.$file_name.'" target="_blank" style="text-decoration: underline;">'.$file_desc.'</a>
<br />
</td>
<td class="sub" >
'.date('M d, Y',mktime(0,0,0,substr($file_date,5,2),substr($file_date,8,2),substr($file_date,0,4))).'
<br />
</td>
<td class="sub" >
'.$file_confir.'
<br />
</td>';
if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
if($file_confir == 'Pending' OR $file_confir == 'NotApproved')
if(isset($_GET['id']))
$fgmembersite->Delete_Db($_GET['id']);
echo '<td class="sub" >
<a href="index.php?id='.$file_id.'">Delete</a>
<br />
</td>';
/
//I THINK THE PROBLEM STARTS HERE
else if($_SESSION[$fgmembersite->GetLoginSessionVar()] != 'sa' && ($file_confir == 'Approved' || $file_confir == 'NotApproved'))
echo '<tr>
<td>
</td>
</tr>
<tr class="subone">
<td class="sub" >
'.$emp_id.'
<br />
</td>';
if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
?><td class="sub" >
<a href="" onclick = javascript:newPopup('addfile.php?emp=<?php echo $file_employee ?>');><?php echo$emp_name?></a>
<br />
</td><?php
else
echo '<td class="sub" >
'.$emp_name.'
<br />
</td>';
echo'<td class="sub" >
<a href="'.$file_accs.$file_name.'" target="_blank" style="text-decoration: underline;">'.$file_desc.'</a>
<br />
</td>
<td class="sub" >
'.date('M d, Y',mktime(0,0,0,substr($file_date,5,2),substr($file_date,8,2),substr($file_date,0,4))).'
<br />
</td>
<td class="sub" >
'.$file_confir.'
<br />
</td>';
if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
if($file_confir == 'Pending' OR $file_confir == 'NotApproved')
if(isset($_GET['id']))
$fgmembersite->Delete_Db($_GET['id']);
echo '<td class="sub" >
<a href="index.php?id='.$file_id.'">Delete</a>
<br />
</td>';
?>
我希望有人可以帮助我找出导致此输出的原因。 :( 已经花了一个多小时才弄清楚。感谢那些会回复的人。
MisaChan
【问题讨论】:
清理这些 lins 可能会有所帮助$emp_id=$emp_id==$row['employee_id']?"":$row['employee_id'];
和 $emp_name=$emp_name==$row['employee_name']?"":$row['employee_name'];
你确认你的 SQL 是正确的吗? SQL 对我来说似乎有点可疑。附带说明一下,在将用户输入应用到 SQL 以防止 SQL 注入之前,您应该始终对用户输入的任何内容进行转义。
@Lawrence Cherone :错误是输出本身。如我上面的示例所示。和@shinkou:是的,我已经这样做了。这就是为什么它的输出几乎是正确的。我认为问题出在这组代码$emp_id=$emp_id==$row['employee_id']?"":$row['employee_id']; $emp_name=$emp_name==$row['employee_name']?"":$row['employee_name'];
上,这是我使用的在其他帐户上完美运行的条件。
像$emp_name=($emp_name==$row['employee_name'])?"":$row['employee_name'];
那样做
@Lawrence Cherone,我照你说的做了,但没有任何改变。
【参考方案1】:
在这两行中,如果员工 ID 和姓名与从数据库中检索到的相匹配,则您实际上是在删除它们:
$emp_id=$emp_id==$row['employee_id']?"":$row['employee_id'];
$emp_name=$emp_name==$row['employee_name']?"":$row['employee_name'];
我怀疑你是否想这样做:
$emp_id = ($emp_id==$row['employee_id']) ? $emp_id : $row['employee_id'];
$emp_name = ($emp_name==$row['employee_name']) ? $emp_name : $row['employee_name'];
【讨论】:
我已经这样做了,但什么也没发生。我的这段代码的目的是回显一次empid和emp名称。我的意思是,如果我上传了 2 个文件,最后上传的文件只会回显我的姓名和 ID,而第一个不会。它工作正常。我不太确定这是否真的是原因。我只是假设它导致这些代码改变了emp名称和emp id的回声:( “如果我上传了 2 个文件,最后上传的文件只会回显我的姓名和 ID,而第一个不会。”是什么意思?当您使用同一帐户上传 2 个或更多文件时,您能否格式化它的实际外观?您在问题中给出的内容仅显示每位员工 1 个文件,这很令人困惑…… 我已经编辑过了。我的意思是,因为它是根据名称排序的,例如上面的例子,riorei 上传了 2 个文件。由于文件 10 是最后一次上传,它会在最前面,因此员工 riorei 上传的以下文件不会回显名称和 id【参考方案2】:现在我明白你想要什么了。这是应该做的指导方针,而不是即时覆盖 ID 和名称。
# these are used to save the previously processed entry's info
$last_emp_id = '';
$last_emp_name = '';
while ($row = mysql_fetch_assoc($query))
$file_id = $row['file_id'];
$file_desc = $row['file_description'];
$file_date = $row['file_date'];
$file_name = $row['file_name'];
$file_accs = $row['folder_access'];
$file_employee = $row['employee_id'];
$file_confir = $row['confirmation'];
$file_ename = ucwords($row['employee_name']);
$file_date_formatted = date
(
'M d, Y'
, mktime
(
0
, 0
, 0
, substr($file_date, 5, 2)
, substr($file_date, 8, 2)
, substr($file_date, 0, 4)
)
);
# begin a row
echo '<tr>';
if ($file_employee == $last_emp_id)
# do not display the employee's ID and name
echo '<td>' . $file_employee . '</td><td>' . $file_ename . '</td>';
else
# display the employee's ID and name
echo '<td> </td><td> </td>';
# display other info (i.e. title, file date, and status)
echo '<td>' . $file_accs . $file_name . '</td><td>'
. $file_date_formatted . '</td><td>' . $file_confir . '</td';
# end the row
echo "</tr>\n";
# update employee's ID and name
$last_emp_id = $file_employee;
$last_emp_name = $file_ename;
如果您需要进一步的帮助,请告诉我。
【讨论】:
@shinkou : 抱歉,如果我迟到了你的帖子,我应该在 if else 里面放什么?我的代码写在上面对吗?我应该把这个放在哪里? @MisaChan,我添加了一些示例代码来指示应该在哪里完成。请根据您的需要进行更改。 @shinkou : 再次出现错误回声,就像现在回声之前的错误回声和之前的工作回声现在无法正常工作或回声一样。 @shinkou : 我试过你的代码,它有点工作,虽然有一个小问题,虽然 sa 管理页面现在工作正常,但我注意到其他用户和超级管理员,例如,如果我上传了 2 个文件,如果我接受了一个,它不会回显 id 和名称,但是一旦你接受了第二个,就会出现顶部名称。我试图知道为什么会发生这种情况,他就是我所做的。 @shinkou:我在那里添加了一个回显文件,我尝试在您发布的 if else 语句之前回显$last_emp_id
和$file_employee
(名称相同)。我们初始化了$last_emp_id
值到 0 对吗?但是在第一次上传特定名称时,它已经包含 $file_employee
值。我不知道是什么原因造成的。另一个是因为我编辑了代码,所以我应该说破坏页码代码。我的意思是说,wasi 限制了第 5 页,意思是每页 5 个项目,但有时它会回显 2、3 等。【参考方案3】:
为什么要排队
if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
在块内
else if($_SESSION[$fgmembersite->GetLoginSessionVar()] != 'sa'
一旦else if
失败,它就永远不会执行。
【讨论】:
以上是关于在 php 中设置某些条件后,某些项目不会回显的主要内容,如果未能解决你的问题,请参考以下文章