关于我的系统大学投诉..工作人员可以使用此系统进行投诉。 第一个用户填写表格投诉并提交后提交用户可以查看投诉。现在问题是投诉无法显示....
此用户投诉代码(userCampus.php):
?php // ------------------------------------------------------PROCESS -------------------------- START. ?>
<?php
$page_title='userCampus';
if(isset($_POST['submit'])){
if($_POST['secname']){
//$sn=escape_data($_POST['secname']);
$sn=$_POST['secname'];
// echo '<br> sn is : ' . $sn;
}else{
$sn=FALSE;
$message .='<p>You forgot to select section name!</p>';
}
if($_POST['subject']){
//$s=escape_data($_POST['subject']);
$s=$_POST['subject'];
}else{
$s=FALSE;
$message .='<p>you forgot to enter subject!</p>';
}
if($_POST['comment']){
//$c=escape_data($_POST['comment']);
$c=$_POST['comment'];
}else{
$c=FALSE;
$message .='<p>you forgot to enter comment!</p>';
}
}
if($sn && $s && $c ){
$userid = $_SESSION['username'];
$groupid = $_SESSION['secname'];
$query=" INSERT INTO campuscomplaint (secname, subject, comment, nameuser, groupid, userid)" .
" VALUES (" . "'" . $sn . "','" . $s . "','" . $c . "','" . $nameuser . "','" . $groupid . "','" . $userid . "')";
//echo 'query is : ' . $query . '<br>';
include "connectioncomplaint.php";
mysql_query($query);
echo'<p><b></b></p>';
include('done.php');
exit();
}
?>
<?php //------------------------------------------------ PROCESS ------------------------------------ end. ?>
<form action="<?php echo$_SERVER['PHP_SELF'];?>" method="post">
此代码用于查看投诉-userView.php(用于其他页面):
<?php //======================================================================================================================= PROCESS DATA ======================================================= START.
include "connectioncomplaint.php";
?>
<?php
$userid = $_GET['userid'];
$secname = $_GET['secname'];
$subject = $_GET['subject'];
$comment = $_GET['comment'];
//echo 'test : ' . $subject;
//Tarik data dari sini
$queryDetail = " SELECT * FROM campuscomplaint " .
" WHERE subject = '" . $subject . "' AND comment = '" . $comment . "' ";
//echo 'QUERY DETAIL :' . $queryDetail . '<br>' ;
$resultDetail = mysql_query($queryDetail);
//echo 'RESULT DETAIL :' . $resultDetail + 0 . '<br>' ;
$detail = mysql_fetch_array($resultDetail);
//echo $detail . '<br>';
//echo 'detail subject is : ' . $detail['subject'] . '<br>';
//echo 'detail comment is : ' . $detail['comment'] . '<br>';
//echo $detail[$x] . '<br>';
?>
我希望你们都能帮助我...... becoz我是零php .......
答案 0 :(得分:2)
让我们看看我们是否可以查看代码片段中的所有内容:
将调试代码粘贴在以下行之后:
$detail = mysql_fetch_array($resultDetail);
调试代码:
echo '<pre>';
echo '$userid = '.$userid."\n";
echo '$secname = '.$secname."\n\n";
echo 'Query: '.$queryDetail."\n\n";
echo 'Query results:'."\n\n";
print_r($detail);
echo '</pre>';
die();
这应该清楚你的问题所在。
此外,您应该了解为什么需要使用mysql_real_escape_string()确保人们不会对您的网站做坏事非常重要。切勿在不至少使用此功能的情况下将用户可以更改的任何内容(例如GET或POST数据)直接发送到数据库。这会转义允许他们更改查询的字符(使其执行您不想要的操作)。要了解有关此谷歌“sql注入攻击”的更多信息
答案 1 :(得分:2)
答案 2 :(得分:0)
您似乎在$
之前忘记了secname
符号,并且您没有清理要转到查询的变量。所以,试试这样:
<?php
include "connectioncomplaint.php";
$userid = mysql_real_escape_string($_GET['userid']);
$secname = mysql_real_escape_string($_GET['secname']);
//Tarik data dari sini
$queryDetail = "SELECT * FROM campuscomplaint " .
"WHERE userid = '$userid' AND secname = '$secname'";
$resultDetail = mysql_query($queryDetail) or trigger_error(mysql_error()." in ".$queryDetail);
$detail = mysql_fetch_array($resultDetail);
?>
答案 3 :(得分:0)
您看起来没有在campuscomplaint
表上使用主键,并使用各种数据字段作为标识符。
由于您说数据插入正常,您必须查看如何检索它:
$userid = $_GET['userid'];
$secname = $_GET['secname'];
$subject = $_GET['subject'];
$comment = $_GET['comment'];
然后在SQL查询中使用它们作为WHERE子句:
$queryDetail = " SELECT * FROM campuscomplaint " .
" WHERE subject = '" . $subject . "' AND comment = '" . $comment . "' ";
首先,这很容易受到SQL注入的攻击,任何包含单引号的$ subject或$注释都会破坏查询。在mysql_error()
来电之后,您无需通过致电mysql_query()
来查看查询是否成功。
还要考虑您是从GET查询中检索这些记录“标识符”。它们的长度有限(各种浏览器不同)。如果某人的评论是10千字节的数据,但浏览器只发送1024个字符怎么办?即使数据库查询成功,它也不会返回任何数据,因为注释字段永远不会匹配。
假设查询字符串限制为100个字符(仅用于示例目的)。您生成的投诉列表如下所示:
<a href="viewcomplaint.php?userid=7&secname=12&subject=This class sucks!!!&comment=Who hired this professor? He doesn't know anything!!!!">View complaint</a>
现在请记住,我们的查询字符串限制为32个字符,因此当用户点击链接时,这将被发送到服务器:
GET http://www.example.com/viewcomplaint.php?userid=7&secname=12&subject=This class sucks!!!&comment=Who hired this professor? He doesn't know a
你将得到以下“标识符”
$userid= 7;
$secname = 12;
$subject = "This class sucks!!!";
$comment = "Who hired this professor? He doesn't know a";
注意$comment
是如何被切断的。它永远不会匹配存储在数据库中的内容,因此您的检索查询将失败。此外,请注意其中有一个引号(doesn't
)。在查询中逐字插入$注释现在会因为单引号不平衡而导致SQL语法错误。
在campuscomplaint
表格中添加auto_incrementing主键字段,如下所示:
ALTER TABLE campuscomplaint ADD id int unsigned not null auto_increment primary key;
然后您的所有投诉都可以通过一个号码识别,您可以像这样检索它们:
$id = (int)$_GET['id']; // force $id to be a number. better than just blindly using the value in a query
$query = "SELECT * FROM campuscomplaint WHERE id = $id;";
$result = mysql_query($query);
if (mysql_error()) {
// did the query fail? Say why!
die("MySQL query failed! Error cause: " . mysql_error());
}
etc....
使用数字标识符可以很容易地保持您的查询字符串非常短(除非人们注册投诉文件这么多,你会得到数百或数千位数字的数字)。