2014-02-07 3 views
1

Итак, я пытаюсь изучить php и решил сделать один сайт, где я добавляю изображения, сохраняю их в папке и id, name, type, path в mysql. Затем покажите на странице. Пока у меня есть форма загрузки, и я могу загружать и сохранять изображения. Также я успешно показываю их на странице.Кадры не работали

Теперь я пытаюсь сделать такие категории, как - Природа, Смешные ... и т. Д. Поэтому я добавил одно поле в моей основной таблице -> img_category. Также я пропустил второй стол - кошки с полями cat_id и cat_name. Используя это, чтобы показать категории на странице:

  <?php 
     $q = mysqli_query($con,"select * from cats"); 
     while ($res = mysqli_fetch_assoc($q)) 
     { 
      echo '<a href="pic.php?cat_id='. $res['cat_id'] .'">'.$res['cat_name'].'<br/>'; 
     } 

Так что теперь, как я могу сделать, когда я нажимаю на какой-то категории ссылку для загрузки изображений только из этой категории? мне удалось сделать что-то вроде этого, но это не работает, как ожидается

<?php 
     $q = mysqli_query($con,"select * from cats"); 
     while ($res = mysqli_fetch_assoc($q)) 
     { 
      echo '<a href="pic.php?cat_id='. $res['cat_id'] .'">'.$res['cat_name'].'<br/>'; 
     } 

     ?> 
     <hr> 
     <?php 
     $cat_id = $_GET['cat_id']; 
     $query = "SELECT * FROM images JOIN cats ON images.img_category = cats.cat_id WHERE cats.cat_id = '$cat_id'"; 
     $result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con)); 

     $line = mysqli_fetch_array($result, MYSQL_BOTH); 
     if (!$line) echo ''; 
     $previd = -1; 
     $currid = $line[0]; 
     if (isset($_GET['id'])) { 
      do { 
       $currid = $line[0]; 
       if ($currid == $_GET['id']) break; 
       $previd = $currid; 
       $line = mysqli_fetch_array($result, MYSQL_BOTH); 
      } while ($line); 
     } 

     if ($line) { 
      echo "<div id=\"picture\">"; 

      echo "<img style=\"width:100%;margin:0 auto;\" src=\"upload/".$line['name']."\" /></a><br />"; 
      echo "<div id=\"caption\">".$line['caption']."</div><br />"; 
     } 
     else echo "There is no images!\n"; 

     if ($previd > -1) echo '<a href="pic.php?cat_id='.$previd.'" class="prev_pic"><span>Prev</span></a>'; 
     echo str_repeat('&nbsp;', 5); 

     $line = mysqli_fetch_array($result, MYSQL_BOTH); 

     $query = "select * from images order by RAND() LIMIT 1"; 
     $result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con)); 
     while ($row = mysqli_fetch_array($result, MYSQL_BOTH)){ 
      echo '<a href="pic.php?cat_id='.$row['id'].'"class="random">Random</a>'; 
     } 
     echo str_repeat('&nbsp;', 5); 
     if ($line) echo '<a href="pic.php?cat_id='.$line[0].'" class="next_pic"><span>Next</span> </a><br /><br />'; 

     echo "</div>"; 

     ?> 

Результаты:

Когда есть изображение в категории предъявляется, но и если я нажимаю на «Next 'Я получаю то же изображение. Если в кадре нет изображения, я получаю все эхо-сигналы, такие как ссылка whit ID последней категории для экзамена: нет изображения, подобного ссылке, и если я нажму, я получу идентификатор последней категории. В моем случае у меня есть 8 категорий, поэтому ID = 8. Любая помощь оценена! Thank в

EDIT: Ok эта строка:

echo '<a href="pic.php?cat_id='.$line[0].'" class="next_pic"><span>Следваща</span> </a> 

Где pic.php cat_id = ... я думаю, что это неправильно. Здесь я должен взять следующий идентификатор изображения, а не следующий идентификатор категории. Но как изменить его для изображения? Если я сделаю это pic.php? Id = ... Я получаю пустую страницу. Я этого не понимаю. Я знаю, что это грязный код, но я лучше всего это сделаю.

EDIT 2: Я сделал что-то вроде этого. Теперь вы можете помочь мне сделать запрос для следующего изображения, потому что теперь не получилось следующего изображения и остался прежним.

$cat_id = $_GET['cat_id']; 
     $cat_id = mysqli_real_escape_string($con, $cat_id); 
     $query = "SELECT * FROM images JOIN cats ON images.img_category = cats.cat_id WHERE cats.cat_id = '$cat_id'"; 
     $result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con)); 
$prevSQL = mysqli_query($con,"SELECT cat_id FROM cats WHERE cat_id < $cat_id ORDER BY cat_id DESC LIMIT 1") or die (mysqli_error($con)); 
     $nextSQL = mysqli_query($con, "SELECT cat_id FROM cats WHERE cat_id > $cat_id ORDER BY cat_id ASC LIMIT 1") or die (mysqli_error($con)); 
     $prevobj=mysqli_fetch_object($prevSQL); 
     $nextobj=mysqli_fetch_object($nextSQL); 
     $pc = mysqli_fetch_object(mysqli_query($con, "SELECT COUNT(cat_id) as pid FROM cats WHERE cat_id<$cat_id ORDER BY cat_id DESC")) or die (mysqli_error($con)); 
     $nc = mysqli_fetch_object(mysqli_query($con, "SELECT COUNT(cat_id) as nid FROM cats WHERE cat_id>$cat_id ORDER BY cat_id ASC")) or die (mysqli_error($con)); 
     $prev=$pc->pid>0 ? '<a href="pic.php?cat_id='.$cat_id.'&id='.$prevobj->cat_id.'">Prev</a> |' : ''; 
     $next=$nc->nid>0 ? '<a href="pic.php?cat_id='.$cat_id.'&id='.$nextobj->cat_id.'">Next</a>' : ''; 
     $row = mysqli_fetch_array($result); 
     echo "<div id=\"picture\">"; 
     echo "<img src=\"upload/" . $row['name'] . "\" alt=\"\" /><br />"; 
     echo $row['caption'] . "<br />"; 
     echo "</p>"; 
     echo $prev; 
     echo $next; 
+0

SQL Injection http://en.wikipedia.org/wiki/SQL_injection – Samuel

+0

Я пока не знаю, как сделать это .. – Gordon

+0

Да вы делаете. Вы уже создали хороший код для инъекций в своем коде. – Samuel

ответ

1

Попробуйте

<?php 
     if(isset($_GET['cat_id'])){ 
      $cat_id = $_GET['cat_id']; 
      $query = "SELECT * FROM images WHERE img_category = '$cat_id'"; 
      $result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con)); 

      $line = mysqli_fetch_array($result, MYSQL_BOTH); 
      if (!$line) echo ''; 
      $previd = -1; 
      $currid = $line[0]; 
      if (isset($_GET['id'])) { 
       $previous_ids = array(); 
       do { 
        $previous_ids[] = $line[0]; 
        $currid = $line[0]; 
        if ($currid == $_GET['id']) break; 
        $previd = end($previous_ids); 
        $line = mysqli_fetch_array($result, MYSQL_BOTH); 
       } while ($line); 
      } 

      if ($line) { 
       echo "<div id=\"picture\">"; 

       echo "<img style=\"width:100%;margin:0 auto;\" src=\"upload/".$line['name']."\" /><br />\r"; 
       echo "<div id=\"caption\">".$line['caption']."</div><br />"; 
      } 
      else echo "There is no images!\n"; 

      if ($previd > -1) 
       echo '<a href="pic.php?cat_id='.$cat_id.'&amp;id='.$previd.'" class="prev_pic"><span>Prev</span></a>'; 
      echo str_repeat('&nbsp;', 5); 

      $line = mysqli_fetch_array($result, MYSQL_BOTH); 

      $query = "select * from images WHERE img_category = '$cat_id' order by RAND() LIMIT 1"; 
      $result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con)); 
      while ($row = mysqli_fetch_array($result, MYSQL_BOTH)){ 
       echo '<a href="pic.php?cat_id='.$cat_id.'&amp;id='.$row['id'].'"class="random">Random</a>'; 
      } 
      echo str_repeat('&nbsp;', 5); 
      if ($line) echo '<a href="pic.php?cat_id='.$cat_id.'&amp;id='.$line[0].'" class="next_pic"><span>Next</span> </a><br /><br />'; 

      echo "</div>\r"; 
     } 
     ?> 
+0

Это действительно работает очень хорошо. Благодаря! – Gordon

2

Как сказано, я предполагаю, что ошибка с линией:

echo '<a href="pic.php?cat_id='.$line[0].'" class="next_pic"><span>Следваща</span> </a> 

Я думаю, что это должно быть:

echo '<a href="pic.php?cat_id='.$line[0].'&id='.$next_picture_id.'" class="next_pic"><span>Следваща</span> </a> 

EDIT: Ваш код должен выглядеть :

<?php 
    $q = mysqli_query($con,"select * from cats"); 
    while ($res = mysqli_fetch_assoc($q)) 
    { 
     echo '<a href="pic.php?cat_id='. $res['cat_id'] .'">'.$res['cat_name'].'<br/>'; 
    } 

    ?> 
    <hr> 
    <?php 
    $cat_id = $_GET['cat_id']; 
    $query = "SELECT * FROM images JOIN cats ON images.img_category = cats.cat_id WHERE cats.cat_id = '$cat_id'"; 
    $result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con)); 

    $line = mysqli_fetch_array($result, MYSQL_BOTH); 
    if (!$line) echo ''; 
    $previd = -1; 
    $currid = $line[0]; 
    if (isset($_GET['id'])) { 
     do { 
      $currid = $line[0]; 
      if ($currid == $_GET['id']) break; 
      $previd = $currid; 
      $line = mysqli_fetch_array($result, MYSQL_BOTH); 
     } while ($line); 
    } 

    if ($line) { 
     echo "<div id=\"picture\">"; 

     echo "<img style=\"width:100%;margin:0 auto;\" src=\"upload/".$line['name']."\" /></a><br />"; 
     echo "<div id=\"caption\">".$line['caption']."</div><br />"; 
    } 
    else echo "There is no images!\n"; 

    if ($previd > -1) echo '<a href="pic.php?cat_id='.$previd.'" class="prev_pic"><span>Prev</span></a>'; 
    echo str_repeat('&nbsp;', 5); 

    $line = mysqli_fetch_array($result, MYSQL_BOTH); 

    $query = "select * from images order by RAND() LIMIT 1"; 
    $result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con)); 
    while ($row = mysqli_fetch_array($result, MYSQL_BOTH)){ 
     echo '<a href="pic.php?cat_id='.$row['id'].'"class="random">Random</a>'; 
    } 
    echo str_repeat('&nbsp;', 5); 
    if ($line) echo '<a href="pic.php?cat_id='.$line[0].'&id='.$line[0].'" class="next_pic"><span>Next</span> </a><br /><br />'; 

    echo "</div>"; 

    ?> 
+0

Я получаю 'Неопределенная переменная: next_picture_id' – Gordon

+0

Я вижу ... это происходит там, где нет идентификатора ... Я собираюсь отредактировать ответ –

+0

. Попробуйте сейчас ... Я заменил следующую ссылку. –

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