2015-07-30 3 views
1

Итак, я пытаюсь создать таблицу HTML, которая получает данные из базы данных MySQL и выводит ее пользователю. Я делаю это с PHP, к которому я очень привык, поэтому, пожалуйста, извините мой messy code!PHP повторяет данные MySQL в таблице HTML

Код, который я использую: брекеты для шторма «ваш код ужасен!»

<table class="table table-striped table-hover "> 
    <thead> 
    <tr> 
     <th>#</th> 
     <th>Name</th> 
     <th>Description</th> 
     <th>Reward</th> 
     <th>Column heading</th> 
    </tr> 
    </thead> 
    <tbody> 
    <?php 
     $con = mysql_connect("localhost", "notarealuser", 'notmypassword'); 
     for ($i = 1; $i <= 20; $i++) { 
      $items = ($mysqli->query("SELECT id FROM `items` WHERE id = $i")); 
      echo ("<tr>"); 
      echo (" 
       <td> 
       while ($db_field = mysqli_fetch_assoc($items)) { 
        print $db_field['id']; 
       }</td>"); 
      $items = ($mysqli->query("SELECT name FROM `items` WHERE id = $i")); 
      echo (" 
       <td> 
       while ($db_field = mysqli_fetch_assoc($items)) { 
        print $db_field['name']; 
       }</td>"); 
      $items = ($mysqli->query("SELECT descrip FROM `items` WHERE id = $i")); 
      echo (" 
       <td> 
       while ($db_field = mysqli_fetch_assoc($items)) { 
        print $db_field['descrip']; 
       }</td>"); 
      $items = ($mysqli->query("SELECT reward FROM `items` WHERE id = $i")); 
      echo (" 
       <td> 
       while ($db_field = mysqli_fetch_assoc($items)) { 
        print $db_field['reward']; 
       }</td>"); 
      $items = ($mysqli->query("SELECT img FROM `items` WHERE id = $i")); 
      echo (" 
       <td> 
       while ($db_field = mysqli_fetch_assoc($items)) { 
        print $db_field['img']; 
       }</td>"); 
      echo ("</tr>"); 
     } 
    ?> 
    </tbody> 
</table> 

Однако этот код не работает - он просто заставляет страницу вывода немедленного 500 Внутренняя ошибка сервера. Журналы IIS показывают его как 500: 0 - общий ISE. Есть идеи?

+0

уточните пожалуйста. Просто спрашивать «У кого-нибудь есть идеи» не поможет узнать, в чем проблема. –

+0

Похоже, вы думаете, что можете отбросить PHP-код в браузер, чтобы запустить его там. ** НЕТ НЕТ Нет ** PHP-код работает только на сервере – RiggsFolly

+0

Вы должны прочитать немного. У вас должен быть класс DB. Я бы порекомендовал вам попробовать легкую основу. Вы увидите, что все будет работать более плавно ... –

ответ

2

Вы смешиваете MySQL и MySQLi, не закрывая PHP блок кода, и вы не выбираете базу данных. Кроме того, вы не должны выполнить запрос для каждого поля

Попробуйте это:

<table class="table table-striped table-hover "> 
    <thead> 
     <tr> 
      <th>#</th> 
      <th>Name</th> 
      <th>Description</th> 
      <th>Reward</th> 
      <th>Column heading</th> 
     </tr> 
    </thead> 

    <tbody> 
     <?php 
      $con = new mysqli("host","user", "password", "database"); 

      $execItems = $con->query("SELECT id, name, descrip, reward, img FROM `items` WHERE id BETWEEN 1 AND 20 "); 

      while($infoItems = $execItems->fetch_array()){ 
       echo " 
          <tr> 
           <td>".$infoItems['id']."</td> 
           <td>".$infoItems['name']."</td> 
           <td>".$infoItems['descrip']."</td> 
           <td>".$infoItems['reward']."</td> 
           <td>".$infoItems['img']."</td> 
          </tr> 
         "; 

      } 
     ?> 
    </tbody> 
</table> 
+0

Это сработало, спасибо вам большое! Я понял, что база данных после этого, но hasn Я видел, что я не закрывал теги PHP. –

+0

Добро пожаловать ^^ – Harry

1
<table class="table table-striped table-hover"> 
     <thead> 
      <tr> 
       <th>#</th> 
       <th>Name</th> 
       <th>Description</th> 
       <th>Reward</th> 
       <th>Column heading</th> 
      </tr> 
     </thead> 
     <tbody> 
     <?php 
     $con = mysqli_connect("hostname","username",'password'); 
     $sql= "SELECT * FROM `items` WHERE id <20 "; 
     $items = (mysqli_query($sql)); 
     while ($db_field = mysqli_fetch_assoc($items)) {?> 
      <tr><td><?php echo $db_field['id'];?></td></tr> 
      <tr><td><?php echo $db_field['name'];?></td></tr> 
      <tr><td><?php echo $db_field['descrip'];?></td></tr> 
      <tr><td><?php echo $db_field['reward'];?></td></tr> 
      <tr><td><?php echo $db_field['img'];?></td></tr> 
     <?php} 
     </tbody> 
</table> 

Попробуйте эти, не тестируется

+0

Попробуйте использовать mysqli или PDO (в настоящее время код использует оба и явно не сработает) –

+1

Вы можете взять свой собственный совет. Вы используете 'mysql_' и' mysqli_', которые также не будут работать – RiggsFolly

+0

Отредактировано код – Jpec

1

Где вопрос?

С этим кодом связано множество проблем. Во-первых, вы путаетесь между PHP и HTML. Код между PHP. Он выполняется на сервере, у вас могут быть петли, переменные и назначения. И если вам нужен HTML, вы используете «echo».

Код вне HTML - он отправляется в браузер как есть.

Во-вторых - то, что вы, кажется, делаете, запрашивает каждое поле отдельно. Это не то, как вы работаете с SQL.

Вот более или менее то, что вам нужно сделать:

//Query all rows from 1 to 20: 
$items = $mysqli->query("SELECT id,name,descrip,reward,img FROM `items` WHERE id between 1 and 20");  
//Go through rows  
while ($row = mysqli_fetch_assoc($items)) 
{ 
    echo "<tr><td>{$db_field['id']}</td>"; 
    //echo the rest of the fields the same way 

}); 
+0

К сожалению, этот код по-прежнему дает мне 500 ISE :( –

0

я собираюсь идти вперед и предположить, что код не работает, и это потому, что есть несколько основных ошибок , Я настоятельно рекомендую делать некоторые трудные чтения по теме PHP, тем более, что вы используете базы данных, которые при доступе с небезопасным кодом могут представлять серьезные угрозы безопасности.

Во-первых, вы настроили свое соединение с помощью процедурной функции mysql_connect, но только несколько строк вниз вы переключились на объектную ориентацию, попробовав вызвать метод mysqli :: query на не-объект, поскольку он никогда не создавался при подключении.

http://php.net/manual/en/mysqli.construct.php

Во-вторых, PHP эхо() не требует скобок. PHP иногда описывает его как функцию, но это языковая конструкция, и круглые скобки вызывают проблемы, если вы пытаетесь проанализировать несколько параметров.

http://php.net/manual/en/function.echo.php

В-третьих, вы не можете просто переключиться с HTML и PHP, и наоборот с информирования сервера/браузера. Если вы хотите сделать это, вам нужно либо объединить ...

echo "<td>".while($db_filed = mysqli_fetch_assoc($item)) { 
    print $db_field['id']; 
}."</td>; 

Или лучше (на мой взгляд, это выглядит чище)

<td> 
    <?php 
    while($db_filed = mysqli_fetch_assoc($item)) { 
     print $db_field['id']; 
    } 
    ?> 
</td> 

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

Что-то еще, что может не быть проблемой сейчас, но может перерасти в один, заключается в том, что вы использовали константу для цикла FOR. Если вам нужно когда-либо вытащить более 20 строк из таблицы, вам придется вручную увеличить эту цифру, и если в таблице будет меньше 20 строк, вы получите сообщение об ошибке, потому что цикл будет пытаться получить доступ к строкам таблицы, которые не существует.

Я не эксперт по PHP, поэтому некоторые из моих терминов могут быть неверными, но, надеюсь, какие знания у меня будут полезны. Опять же, я настоятельно рекомендую получить хорошее знание языка перед его использованием.

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