1

こんにちは私は Php でオンライン ショッピングのプロジェクトに取り組んでいます。ユーザーがログインしている場合、カートにアイテムを追加できるという条件でカートを設計しました。それ以外の場合、ログインページにリダイレクトされますが、配列を使用して構文に参加しているため、必要な出力を取得できません.私のコードは次のとおりです。

<?php
require_once('inc/mysql.class.php');
// Include database connection
require_once('inc/global.inc.php');
// Include functions
require_once('inc/functions.inc.php');
session_start();
$sql = 'SELECT * FROM products ORDER BY id';
$result = $db->query($sql);
$output[] = '<ul>';
while ($row = $result->fetch()) {
$output[] = '<li>"'.$row['title'].'" by </br> '.$row['author'].': &pound;'.$row['price'].'<img src="http://localhost/myproject/images/'.$row['image'].'" width="100" height="100" /><br />
.if (isset($_SESSION['username'])) {. 
<a href="cart.php?action=add&id='.$row['id'].'">Add to cart</a></li>'
.}
else {.
'<a href="login.php">Add to cart</a></li>'
};
//$output[] = '</ul>';
echo join('',$output);
?>
4

8 に答える 8

2

試す

<?php
session_start();
$sql = 'SELECT * FROM products ORDER BY id';
$result = $db->query($sql);

$output[] = '<ul>';

while ($row = $result->fetch())
{
    if (isset($_SESSION['username']))
    { 
        $url = 'cart.php?action=add&id='.$row['id'];
    }
    else {
        $url = 'login.php';
    }

    $output[] = '<li>"'.
        $row['title'].'" by </br>'.
        $row['author'].
        ': &pound;'.
        $row['price'].
        '<img src="http://localhost/myproject/images/'.$row['image'].
        '" width="100" height="100" /><br /><a href="'.$url.'">Add to cart</a></li>';
    $output[] = '</ul>';
}
echo join('',$output);
?>
于 2013-10-10T09:44:16.997 に答える
1

出力配列を作成する必要はありません。文字列を作成してそれに追加するだけです。

皮切りに

$output = '';

そして交換

$output[] =

$output .=

そして、値を出力するecho $output;代わりに行うことができます。echo join('',$output);

于 2013-10-10T09:43:23.513 に答える
1

文字列リテラルの末尾に ' がなく、三項演算子が使用されていないという古典的な問題:

$output[] = '<li>"'.$row['title'].'" by </br> '.$row['author'].': &pound;'.$row['price'].'<img src="http://localhost/myproject/images/'.$row['image'].'" width="100" height="100" /><br />'
.  (isset($_SESSION['username']) ? 
      '<a href="cart.php?action=add&id='.$row['id'].'">Add to cart</a></li>'
      : '<a href="login.php">Add to cart</a></li>'); // don't forget **;**
}

これを配列にする必要がない場合は、これを @GarethLuckett が提案したソリューションとペアにすることをお勧めします。文字列を連結するだけで、配列を結合する必要はありません。

于 2013-10-10T09:44:04.547 に答える
1

while ループを閉じていないようです。次のようにします。

<?php
session_start();
$sql = 'SELECT * FROM products ORDER BY id';
$result = $db->query($sql);
$output[] = '<ul>';
while ($row = $result->fetch()) {
    $str = '<li>"'.$row['title'].'" by </br> '.$row['author'].': pound;'.$row['price'].
    '<img   src=\"http://localhost/myproject/images/'.$row['image'].'\" width="100" 
    height="100" /><br />';
    if (isset($_SESSION['username'])) {
        $str .= '<a href="cart.php?action=add&id='.$row['id'].'">Add to cart</a></li>';
    }
    else {
        $str .= '<a href="login.php">Add to cart</a></li>';
    };
    $output[] = $str;
}
$output[] = '</ul>';
echo join('', $output);
?>
于 2013-10-10T09:54:47.893 に答える
1

試す:

<?php
require_once('inc/mysql.class.php');
// Include database connection
require_once('inc/global.inc.php');
// Include functions
require_once('inc/functions.inc.php');
session_start();
$sql = 'SELECT * FROM products ORDER BY id';
$result = $db->query($sql);

$output = array();

while ($row = $result->fetch()) {
    $data = '<li>'.$row['title'].' by </br> '.$row['author'].': &pound;'.$row['price'].'<img src="http://localhost/myproject/images/'.$row['image'].'" width="100" height="100" /><br />';
    if (isset($_SESSION['username'])) {
        $data .= '<a href="cart.php?action=add&id='.$row['id'].'">Add to cart</a></li>';
    } else {
        $data .='<a href="login.php">Add to cart</a></li>';
    }
    $output[] = $data;
}
//$output[] = '</ul>';
$output_string =  join('',$output);
echo "<ul>".$output_string."</ul>";
?>
于 2013-10-10T09:55:01.827 に答える