2016-10-02 6 views
0

変数にいくつかのHTMLを入れて、1行に4回ループしたいと思います。私は最初にいくつかの質問をしています。 1つは、行数を取得し、変数に格納します。 2番目に、私は表示する必要がある関連データを取得しようとしています。PHPで1行に4つの項目を追加する

$results = $dbCon->query("SELECT * FROM table WHERE status = '1' ORDER BY id DESC LIMIT $start, $limit"); 
$total = mysqli_num_rows($results); 
$res = $dbCon->query($results); 
$data = $res->fetch_assoc(); 
$link = $data['link']; 
$title = $data['title']; 
$image = $data['image']; 
$imgAlt = $data['imgAlt']; 

第3に、私は変数に表示したいものを保存します。表示する予定のHTMLは次のようになります

$html = printf("<div style=\"text-align:center; max-width:270px; white-space:normal; word-wrap:break-word; border-left:1em solid transparent; border-right:1em solid transparent; text-overflow: ellipsis; float:left;\"> 
     <a href=\"%s\"> 
      <img style=\"width:270px; height:232px; margin-bottom:40px; border-radius:45px; -moz-border-radius:45px; -webkit-border-radius:45px; box-shadow:0px 0px 3px #fff; -moz-box-shadow:0px 0px 3px #fff; -webkit-box-shadow:0px 0px 3px #fff;\" src=\"images/recentshoots/%s\" alt=\"%s\" /> 
      <p>%s</p> <br /></a> 
     </div>", $link, $image, $imgAlt, $title); 

次に、1ページあたり20個のアイテムを1行につき4つのアイテムにループしたいと思います。これは私が何か問題を抱えているところです。私の問題は、$タイトルの文字数が常に異なっているため、レイアウトが分割されてしまうことです。最初は、cssとphpを使ってstr_pad()を行う単純な方法を試しましたが、空のスペースではうまく動作しないようです。私はいつも私の列を歪める他のものよりも背の高いいくつかの容器を得る。だから私はこのプラットフォームでいくつかの研究をして、他の誰かの例の後でモデル化しました。

私が見た例には情報がありませんので、私は自分のものを変更する方法を理解する必要があるため、私は何か問題があります。私はそれがforeachとwhileループで行われているのを見ました。誰かがこれをより良く理解する方法を見つけるのを助けることができますか?

取得したデータをループして、1行あたり4つしか20項目のページに存在しないようにするにはどうすればよいですか?手伝ってくれてどうもありがとう。私はこのような何かで始まった

$startingPoint = 1; 
echo "<div class=\"row\">"; 
foreach($startingPoint < 4){ //this foreach is not even starting the right way, how can I fix this? 
    echo $html; 
} 

私はforeachを使うことができますか?またはwhileループ?何か?

どれが最善の解決策で、最も速く効率的な方法ですか?コードが短いほど良い。

答えて

0

あなたはこれを試すことができますコード。フルページネーションとビュー:

例:

<?php 
    //get page id for pagination and limit query 
    $limit = 4; 
    if(isset($_GET["page"])) 
     $page = intval($_GET["page"]); 
    else 
     $page = 1; 

    $total = $limit * $page; 
    $start = $total - $limit; 

    //GEt data from database. I have used mysqli for testing purpose. 
    $conn=mysqli_connect("localhost","root","","dbname"); 
    $result = mysqli_query($conn, "SELECT * FROM table WHERE status = '1' ORDER BY id DESC LIMIT $start, $limit"); 
    $total = mysqli_num_rows($result); 
?> 


    <!--Your html code what you want--> 
    <table> 
     <tr> 
      <th>Title</th> 
      <th>Image</th> 
      <th>Link</th> 
     </tr> 
     <!--loop inside html--> 
     <?php while($data = mysqli_fetch_assoc($result)) { ?> 
      <tr> 
       <td><?php echo $data['title']; ?></td> 
       <td><img src="<?php echo $data['image']; ?>" alt="<?php echo $data['imgAlt']; ?>"> </td> 

       <td><a href="<?php echo $data['link']; ?>">Link</a></td> 
      </tr> 
     <?php } ?> 
    </table> 

<?php 
    /**======== Pagination Url generate=============*/ 
    $totalPages = ceil($total/$limit); 
    if($page <=1){ 
     " <span style='font-weight: bold;'> < Prev </span> "; 
    }else{ 
     $j = $page - 1; 
     echo " <a href='index.php?page=$j'>Prev</a> "; 
    } 

    for($i=1; $i <= $totalPages; $i++){ 
     if($i<>$page){ 
      echo " <a href='index.php?page=$i'>$i</a> "; 
     }else{ 
      echo " <span style='font-weight: bold;'>$i</span> "; 
     } 
    } 
    if($page == $totalPages){ 
     echo " <span style='font-weight: bold;'>Next ></span> "; 
    }else{ 
     $j = $page + 1; 
     echo " <a href='index.php?page=$j'>Next</a></span> "; 
    } 
?> 
+0

私はあなたがここにいるものが好きです、私はちょうどいくつかの質問があります。何らかのメッセンジャーで話す方法はありますか?私のページネーションクラスは、呼び出されたときにこのように見えます。 '$ start = $ pagination-> prePagination();'私はSQLクエリのすぐ上に追加します。ページの制限は$ limitで設定されます。私の助けとなるあなたの事例の提案や修正?あなたのページ区切りの例は素晴らしいですが、私がすでに設定しているものは、維持して再利用するのは簡単です。あなたの時間をありがとう。 –

+0

また、「

' and the closing "
」というHTMLを追加するのに最適な場所はどこですか?それは$ html変数に入れるのか、while文の前に入れるのですか?私は多くの例を見て、バージョンが正しいか、より効率的です –

+1

私の喜び@RookieRecruits。あなたはPHPを許可したいと思っても構いませんが、混乱しないように心配しないでください あなたは '

'あなたのカスタムページ分割関数を使うことができますが、この関数は常に私が提供したこのタイプのコードを含んでいます。 – AHJeebon

2

配列データ型にはForeachループが使用され、ブール値などにはwhileループを使用できます。

あなたが探しているのはforループです。これはカウンタを設定することを可能にし、ループが実行されるたびにカウンタに加算されます。式が満たされると、ループを終了します。

for($i = 1; $i == 4; $i++) 
{ 
    echo 'Loop ' . $i . ': This will loop 4 times'; 
} 

しかし、あなたはこのスニペットを使用してforeachのを修正することができます:

$startingPoint = [1,2,3,4]; 
foreach($startingPoint as $start) 
{ 
    echo $html; 
} 

を配列内の4つの項目があるので、ループは4回を継続していきます。

あなたのSQLは、このように多次元になるために$データを作成する複数のデータ・ローを返して、あなたのループは、従って、そのが書かれてどのように動作しない場合があり、これを試みることができる

for($i = 1; $i >= $limit; $i++) 
{ 
    print_f(<!-- html here -->, $data[$i]['column']); 
} 
+0

のindex.phpは、HTML "行" クラスは、このループまたは外部の内側にあるべきか?タグを開いて閉じるにはどこが最適ですか?今は、 "printf"の外にあります。それは "printf"の中にあるべきですか?ご協力いただきありがとうございます。 –

+0

さて、各行がHTMLの各レイヤーを分けていると仮定すると、htmlを印刷する前と後で、ループ内に入るので、$ htmlのデリミターになるはずです。 @RookieRecruits – KDOT

+0

私はあなたを正しく理解していれば、行は合計20または5行に達するまで、次の4からhtmlの最初の4回の反復を分離する必要があります。 –

関連する問題