2012-06-05 3 views
0

im работает с этим скриптом php и не совсем получает результат, который я хочу. в момент его дает мне этот выходотображение результатов поиска php в таблице html

подводное бак

микрофон

0,00 450,00 5,00

2012-06-04 18:50:22

подводное бак

liam

80,00 350,00 2,50

2012-06-04 19:00:09

Показано 3 результаты

подводное бак

Josh

410,00 0,00 5,00

2012-06-04 19:00:09

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

<?php 
    $host = "localhost"; 
    $user = "root"; 
    $pass = null; 

    // ======================================== 
    $dbhost = @mysql_connect($host, $user, $pass) or die("Unable to connect to server"); 

    @mysql_select_db("divebay") or die("Unable to select database"); 

    $var = "scuba"; 
    $query = trim($var); 

    if(!isset($query)){ 
     echo "Your search was invalid"; 
     exit; 
    } //line 18 

    $sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'"; 

    $result = mysql_query($sql); 
    $numrows = mysql_num_rows($result); 
    mysql_close($dbhost); 

    if($numrows == 0){ 
     echo "Sorry, your search did not return any results"; 
    } 

    $i = 0; 

    while($i < $numrows){ 
     $row = mysql_fetch_array($result); 

     $ID = $row['ID']; 
     $name = $row['name']; 
     $owner = $row['owner']; 
     $holder = $row['holder']; 
     $start = $row['sprice']; 
     $current = $row['cprice']; 
     $instant = $row['iprice']; 
     $inc = $row['incprice']; 
     $image = $row['img']; 
     $time = $row['stime']; 
     $length = $row['duration']; 

     echo " 
      <?xml version = '1.0' encoding = 'utf-8'?> 
      <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd'> 
      <html xmlns='http://www.w3.org/1999/xhtml'> 
      <head> 
       <title>searchdbresults</title> 
      </head> 

      <body> 
       <table style='width = 800px;'> 
        <tr style ='height = 200px;'> 
         <td style ='width = 200px;'></td> 

         <td style ='width = 300px;'> 
          <div style ='180px'> $name </div> 
          <div> $owner </div> 
         </td> 

         <td style='width =200px'> 
          <div style='height = 100px'> $current </div> 
          <div style='height = 50px'> $instant </div> 
          <div> $inc </div> 
         </td> 

         <td> $time </td> 
        </tr> 
     "; 

     $i++; 
    } 

    echo " 
       <tr> Displaying $numrows results</tr> 
      </table> 
     </body> 
     </html> 
    "; 
?> 
+0

когда вы используете встроенный css-стиль, вы должны использовать двойные кавычки!

HamZa

+1

Очевидным является то, что он использует = вместо: внутри атрибута style. – Panagiotis

+1

@ LiamWarnes Серьезно, я думаю, вы должны пойти и следовать некоторым учебникам, чтобы получить основы html/css/php, код содержит несколько (основных и больших) ошибок ... – HamZa

ответ

1

Я не могу комментировать, но в вашем коде есть несколько проблем.

первый стиль должен двойные кавычки

<div style="width:100%;"> 

, например.

второй: должен быть тд внутри тр для этой строки: Отображение $ NumRows результаты

и последний один я вижу: у вас есть это:

<?xml version = '1.0' encoding = 'utf-8'?> 
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd'> 
<html xmlns='http://www.w3.org/1999/xhtml'> 

<head> 
<title>searchdbresults</title> 
</head> 
<body> 

внутри время цикла, так его несколько раз на вашей странице, и он не должен

У вас также есть открытие таблицы в вашем цикле while, но не закрытие. Так что он открывается несколько раз, но открывается только один раз.

редактировать: Вы также должны добавить защиту в ваш запрос

+0

cheers bud, помог кучу – Bundy

0

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

<tr> Displaying $numrows results</tr> 

в нижней части вашей страницы, затем выньте его из таблицы.

0

Я бы предложил немного упростить свой стол, возможно, полностью вывести «Отображать результаты $ numrows» из таблицы.

Линия '<tr> Отображается результат $ numrows </tr >' Неверный HTML. <tr> означает «Определить новую строку таблицы», но для ее содержимого требуется <td>. Поскольку в большинстве строк вашей таблицы содержится несколько элементов TD, в то время как эта строка содержит только одну часть информации, вам нужно будет указать эту ячейку таблицы span multiple columns.

Хорошим способом отладки такого рода является передача сгенерированного HTML до http://validator.w3.org/ или замена переменных $ выборочными данными и передача кода шаблона в валидатор. Обычно это немного расстраивает (так как это будет заставлять вас быть точным относительно версии HTML, которую вы хотите использовать, и т. Д.), Но это хороший способ отслеживания проблем. Если вы кормите следующие HTML фрагмент в валидатор W3, это даст вам некоторую полезную информацию:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head><title>A</title></head> 
<body> 

<table><tr><td>aaa</td><td>bbb</td></tr> 
<tr><td>cccc</td><td>dddd</td></tr> 
<tr>Test</tr> 
</table> 
</body> 
</html> 

валидатор говорит вам, что: Строка 7, колонка 5: символьные данные здесь не допускается

<tr>Test</tr> 

Иными словами, элемент TR не должен содержать непосредственно текст.

Он также говорит, что: Строка 7, колонка 13: закрывающий тег для «TR», который не закончил

<tr>Test</tr> 

«Скорее всего, вы вложенные теги и закрыл их в неправильном порядке ... Еще возможно, что вы использовали элемент, для которого требуется дочерний элемент, который вы не указали. Следовательно, родительский элемент «не завершен», но не завершен. Например, в HTML элемент < > должен содержать элемент < >, списки требуют соответствующих элементов списка (<ul> и <ol> требуют <li> ...) и так далее. "

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

1

Ваш скрипт генерирует «грязный» HTML. Из того, что я вижу, ваша сгенерированная HTML-страница будет иметь (в текущем примере) 3 определения DOCTYPE, 3 head, а также 3 открытия table тегов и только одно закрытие /table. А также вам не нужно echo каждый HTML сущности, вы можете использовать простой HTML в PHP файлов Попробуйте что-то вроде этого:

<?xml version = '1.0' encoding = 'utf-8'?> 
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> 
<html xmlns='http://www.w3.org/1999/xhtml'> 

<head> 
<title>searchdbresults</title> 
</head> 
<body> 
<?php 

$host = "localhost"; 
$user = "root"; 
$pass = null; 

// ======================================== 
$dbhost = @mysql_connect($host, $user, $pass) or die("Unable to connect to server"); 

@mysql_select_db("divebay") or die("Unable to select database"); 

$var = "scuba"; 
$query = trim($var); 

if(!isset($query)){ 
    echo "Your search was invalid"; 
    exit; 
} //line 18 

$sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'"; 

$result = mysql_query($sql); 
$numrows = mysql_num_rows($result); 
mysql_close($dbhost); 

if($numrows == 0){ 
    echo "Sorry, your search did not return any results"; 
} 
else{ 
?> 
<table style='width = 800px;'> 
<?php 
    $i = 0; 

    while($i < $numrows){ 
    $row = mysql_fetch_array($result); 

    $ID = $row['ID']; 
    $name = $row['name']; 
    $owner = $row['owner']; 
    $holder = $row['holder']; 
    $start = $row['sprice']; 
    $current = $row['cprice']; 
    $instant = $row['iprice']; 
    $inc = $row['incprice']; 
    $image = $row['img']; 
    $time = $row['stime']; 
    $length = $row['duration']; 
?> 
<tr style ="height: 200px;"> 
<td style ="width: 200px;"></td> 
<td style ="width: 300px;"> 
    <div style ="width: 180px"><?php echo $name; ?></div> 
    <div><?php echo $owner; ?></div> 
</td> 
<td style="width: 200px;"> 
    <div style="height: 100px;"><?php echo $current; ?></div> 
    <div style="height: 50px;"><?php echo $instant; ?></div> 
    <div><?php echo $inc; ?></div> 
</td> 
<td><?php echo $time; ?></td> 
</tr> 
<?php 
     i++; 
    } //end of while 
} //end of else 
?> 
<tr> 
    <td colspan="4">Displaying <?php echo $numrows; ?> results</td> 
</tr> 
</table> 
</html> 

А также рассмотреть вопрос о предотвращающий SQL Injection также: http://bobby-tables.com/

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