2010-03-21 4 views
1

о моей системе жалоба в университете..stud или сотрудники могут использовать эту систему для подачи жалобы. первого пользователя заполнить форму жалобы и подать после отправить пользователь может просмотреть complaint.now проблема является жалоба не может отображать ....данные не могут быть отображены в форме

этот код для пользователя жалобы (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

Как связаны два фрагмента кода? Вы выводите таблицу внутри цикла while? Более подробная информация привела бы к лучшему ответу. –

ответ

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);  
?> 
+0

данные все еще не отображаются ... почему? , но в dbase есть данные ... теперь я хочу просмотреть данные ..... – shimaTun

+0

@shimaTun вы должны проверить свои данные. Попробуйте сначала просто «SELECT * FROM campuscomplaint» '. Будет ли он отображать что-нибудь? –

+0

да отображение данных ... но я хочу, чтобы новые данные отображались ... пример: моя система о жалобе в университете ... сейчас студент заполняет форму жалобы ... после завершения заполните форму ... stud может щелкнуть, чтобы посмотреть ... в этой части данные не могут отображаться ... (извините, мой английский не хорош..и надеюсь, что поймем) – shimaTun

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) прямо в базу данных, не используя эту функцию. Это ускользает от символов, которые в противном случае позволяли бы им изменять ваш запрос (заставляя его делать то, что вам не нужно). Чтобы узнать больше об этом Google "SQL инъекции атаки"

2

одна вещь, из моего опыта. если что-то не так с вашим запросом, просто попробуйте его на mysql. запустил ваш запрос в sql, и вместо ваших переменных поместите некоторые значения, чтобы вы могли легко увидеть, в чем проблема.

0

Похоже, вы не используете первичный ключ в своей таблице campuscomplaint и используете различные поля данных в качестве идентификатора.

Так вы говорите, данные в вставлено хорошо, вы должны смотреть на то, как вы его вызова:

$userid = $_GET['userid']; 
$secname = $_GET['secname']; 
$subject = $_GET['subject']; 
$comment = $_GET['comment']; 

, а затем, используя их как ваш ИНЕКЕ в запросе SQL:

$queryDetail = " SELECT * FROM campuscomplaint " . 
" WHERE subject = '" . $subject . "' AND comment = '" . $comment . "' "; 

Во-первых, это уязвимо для SQL-инъекции, и любой $ subject или $ comment, который содержит одинарные кавычки, нарушит запрос. Вы не проверяете, удалось ли выполнить запрос, вызвав 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). Вставка комментария $ в ваш запрос verbatim теперь приведет к синтаксической ошибке SQL из-за несбалансированной одиночной кавычки.

Добавить auto_incrementing поля первичного ключа для вашего campuscomplaint таблицы, например:

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.... 

Использование числового идентификатора будет легко содержать вашу строку запроса очень короткой (если только люди, регистрирующие жалобы, не запишут так много, вы получите цифры в сотни или тысячи цифр).

Смежные вопросы