2013-09-08 1 views
0

Хорошо, извините за столько сообщений. Во всяком случае, я создал целый файл кода; view_topic.php, это просто сообщение на форуме. Я знаю, что это грязно, а не в mysqli, я буду переписывать код ENTIRE, как только я закончу эту страницу. В любом случае, к проблеме. Когда вы посещаете какую-либо тему, заблокированную или незажатую, она ВСЕГДА скажет: «Извините, это сообщение заблокировано». Сообщения об ошибках отсутствуют. Я весь день пытался найти ошибку в своем коде, и я перешел в Интернет для руководства. Вот весь код, скажите мне, если вам нужно что-нибудь еще:Unlocked Forum Сообщение о том, что он заблокирован?

<?php 
require_once 'core/init.php'; 
// get value of id that sent from address bar 
$id=$_GET['id']; 
$sql="SELECT * FROM `forum_question` WHERE id='$id'"; 
$result=mysql_query($sql); 
$rows=mysql_fetch_array($result); 
if (!$result) { // add this check. 
    die('Invalid query: ' . mysql_error()); 
} 
$thisql = "SELECT `locked` FROM `forum_question` WHERE `id`='$id'"; 
$mythisql = mysql_query($thisql); 
$mythisql1 = mysql_fetch_array($mythisql); 
if ($mythisql1 === false) { // add this check. 
    die('Invalid query: ' . mysql_error()); 
} 
?> 

<table width="700" align="center" class="outer"> 
<tr> 
<td><table width="100%"> 
<tr> 
<td class="back"><a href="mainforum.php">Back to Forum Home?</a></td> 
</tr> 
<tr> 
<td><center><h3> 
<?php 
    echo $rows['topic']; 
?> 
</h3></center></td> 
</tr> 

<tr> 
<td align="right"><?php 
     if ($user_data['username'] === $rows['name']) { 
     ?> 
     <form action="lock.php" method="post"> 
      Lock? <input type="checkbox" name="lock" value="1" /> 
      <input type="hidden" name="id" value="<?php echo $rows['id']; ?>" /> 
      <input type="submit" value="Submit"> 
     </form> 
     <?php 
    } ?> 
    </td> 
</tr> 
<tr> 
<td><?php echo $rows['detail']; ?></td> 
</tr> 

<tr> 
<td class="forumreply">By <a href=""><?php echo $rows['name']; ?></a>, On <?php echo $rows['datetime']; ?> 
</tr> 
</table></td> 
</tr> 
</table> 
<BR> 

<?php 
$tbl_name2="forum_answer"; // Switch to table "forum_answer" 
$sql2="SELECT * FROM $tbl_name2 WHERE question_id='$id'"; 
$result2=mysql_query($sql2); 
while($rows=mysql_fetch_array($result2)){ 
?> 

<table width="700" align="center" class="outer"> 
<tr> 
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> 
<tr><tr> 
<td><?php echo $rows['a_answer']; ?></td> 
</tr> 
<td class="forumreply">By <a href=""><?php echo $rows['a_name']; ?></a>, On <?php echo $rows['a_datetime']; ?></td> 
</tr> 
</table></td> 
</tr> 
</table><br> 

<?php 
} 


$sql3="SELECT view FROM `forum_question` WHERE id='$id'"; 
$result3=mysql_query($sql3); 
$rows=mysql_fetch_array($result3); 
$view=$rows['view']; 

// if have no counter value set counter = 1 
if(empty($view)){ 
$view=1; 
$sql4="INSERT INTO `forum_question`(view) VALUES('$view') WHERE id='$id'"; 
$result4=mysql_query($sql4); 
} 

// count more value 
$addview=$view+1; 
$sql5="update `forum_question` set view='$addview' WHERE id='$id'"; 
$result5=mysql_query($sql5); 
?> 
<?php 
if (logged_in() === true) { 
     if ($mythisql1['locked']===0) { 
     ?> 
      <BR> 
      <table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> 
      <tr> 
      <form name="form1" method="post" action="add_answer.php"> 
      <input type="hidden" value="<?php echo $user_data['username']; ?>" name="a_name"> 
      <td> 
      <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> 
      <tr> 
      <td valign="top"><strong>Reply</strong></td> 
      <td valign="top">:</td> 
      <td><textarea name="a_answer" cols="45" rows="3" id="a_answer"></textarea></td> 
      </tr> 
      <tr> 
      <td>&nbsp;</td> 
      <td><input name="id" type="hidden" value="<?php echo $id; ?>"></td> 
      <td><input type="submit" name="submit" value="Submit"> <input type="reset" name="Submit2" value="Reset"></td> 
      </tr> 
      </table> 
      </td> 
      </form> 
      </tr> 
      </table> 
     <?php 
    } else { 
     echo "Sorry, this post is locked."; 
    } 
} 
ob_end_flush(); 
?> 

Если кто-то может понять мою проблему, я буду вечно благодарен. Благодарю.

+0

Этот код имеет несколько проблем. ** SQL Injection - это один. ** Это плохой случай. Кроме того, при обновлении счетчика просмотров выполните его правильно в SQL! 'update' 'forum_question'' set view = view + 1 WHERE id = '". mysql_real_escape_string ($ id). "'" '. Это устранит условия гонки ... Кроме того, столбец представления не является строкой (я надеюсь), поэтому вам не нужны одиночные кавычки вокруг значения ... – ppeterka

+0

Спасибо, но как бы я хотел исправить SQL-инъекцию ? Я только смутно знаю, что это такое, а тем более, как это исправить. – asbxzeeko

ответ

0

Я не могу видеть вас данные, так что это предположение

использование онил ==0 не ===0

if (logged_in() === true) { 
     if ($mythisql1['locked']==0) { 
     ?> 

или если $mythisql1['locked'] является строкой

if (logged_in() === true) { 
     if ($mythisql1['locked']=='0') { 
     ?> 
+0

О, wow xD Это исправило это, спасибо <3 (По какой-то причине я думал, что попробовал) – asbxzeeko

+0

@asbxzeeko: Это легко упустить из виду. Рад помочь ! –

0

Этот код имеет несколько проблем. SQL Injection - это один. Это плохой случай. Кроме того, при обновлении счетчика просмотров выполните его правильно в SQL! update forum_question set view = view + 1 WHERE id = '". mysql_real_escape_string ($ id)."' "Это устранит условия гонки ... Кроме того, столбец представления не является строкой (надеюсь), поэтому вы не нужны одинарные кавычки вокруг значения ... -

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

  • Нет связанных вопросов^_^