2010-03-21 6 views
1

sur mon système la plainte de l'université .. étudiant ou le personnel peut utiliser ce système de plainte. premier utilisateur de remplir le formulaire de plainte et après envoyer envoyer utilisateur peut afficher le complaint.now le problème est la plainte ne peut pas afficher ....les données ne peuvent pas afficher dans le formulaire

ce code pour la plainte de l'utilisateur (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"> 

ce code pour une vue de la plainte-userView.php (utilisation pour d'autres pages):

<?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>'; 

?> 

i hope u tout peut me aider .... becoz i zéro php .......

+0

Comment les deux extraits de code sont-ils connectés? Est-ce que vous produisez la table à l'intérieur d'une boucle 'while'? Plus d'informations conduiraient à une meilleure réponse. –

Répondre

0

Il semble que vous ayez oublié un signe $ avant secname et que vous n'effectuiez pas de nettoyage des variables allant à la requête. Alors, essayez de le faire de cette façon:

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

les données ne peuvent toujours pas afficher ... pourquoi? mais dans la base a les données ... maintenant je veux voir les données ..... – shimaTun

+0

@shimaTun vous devez vérifier vos données. Essayez-le avec simplement "SELECT * FROM campuscomplaint" au début. Est-ce qu'il affichera quelque chose? –

+0

oui l'affichage des données ... mais je veux que les nouvelles données à afficher ... exemple: mon système de plainte à l'université ... maintenant étudiant remplir le formulaire de plainte ... après la finition remplir le formulaire ... stud peut cliquer pour voir ... dans cette partie les données ne peuvent pas afficher ... (Je suis désolé mon anglais pas bon .. j'espère que vous comprenez) – shimaTun

2

Voyons voir si nous pouvons vérifier tout le snip de code:

Collez le code de débogage juste après la ligne:

$detail = mysql_fetch_array($resultDetail);

code de débogage :


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(); 

Cela devrait indiquer où votre problème est.

Vous devriez également comprendre pourquoi vous avez besoin d'utiliser mysql_real_escape_string() Il est très important de s'assurer que les gens ne font pas de mauvaises choses sur votre site web. N'envoyez jamais à une base de données tout ce qui peut être modifié par l'utilisateur (comme les données GET ou POST) sans utiliser au moins cette fonction. Cela permet d'échapper les caractères qui leur permettraient de modifier votre requête (ce qui rendrait ce que vous ne voulez pas). Pour en savoir plus sur ce google "attaque par injection de sql"

2

une chose, d'après mon expérience. Si quelque chose ne va pas avec votre requête, essayez-le sur mysql. a couru votre requête en sql, et au lieu de vos variables mettre des valeurs, de sorte que vous pouvez facilement voir quel est votre problème.

0

Il semble que vous n'utilisiez pas de clé primaire sur votre table campuscomplaint et que vous utilisiez les différents champs de données comme identificateur.

Puisque vous dites que les années insérés de données fines, vous devez voir comment vous le récupérer:

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

puis les utiliser comme votre clause WHERE dans la requête SQL:

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

Pour un, cela est vulnérable à l'injection SQL, et tout $ sujet ou $ commentaire qui contient des guillemets simples va casser la requête. Vous ne vérifiez pas si la requête a réussi en appelant mysql_error() après l'appel mysql_query(). En outre, considérez que vous récupérez ces "identificateurs" d'enregistrement à partir d'une requête GET. Ceux-ci ont une longueur limitée (différente pour les différents navigateurs). Que faire si le commentaire de quelqu'un est de 10 kilo-octets de données, mais le navigateur n'enverra que 1024 caractères? Même si la requête de la base de données réussit, elle ne renverra aucune donnée car les champs de commentaire ne correspondront jamais.

Disons que la chaîne de requête est limitée à 100 caractères (juste à titre d'exemple). Vous générez une liste de plaintes qui ressemble à ceci:

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

me souviens maintenant, notre chaîne de requête est limité à 32 caractères, alors quand l'utilisateur clique sur le lien, voici ce qui sera envoyé au serveur:

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 

et vous vous retrouverez avec les éléments suivants « identifiants »

$userid= 7; 
$secname = 12; 
$subject = "This class sucks!!!"; 
$comment = "Who hired this professor? He doesn't know a"; 

Remarquez que la $comment a été coupée. Il ne correspondra jamais à ce qui est stocké dans la base de données, de sorte que votre requête de récupération échouera. En outre, notez qu'il y a une seule citation dedans (doesn't). L'insertion de $ comment dans votre requête verbatim va maintenant provoquer une erreur de syntaxe SQL à cause du guillemet simple déséquilibré.

Ajouter un champ de clé primaire auto_incrementing à votre table campuscomplaint, comme ceci:

ALTER TABLE campuscomplaint ADD id int unsigned not null auto_increment primary key; 

et tous vos se plaint peut être identifié par un seul numéro, et vous pouvez les récupérer comme ceci:

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

L'utilisation d'un identifiant numérique gardera facilement votre chaîne de requête très courte (à moins que les personnes qui enregistrent des plaintes ne soient si nombreuses que vous ayez des nombres de centaines ou de milliers de chiffres).

Questions connexes