2013-03-12 4 views
2

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

В настоящее время у меня есть следующая настройка скрипта для отображения продуктов в категории, все из которых извлекаются из базы данных MySQL.

http://example.com/category.php?id=2 

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

Что было бы лучшим способом изменить этот код, чтобы иметь, например, не более трех продуктов в строке? Цикл If или что-то в этом направлении? Поблагодарили бы за поддержку!

<?php 

//Create Session 
    session_start(); 

//Connect to database 
    include "conn.php"; 

//Retrieve Header 
    include "header.php"; 

//Get Category ID 
if (isset($_GET['id'])){ 
    $CategoryID = $_GET['id']; 

//QUERY collects product name, and product ID. 
    $q="SELECT ProductID, ProductName, Price,img FROM Products WHERE CategoryID=$CategoryID"; 

//QUERY collects Product Category descriptions 
    $d="SELECT `Desc` FROM ProductCategories WHERE CategoryID=$CategoryID"; 

//retrive and execute SQL query results and save into a variable 
    $result = mysqli_query($_SESSION['conn'],$q); 
    $result2 = mysqli_query($_SESSION['conn'],$d) or die(mysql_error()); 

//Retrieve Product Category Description 
    echo "<div>"; 
    while ($myResult = mysqli_fetch_row($result2)){ //Create an array 
     echo "<p>".$myResult[0]."</p>"; 
    } 
    echo "</div>"; 

//Retrieve Products in category 
    echo "<div align='center'><table border='1px' bordercolor='#000000' width='200px'><tr>"; //Define table, row and div containing each product 

    while ($row = mysqli_fetch_row($result)){ //Create an array 

     echo "<td>"; //Create table cell 
     echo "<p><img src=".$row[3]."></p>"; //product image small (250x250 Pixels) 
     echo "<p align='center'><a href='product.php?id=".$row[0]."'>".$row[1]." </a></p>"; //Product ID Link and Name 
     echo "<p align='center'>&#163; ".$row[2]."</p>"; 
     echo "</td>"; //Close table cell 
    } 
    echo "</tr></table></div>";//Close table, div and row 
    mysqli_free_result($result); 
} 

// Retireve Footer 
include "footer.php"; 
?> 

Я новичок, когда дело доходит до программирования любого типа, так что по достоинству оцените терпение/любую поддержку, которую вы могли бы мне дать. Также я знаю проблему с SQL-инъекцией и исправлю это позже.

+3

Я удалил ссылку на страницу, так как ваш код ч как некоторые недостатки SQL Injection. никогда не показывайте свой код и сайт, на котором он работает. Даже если вы хотите изменить его позже. –

+2

просто совет. Не строите мышление, я сделаю это позже с безопасностью. Это может оказаться дорогостоящим. – SchautDollar

+0

Вы можете легко получить обходное решение с помощью 'mysql_real_escape_string', хотя оно разрознено, вы можете быстро решить свой недостаток в инъекции. –

ответ

5

Ну вы бы отслеживать ваш во время итерации с прилавком, то каждый раз, когда вы нажмете $counter%3 === 0 (заменим 3 с тем, что вы хотите в строке), вы бы закрыть tr и начать новый:

$counter = 0; 
$perRow = 3; 
while ($row = mysqli_fetch_row($result)){ //Create an array 
    if($counter === 0) { 
     echo '<tr>'; 
    } else if ($counter%$perRow === 0) { 
     echo '</tr><tr>'; 
    } 
    echo "<td>"; //Create table cell 
    echo "<p><img src=".$row[3]."></p>"; //product image small (250x250 Pixels) 
    echo "<p align='center'><a href='product.php?id=".$row[0]."'>".$row[1]." </a></p>"; //Product ID Link and Name 
    echo "<p align='center'>&#163; ".$row[2]."</p>"; 
    echo "</td>"; 
    $counter++; 
} 
+0

Ahhh это, конечно, будет иметь смысл. Спасибо! –

2

Здесь вы идете

while ($row = mysqli_fetch_row($result)){ //Create an array 

    echo "<tr><td>"; //Create table cell 
    echo "<p><img src=".$row[3]."></p>"; //product image small (250x250 Pixels) 
    echo "<p align='center'><a href='product.php?id=".$row[0]."'>".$row[1]." </a></p>"; //Product ID Link and Name 
    echo "<p align='center'>&#163; ".$row[2]."</p>"; 
    echo "</td></tr>"; //Close table cell 
} 
echo "</table></div>";//Close table, div and row 

В должна быть внутри времени, так как тр есть ряд

+0

Дох, о, дорогая ... как я пропустил это, спасибо за указание на это! –

+0

, если вам нужно 4 на одной строке, вам нужно иметь счетчик, который закрывает и открывает tr каждые 4 итерации, такие как пронигидация, сообщите мне, если вам нужна помощь с ней. –

1

что вам нужно следить за т он позиционирует вас. Если вы хотите 3 колонки за строку, это будет примерно так:

$count = 1; 

echo '<table>'; 

while ($row = mysqli_fetch_row($result)) { 
    $tmp = $count % 3; //get the remainder 

    if ($tmp==1) { 
    if ($count!=1) { 
     //not the first row so close the last one 
     echo "</tr>"; 
    } 

    //start row 
    echo "<tr>"; 
    } 

    //show your <td> info 

    $count++; 
} 
echo '</tr></table>'; 
2

Вы можете сделать это по-старому с таблицами и итерационными счетчиками. Вы также можете использовать более основанный на CSS подход.

Loop свой результирующий набор, и построить внутреннюю HTML часть (строки, столбцы)

$rows = ''; 
while ($myResult = mysqli_fetch_row($result2)){ //Create an array 
    $rows .= '<div class="inner">'.$myResult[0].'</div>'; 
} 

Принятие решения о ширине внутренних колонн х и заставить их плавать влево или вправо, и сделать внешнюю ширину Div * х

<style type="text/css"> 
div.box { 
    width:900px; 
} 

div.inner { 
    float:left; 
    width:300px; 
} 
</style> 

И, наконец, эхо вашего HTML

<div class="box"><?php echo $rows; ?></div> 
Смежные вопросы