• ベストアンサー

サンプルソースのコロンの意味

PHP初心者です。 質問させてください。 某書籍に以下のようなソースが記載されていました。 <?php if ($link_to_next): ?> <a href="?page=<?php echo ($current_page + 1); ?>">[前へ]</a> <?php endif; ?> 内容は理解できます。(boolean変数$link_to_nextがtrueならば、テキスト<a href...>...</a>を表示する) ただ、"if ($link_to_next):" のコンマ(:)はなぜつける必要があるのでしょうか? PHPのif文が良くわかっていないからだと思うのですが、このソースが書いてあった書籍を見ても良くわかりませんでした。 初歩的な質問なのかもしれませんが、良ければ教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#111181
noname#111181
回答No.1

<?php if ($link_to_next): ?> <a href="?page=<?php echo ($current_page + 1); ?>">[前へ]</a> <?php endif; ?> それは、if文の例外的な使い方です。 1行目のif文 <?php if ($link_to_next): ?> において $link_to_nextが真ならば、3行目のendif文 <?php endif; ?> までの間(質問の例では2行目になる)を実行せよ、という意味になります。 下記を参考にしてください。 http://jp2.php.net/manual/ja/control-structures.alternative-syntax.php 蛇足ですが、この命令は読みにくいので、私だったら以下のように書きます。 ----------- if ($link_to_next) { $pg = $current_page + 1; echo "<a href=\"?page={$page}>\">[前へ]</a>"; }

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.4

構文、機能については挙がっている通りですが、 使いどころとしては、テンプレート化に有用です。 <?php } ?> をたくさん書くよりはたぶん視認性があがります。 ZendFrameworkなんかはこう書いてます。 http://framework.zend.com/manual/ja/zend.view.introduction.html

全文を見る
すると、全ての回答が全文表示されます。
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

連投すみません。#2です。 #1さんのご指摘どおりなのですが、 HTMLをベースとして、その中にPHPのスクリプトを書く「初期の頃のPHPらしい書き方」は、 大きなものになってくると、可読性が極めて悪いので、やめたほうがいいです。 ま、その書籍もそうですが、人によるので、お好みで。

全文を見る
すると、全ての回答が全文表示されます。
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

これ↓は、 <?php if ($link_to_next): ?> <?php endif; ?> これ↓と 全く 同じ意味。書き方が違うだけ。 <?php if ($link_to_next) { ?> <?php } ?> PHPは 同じ事をするにも 何通りかの書き方が出来るのです。 print " あああ いいい"; ↑と↓も およそ 同じ意味です。↓はヒアドキュメントというもの。 print <<< EOL あああ いいい EOL;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPでのページング処理についての質問です。

    ドットインストールにてページングの勉強をしています。 http://dotinstall.com/lessons/paging_php_v2/8510 件数が多いと、 この場合ですと10ページ以上まで表示されてしまうかと思うのですが、 よくあるWEBサービスのように10ページまでで区切り、 10ページ目をクリックすると、 5ページから15ページまでを表示させたいのですが、 どのように書いていくものでしょうか? <?php define('DB_HOST', 'localhost'); define('DB_USER', 'dbuser'); define('DB_PASSWORD', '********'); define('DB_NAME', 'dotinstall_paging_php'); define('COMMENTS_PER_PAGE', 5); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } error_reporting(E_ALL & ~E_NOTICE); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD); } catch (PDOException $e) { echo $e->getMessage(); exit; } // select * from comments limit OFFSET, COUNT // page offset count // 1 0 5 // 2 5 5 // 3 10 5 // 4 15 5 $offset = COMMENTS_PER_PAGE * ($page - 1); $sql = "select * from comments limit ".$offset.",".COMMENTS_PER_PAGE; $comments = array(); foreach ($dbh->query($sql) as $row) { array_push($comments, $row); } $total = $dbh->query("select count(*) from comments")->fetchColumn(); $totalPages = ceil($total / COMMENTS_PER_PAGE); // var_dump($comments); // exit; $from = $offset + 1; $to = ($offset + COMMENTS_PER_PAGE) < $total ? ($offset + COMMENTS_PER_PAGE) : $total; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>コメント一覧</title> </head> <body> <h1>コメント一覧</h1> <p>全<?php echo $total; ?>件中、<?php echo $from; ?>件~<?php echo $to; ?>件を表示しています。</p> <ul> <?php foreach ($comments as $comment) : ?> <li><?php echo htmlspecialchars($comment['comment'],ENT_QUOTES,'UTF-8'); ?></li> <?php endforeach; ?> </ul> <?php if ($page > 1) : ?> <a href="?page=<?php echo $page-1; ?>">前</a> <?php endif; ?> <?php for ($i = 1; $i <= $totalPages; $i++) : ?> <?php if ($page == $i) : ?> <strong><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></strong> <?php else: ?> <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php endif; ?> <?php endfor; ?> <?php if ($page < $totalPages) : ?> <a href="?page=<?php echo $page+1; ?>">次</a> <?php endif; ?> </body> </html>

    • ベストアンサー
    • PHP
  • WP タクソノミー前後の記事リンクについて

    お客様の声:タクソンミー名(voice) ようにarchive-voice.phpを作りました。 記事の中身表示はsingle.phpはつくらず、ブログ用のindex.phpと共通にしました。 ブログ用のindex.phpには ↓↓↓↓ <!--内容の出力--> <?php if(is_home() || is_category() || is_archive()): ?> <div class="kiji"> <?php if(have_posts()): while(have_posts()): the_post(); ?> <div class="kiji-box"> <p class="catch-taitle"><span class="styledeco"><?php the_category(','); ?></span></p> <!-- アイキャッチ画像設置 --> <?php if (has_post_thumbnail()): ?> <?php the_post_thumbnail('medium'); ?> <?php else: ?> <?php echo '<img src="'.get_template_directory_uri().'/img/noimage.gif" alt="noimage" />'; ?> <?php endif; ?> <h2><a class="linktitle" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <p><?php echo mb_substr(get_the_excerpt(), 0, 120); ?><a class="linkleft" href="<?php the_permalink(); ?>">続きを読む</a>]</p> <div class="postinfo"><?php echo get_the_date(); ?>(<?php the_time(); ?>)<?php edit_post_link(' Edit',' |',''); ?></div> </div> <?php endwhile; endif; ?> </div> <?php else: ?> <!--フロントページ、アーカイブ、カテゴリ--> <!--単独ページ--> <?php if(have_posts()): while(have_posts()): the_post(); ?> <h2 class="blog-title"><?php the_title(); ?></h2> <div class="postinfo"><?php echo get_the_date(); ?>(<?php the_time(); ?>) | カテゴリー:<?php the_category(','); ?><?php edit_post_link(' Edit',' |',''); ?></div> <div class="blog_img"><?php if (has_post_thumbnail()): ?> <?php the_post_thumbnail('full'); ?> <?php endif; ?></div> <?php the_content(); ?> <?php endwhile; endif; ?> <?php endif; ?> <!--内容の出力ここまで--> <!--ページ送り--> <?php if (function_exists("pagination")) {pagination($additional_loop->max_num_pages); } ?> <!--個別の記事のページ送り--> <div id="pagelink"> <?php if(is_single()): ?> <p class="cell1"><?php previous_post_link('←%link', '%title', true, ''); ?></p> <p class="cell2"><?php next_post_link('%link→', '%title', true, ''); ?></p> <?php endif; ?> これだと、お客様の声のページに 記事の前後のリンクが表示されません。 <?php previous_post_link('« %link', '前の記事', TRUE, '', 'voice'); ?> <?php next_post_link('%link »', '次の記事', TRUE, '', 'voice'); ?> としてみたのですが、やはり表示されませんでした。 お客様の声とブログを共通にしているから表示されないのでしょうか・・・?

    • 締切済み
    • PHP
  • php ページャー

    php ページャー機能がうまくいきません。 ご教授お願いいたします。 ページリンク2、3と押しても ページが移動しません。 ずっと一ページ目のままです。 解決方法よろしくお願いいたします。 index.php peger.php 書きソースはpeger.phpです。 index.htmlとのソースの違いは if(preg_match('/^[1-9][0-9]*$/', $_GET['page']) ){ $page = (int)$_GET['page']; }else{ $page = 1; } のプログラムががindex.phpにはないだけです。 <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>検索</title> </head> <body> <?php if(preg_match('/^[1-9][0-9]*$/', $_GET['page']) ){ $page = (int)$_GET['page']; }else{ $page = 1; } $page = 1; $limit = 2; $offset = $limit * ($page - 1); $dsn='mysql:dbname=****;host=****'; $user='*****'; $password='*****'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT count(*) FROM `mst_product`'; $stmt=$dbh->prepare($sql); $stmt->execute(); $db=null; $total=$stmt->fetchColumn(); $lastpage= ceil($total/$limit); $sql = 'SELECT * FROM mst_product ORDER BY code DESC LIMIT '.$limit.' OFFSET '.$offset.' ' ; $stmt = $dbh->prepare($sql); $stmt->execute(); $db = null; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ echo $row['name']; echo'</br>'; echo $row['price']; } echo '<ul class="pager">'; ?> <?php if($page > 1){?> <li><a href="pager.php?page=<?php echo $page-1; ?>"> << </a></li> <?php } for($i = $page; $page-2 < $i && $i <= $page+4 && $i <= $lastpage; $i++){ ?> <?php if($i == $page){ ?> <li><a href="kensaku_pager.php?page=<?php echo $i; ?>"><?php echo '<font color="#FF4DC4">'.$i.'</font></a></li>'; }else{?> <li><a href="pager.php?page=<?php echo $i; ?>"><?php echo $i.'</a>'; ?> <?php echo '</li>'; } } if($page < $lastpage){ ?> <li><a href="pager.php?page=<?php echo $page+1; ?>"> >> </a></li> <?php } ?> </ul> </body> </html>

    • ベストアンサー
    • PHP
  • ワードプレス固定ページのページングについて

    初めまして。WordPress・PHPの初心者で大変恐縮ではございますが、 ご質問させていただきます。 この度、固定ページに検索結果を表示し、その検索結果を件数指定し、 ページングを行いたいと考えています。 既にWordPress外では、実装でき正常動作を確認しているのですが、 WordPressの固定ページに組み込むと、2ページ目のリンク設定が 上手く行えておらず、誤動作してしまう状態です。 コードは同一ファイルに 【PHP】 if ($_POST["page"] !== "all") {    //取り出す最大レコード数    $lim = $_POST["page"];    //最初と最後のページ番号を定義    $first = 1;    $last = ceil ($num / $lim);        //表示するページ位置を取得    $p = intval ($temp_p);    if ($p < $first) {      $p = $first;    } elseif ($p > $last) {      $p = $last;    }    //表示するレコード位置を取得    $st = ($p - 1) * $lim;    //前後のページ移動数と表示数    //$page = 10 現在のページの前後10ページへのリンク番号を表示    //$page = 10 現在のページの前後10ページ目に移動    $page = 3;    //前後$pageページ移動した際のページ番号を取得    $prev = $p - $page;    $next = $p + $page;    //前後1ページ移動した際のページ番号を取得    $prev01 = $p - 1;    $next01 = $p + 1;    //$stから$lim件のデータを取得し、並べ替える    $sql .= " ORDER BY hoge LIMIT " . $st . "," . $lim . ";";    //ページ移動リンクの組み立て    //1ページ前のページ    if ($p > 1) {     $pagePrev = "<a href=\"$_SERVER[PHP_SELF]?p=$prev01\"><</a> ";    }    //各ページ番号への移動リンクを表示    for ($cnt = $p - $page; $cnt <= $last; $cnt++) {     if ($cnt < 1) {       $cnt = 1;     }     $pageNo = "<a href=\"$_SERVER[PHP_SELF]?p=$cnt\">$cnt</a> ";     //表示番号を指定数に区切る     //ページ番号と現在のページが同一の場合は     //リンク無しにする     if ($cnt <= $p + $page) {       if ($cnt == $p) {          $pageNo = $p;       }      }    }    //1ページ後のページ    if (($next01 - 1) * $lim < $reccnt) {       $pageNext = "<a href=\"$_SERVER[PHP_SELF]?p=$next01\">></a> ";    }    //最初のページへ移動    if ($p > 1) {       $pageFirst = "<a href=\"$_SERVER[PHP_SELF]?p=$first\">最初</a> ";    }    //前の$pageページへ移動    if ($p > $page) {       echo "<a href=\"$_SERVER[PHP_SELF]?p=$prev\"><<</a> ";    }    //次の$pageページへ移動    if (($next - 1) * $lim < $reccnt) {       echo "<a href=\"$_SERVER[PHP_SELF]?p=$next\">>></a> ";    }    //最後のページへ移動    if ($p < $last) {       $pageLast = "<a href=\"$_SERVER[PHP_SELF]?p=$last\">最後</a> ";    } } 【html】 <?php echo $pageFirst; echo $pagePrev; echo $pageNo; echo $pageNext; echo $pageLast; ?> としており、a href=\"$_SERVER[PHP_SELF]?p=$hoge が上手く行えて いないからだと自分では考えているので、hrefにこのファイルの指定や 私が思い当たる方法では試してみたのですが、やはり解決することはできませんでした。 説明が不十分で大変失礼かと思いますが、どういった原因が考えられるでしょうか? リンク以外の観点からも、アドバイスをいただければと考えております。 お力を貸していただければ大変嬉しく思います。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • myaql php ページャー total

    検索機能プラスページャー機能を作っているのですが$totalが取れません。 echo $total;にしても数字が出てきません。 検索機能をつけずに元あるデータからはうまくいきました。 ご教授お願いいたします。 ソースは下記です <?php $cityid=$_POST['city']; $brandid=$_POST['brand']; $syasyu=$_POST['ysasyu_sentaku']; $page = 1; $limit = 2; $offset = $limit * ($page - 1); $dsn='mysql:dbname=****host=mysql1.**** $user=***; $password=***** $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); if($brandid=='') { $sql='SELECT COUNT (*)FROM zyoho WHERE cityid=? OR brandid=?'; }else{ $sql='SELECT COUNT (*) FROM zyoho WHERE cityid=? AND brandid=?'; } $stmt=$dbh->prepare($sql); $data[]=$cityid; $data[]=$brandid; $stmt->execute($data); $db=null; $total=$stmt->fetchColumn(); $lastpage= ceil($total/$limit); if($brandid=='') { $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? LIMIT '.$limit.' OFFSET '.$offset; }else{ $sql='SELECT naiyo FROM zyoho WHERE cityid=? AND brandid=? LIMIT '.$limit.' OFFSET '.$offset; } $stmt = $dbh->prepare($sql); var_dump($data); $stmt->execute($data); $db = null; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ echo $row['naiyo']; echo'</br>'; } echo '<ul class="pager">'; ?> <?php if($page > 1){?> <li><a href="pager.php?page=<?php echo $page-1; ?>"> << </a></li> <?php }。 for($i = $page; $page-2 < $i && $i <= $page+4 && $i <= $lastpage; $i++){ ?> <?php if($i == $page){ ?> <li><a href="kensaku_pager.php?page=<?php echo $i; ?>"><?php echo '<font color="#FF4DC4">'.$i.'</font></a></li>'; }else{?> <li><a href="pager.php?page=<?php echo $i; ?>"><?php echo $i.'</a>'; ?> <?php echo '</li>'; } }。 if($page < $lastpage){ ?> <li><a href="pager.php?page=<?php echo $page+1; ?>"> >> </a></li> <?php } ?> </ul>

    • ベストアンサー
    • MySQL
  • php掲示板でページング機能を装備したいのですが

    下記のプログラムのみでは投稿が0にもかかわらず12345...10次へ » となってしまいます。理想は13件投稿の場合10件表示で、一ページ目は 13件中10件表示 1|2次へ>> としたいです。 PHP初心者です。どこに記述するかなど、できるだけ分かりやすくお願いいたします><申し訳ございません。 <?php function paging($limit, $page, $disp=5){ //$dispはページ番号の表示数 $next = $page+1; $prev = $page-1; $start = ($page-floor($disp/2)> 0) ? ($page-floor($disp/2)) : 1;//始点 $end = ($start> 1) ? ($page+floor($disp/2)) : $disp;//終点 $start = ($limit <$end)? $start-($end-$limit):$start;//始点再計算 if($page != 1 ) { print '<a href="?page='.$prev.'">&laquo; 前へ</a>'; } //最初のページへのリンク if($start>= floor($disp/2)){ print '<a href="?page=1">1</a>'; if($start> floor($disp/2)) print "..."; //ドットの表示 } for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス if($i <= $limit && $i> 0 )//1以上最大ページ数以下の場合 print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 } //最後のページへのリンク if($limit> $end){ if($limit-1> $end ) print "..."; //ドットの表示 print '<a href="?page='.$limit.'">'.$limit.'</a>'; } if($page <$limit){ print '<a href="?page='.$next.'">次へ &raquo;</a>'; } /*確認用 print "<p>current:".$page."<br>"; print "next:".$next."<br>"; print "prev:".$prev."<br>"; print "limit:".$limit."<br>"; print "start:".$start."<br>"; print "end:".$end."</p>";*/ } $limit = 10;//最大ページ数 $page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 paging($limit, $page); ?> またlogファイルなどの関連ファイル名はどこに記述されているかわからないので、このファイルをindex.phpにしたとして、ほかに必要なファイルがあれば教えていただきたいです。宜しくお願いいたします。 参考URL http://tenderfeel.xsrv.jp/php/639/

    • 締切済み
    • PHP
  • ソースコードを1行にして保存してありますが、どのように行っているのでしょうか?

    こんにちは。 最近またPHPで色々作っているのですが、参考になるPHPを見つけると手本にさせて頂いております。 しかし、たまにですが、ソースコードが改行されずに1行で保存されているプログラムがあります。 まさかコードを記述しているところから1行で記述したとは思えませんし、デバッグを考えれば元に戻す必要性もあるように思えます。 このようなプログラムはどのようにして1行で保存しているのでしょうか? また元に戻す方法はあるのでしょうか? 下記にclassの改行やタブを削除したサンプルを記述します。 よろしくお願いいたします。 ************サンプル************ <?php class breadCrumb{function simple($path = null, $page_title = "Current Page"){$pathArray = explode("/",dirname($path));if(!isset($root_url)) $root_url = "";$code = '<p id="breadCrumb"><a href="'.$root_url.'/" title="Home Page">Home</a> &gt;&gt; ';$newPath = $root_url."/";for($i = 1;$i < count($pathArray);$i++){$printxt = ucwords($pathArray[$i]);$newPath .= $pathArray[$i].'/';$code .= '<a href="'.$newPath.'">'.$printxt.'</a> &gt;&gt; ';}$code .= '<em>'.$page_title.'</em></p>'."\n";if($path != "/")return $code;}} ?>

    • ベストアンサー
    • PHP
  • phpのソースについて

    このソースはHTMLだと思いますが、phpファイルのときは、 ifを<?php?>で指定しなければいけませんよね? if $click[cnt]<>""} {$click[cnt]} <a href="click.php?num=10" utn>{$click[cnt]}</a> {/if} こちらは、{$click[cnt]}をクリックをしたらそのリンクを消えるようにする複雑な設定です。 ただ、これは、HTMLとphpの設定が一緒になっている可能性が高く、思うように動きませんが、なぜですか?スクリプト等の」違いですか?設定ミスですか?

    • 締切済み
    • PHP
  • WordPress 最新記事をまとめてURLにする

    参考のURL https://www.buzzhook.co.jp/ 下の方に「BACKYARD BLOG」があります。 アイキャッチ画像、年月日、カテゴリー、タイトル、抜粋全てどれをクリックしてもURLへジャンプします。 HTMLソースは下記になります。 <li> <a herf="#"> . . . </a> </li> WordPressのトップページも同様にしたいのですが、PHPプログラムはまだ初心者なので、うまくいきませんでした。結果はアイキャッチのみURLでした。 どこが違うのでしょうか? 宜しくお願いします。 <!-- main --> <main> <!-- 最新記事リスト --> <ul> <li> <a href="<?php the_permalink(); ?>"> <?php query_posts('posts_per_page=5'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <!-- アイキャッチ表示 --> <?php if (has_post_thumbnail()) : ?> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a> <?php else : ?> <a href="<?php the_permalink(); ?>"><img src="<?php bloginfo('template_url'); ?>/img/noimage.gif" width="100" height="100" alt="デフォルト画像" /></a> <?php endif ; ?> <!-- カテゴリー表示 --> <?php echo get_the_category()[0]->name; ?> <!-- 抜粋 --> <?php echo get_the_excerpt(); ?> <span class="date"> <?php the_time('Y年n月j日'); ?> <?php $days=30; $today=date('U'); $entry=get_the_time('U'); $diff1=date('U',($today - $entry))/86400; if ($days > $diff1) { echo '<img src="images/new.gif" alt="New" />'; } ?> </span> </a> </li> <?php endwhile; endif; ?> <?php wp_reset_query(); ?> </ul> <!-- 最新記事リストここまで --> </main>

    • ベストアンサー
    • PHP
  • phpグローバルナビについて

    はじめまして、以下phpでグローバルナビを読み込んでますが、2行目のphp設定である、該当ページの時だけ.current_page_itemのスタイルシートを設定する宣言をしてるのですが、なぜかトップページ以外は正常に.current_page_itemの設定がされるのですが、トップページは.current_page_itemが反映されません。 <?php if(is_home()){echo 'class="current_page_item"';} ?>の 宣言がトップページにも反映させるにはどの様にすればいいのでしょうか? お手数ですが教えてください。 --------php設定---------------- <ul id="nav"> <li<?php if(is_home()){echo 'class="current_page_item"';} ?>> <a href="<?php bloginfo('url'); ?>" title="TOP">TOP</a></li> <?php wp_list_pages('title_li=&depth=1'); ?> </ul> </div> ------------------------ ------------グローバルナビのスタイルシート------------ #nav { background-color: #ffffff; margin: 0; padding: 0; list-style-type: none; height: 2em; width: 800px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #00645C; } #nav li { text-align: center; float: left; line-height: 2em; } #nav li a { display: block; width: 100px; text-decoration: none; color: #000000; } #nav li a:hover { color: #FFFFFF; background-color: #00645C; } #nav .current_page_item a { color: #FFFFFF; background-color: #00645C; }

    • ベストアンサー
    • PHP