質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

4386閲覧

phpのページングについて

gik

総合スコア152

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/06/25 09:54

編集2015/06/27 12:49

lang

1// result.php 2 3require( 'config.php' ); 4require( 'lib.php' ); 5 6// 7if ( $_GET['page'] == '' ) $_GET['page'] = 0; 8if ( $_GET['rows'] == '' ) $_GET['rows'] = 20; 9if ( $_GET['sort'] == '' ) $_GET['sort'] = 'item_name asc'; 10 11// 12session_start(); 13 14// db connect 15$link = mysql_connect( $db_host, $db_user, $db_password ); 16mysql_select_db( $db_name ); 17$result = mysql_query( 'set character set utf8' ); 18 19// 20if ( $_GET['author_id'] != '' ) $where .= "item.author_id = '" . mysql_real_escape_string( $_GET['author_id'] ) . "' and "; 21if ( $_GET['category_id'] != '' ) $where .= "category_id = '" . mysql_real_escape_string( $_GET['category_id'] ) . "' and "; 22if ( $_GET['query'] != '' ) $where .= "item_name like '%" . mysql_real_escape_string( $_GET['query'] ) . "%' and "; 23 24$where .= 'item_id > 0'; 25 26$sql = "select * from item where $where"; 27$result = mysql_query( $sql ); 28$num_rows = mysql_num_rows( $result ); 29 30$sql = "select * from item 31 left join author on item.author_id = author.author_id 32 where $where order by " . mysql_real_escape_string( $_GET['sort'] ) . " limit ${_GET['page']}, ${_GET['rows']}"; 33$result2 = mysql_query( $sql ); 34//echo $sql; 35 36// 37$delta = 3 * $_GET['rows']; 38 39if ( $_GET['page'] - $delta < 0 ) $s = 0; else $s = $_GET['page'] - $delta; 40if ( $_GET['page'] + $delta > $num_rows ) $e = $num_rows; else $e = $_GET['page'] + $delta; 41 42 43 44 45?> 46<? require( 'header.php' ) ?> 47<? require( 'topbar.php' ) ?> 48<div align="center"> 49<h2>検索結果<?= $num_rows ?>件中<?= $_GET['page'] + 1 ?>件から<?= $_GET['page'] + $_GET['rows'] ?>件までを表示</h2> 50<table> 51<? while ( $item = mysql_fetch_array( $result2 ) ) { ?> 52<tr> 53 <td> 54 <a href="item.php?item_id=<?= $item['item_id'] ?>"><img src="<?= $item['image_url'] ?>" width=90 alt="<?= $item['item_name'] ?>" align="top" border=0></a> 55 </td> 56 <td> 57 <a href="item.php?item_id=<?= $item['item_id'] ?>"><?= $item['item_name'] ?> <?= $item['author_name'] ?></a><br> 58 価格 <?= $item['sale_price'] ?> 円(税込み) 59 </td> 60</tr> 61<? } ?> 62</table> 63<? if ( $_GET['page'] >= $_GET['rows'] ) { ?> 64<a href="result.php?page=<?= $_GET['page'] - $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">前のページ&nbsp;</a> 65<? } ?> 66<? for ( $m = $s; $m <= $e; $m = $e++ ) { ?> 67<a href="result.php?page=<?= $m ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>"> 68<? if ( $m == $_GET['page'] ) echo "<big><b>" . $m / $_GET['rows'] . "</b></big>"; else echo $m / $_GET['rows'] ?></a> 69<? } ?> 70<? if ( $num_rows > $_GET['page'] + 1 ) { ?> 71<a href="result.php?page=<?= $_GET['page'] + $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">&nbsp;次のページ</a> 72<? } ?> 73<? require( 'footer.php' ) ?> 74```? 75 76 77PHPによるECサイトプログラミング~ショッピングカートから決済まで―MySQLのデータベース設計とPHPセッション管理の作法 78という本を買って読んでいるのですが、 79このresult.phpのページング処理がよくわかりません。 80教えてください。 81` 82 83```lang-<php> 84/* 85* 変数eは 表示開始件数 + delta がnum_rowsより上回る時に最大件数 86*(一番最後のページリンクを作るため) 87* 上回る時には表示開始件数 + delta 88* これは、現在のページより2ページ次のページまでページリンクを表示させたい為 89*/ 90if ( $_GET['page'] + $delta > $num_rows ) $e = $num_rows; else $e = $_GET['page'] + $delta; 91

この部分で表示開始件数がわからないです。
この$_GET['page']はページ数のみgetするのはないのですか?
つまりたとえば$_GET['page'] + $_GET['rows']で1ページ目は20件、2ページ目1件まで、
$_GET['page']で2をゲットしたら22件ではないのですか?
$_GET['page']が表示開始件数を手にしている部分はどこですか?

lang

1<?php /* 表示開始件数が表示件数を上回る場合に戻るリンクを表示させます。*/ ?> 2<? if ( $_GET['page'] >= $_GET['rows'] ) { ?> 3<?php 4/* 5* 現在の検索結果を引き継ぎたいのでとりあえずGETパラメータは全て入れる。 6* 以下のURLを表示させます。 7* result.php?page=[表示開始件数 - 表示件数]&rows=[表示件数]&author_id=[その他id]& category_id=[カテゴリID]&query=[商品名の一部か全部]&sort=[表示順] 8*/ 9?> 10<a href="result.php?page=<?= $_GET['page'] - $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">前のページ&nbsp;</a> 11<? } ?> 12<!-- 戻るリンクの表示終了。 --> 13

表示開始件数と$_GET['page']がよくわかりません。

<?= $_GET['page'] - $_GET['rows'] ?>にするとマイナスになってしまうのでは?

lang

1<?php /*最大表示件数が表示開始件数を上回る場合に進むリンクを表示させます。*/ ?> 2<? if ( $num_rows > $_GET['page'] + 1 ) { ?> 3<?php 4/* 5* 現在の検索結果を引き継ぎたいのでとりあえずGETパラメータは全て入れる。 6* 以下のURLを表示させます。 7* result.php?page=[表示開始件数 + 表示件数]&rows=[表示件数]&author_id=[その他id]& category_id=[カテゴリID]&query=[商品名の一部か全部]&sort=[表示順] 8*/ 9?> 10<a href="result.php?page=<?= $_GET['page'] + $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">&nbsp;次のページ</a> 11<? } ?> 12<!-- 進むリンクの表示終了。 --> 13<? require( 'footer.php' ) ?>

表示開始件数の意味と
$_GET['page']がページ数のみgetしていると思っていたのがもしかして
間違った解釈を私していると思うんです。
申し訳ありません。
そこのところ、もう少しわかりやすく教えてください
よろしくお願います

pageには、page番号ではなく表示開始件数が入ります。
っと書いてありますが、すいません。その記述はどこにあるのでしょうか?

lang

1$sql = "select * from item 2left join author on item.author_id = author.author_id 3where $where order by " . mysql_real_escape_string( $_GET['sort'] ) . " limit ${_GET['page']}, ${_GET['rows']}"; 4$result2 = mysql_query( $sql );

この部分も教えてください。
すいません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sounisi5011

2015/06/25 10:17 編集

コードが本文に直接書かれており非常に見づらいです。「```lang-PHP ~ ```」の記法を使い、コードが分かりやすくなるよう修正を行って下さい。
guest

回答3

0

mysql_real_escape_string があるので、インジェクションは大丈夫かな。limit句がエスケープされてないか…。
本に載っているコード自体が、素人が書きましたというようなコードなので、参考には値しませんね。
初版が2007年ということなのでmysql_*系を使っているのはやむなしとしても…
わざわざ買ってまで使うものではありませんね。

投稿2015/06/26 01:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

lang

1/* 2 * 前提として 3 * $_GET['rows'] ・・・1ページあたりの表示件数 4 * $_GET['page'] ・・・現在の表示開始件数 5 */ 6//deltaには表示件数 * 3が入ります。 7$delta = 3 * $_GET['rows']; 8/* 9 * 変数sは 表示開始件数 - delta が0より下回る時に0(一番最初のページリンクを作るため) 10 * 上回る時には表示開始件数 - delta 11 * これは、現在のページより2ページ前のページからページリンクを表示させたい為 12 * ※ページリンク << [1 2 3 4] >> みたいなの 13 */ 14if ( $_GET['page'] - $delta < 0 ) $s = 0; else $s = $_GET['page'] - $delta; 15/* 16 * 変数eは 表示開始件数 + delta がnum_rowsより上回る時に最大件数 17 *(一番最後のページリンクを作るため) 18 * 上回る時には表示開始件数 + delta 19 * これは、現在のページより2ページ次のページまでページリンクを表示させたい為 20 */ 21if ( $_GET['page'] + $delta > $num_rows ) $e = $num_rows; else $e = $_GET['page'] + $delta; 22 23 24?> 25<?php /*header用のfile読み込み*/ ?> 26<? require( 'header.php' ) ?> 27<?php /*topbar用のfile読み込み*/ ?> 28<? require( 'topbar.php' ) ?> 29<?php 30 /* 31 * $_GET['page'] + 1で現在の表示件数が何件目からかを取得。 32 * $_GET['page'] + $_GET['rows']で何件目までかを取得 33 */ 34?> 35<div align="center"> 36<h2>検索結果<?= $num_rows ?>件中<?= $_GET['page'] + 1 ?>件から<?= $_GET['page'] + $_GET['rows'] ?>件までを表示</h2> 37<table> 38<?php 39 /* 40 * ここから商品情報表示 41 * DBから取得した値を行毎にitem変数に入れてます。 42 * loopの開始 43 */ 44?> 45<? while ( $item = mysql_fetch_array( $result2 ) ) { ?> 46<tr> 47 <td> 48 <!-- item変数から商品詳細リンクや商品画像を表示させます --> 49 <!-- URL : item.php?item_id=[商品ID] --> 50 <a href="item.php?item_id=<?= $item['item_id'] ?>"><img src="<?= $item['image_url'] ?>" width=90 alt="<?= $item['item_name'] ?>" align="top" border=0></a> 51 </td> 52 <td> 53 <!-- item変数から商品詳細リンクと商品名や金額等を表示させます --> 54 <!-- URL : item.php?item_id=[商品ID] --> 55 <a href="item.php?item_id=<?= $item['item_id'] ?>"><?= $item['item_name'] ?> <?= $item['author_name'] ?></a><br> 56 価格 <?= $item['sale_price'] ?> 円(税込み) 57 </td> 58</tr> 59<? } ?> 60<?php /*loop終了*/?> 61</table> 62<?php /*lここまで商品情報表示*/?> 63 64<?php /* 表示開始件数が表示件数を上回る場合に戻るリンクを表示させます。*/ ?> 65<? if ( $_GET['page'] >= $_GET['rows'] ) { ?> 66<?php 67 /* 68 * 現在の検索結果を引き継ぎたいのでとりあえずGETパラメータは全て入れる。 69 * 以下のURLを表示させます。 70 * result.php?page=[表示開始件数 - 表示件数]&rows=[表示件数]&author_id=[その他id]& category_id=[カテゴリID]&query=[商品名の一部か全部]&sort=[表示順] 71 */ 72?> 73<a href="result.php?page=<?= $_GET['page'] - $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">前のページ&nbsp;</a> 74<? } ?> 75<!-- 戻るリンクの表示終了。 --> 76 77<?php 78 /* TODO:ここバグってないかなと思う箇所。1回のみ実行されそう。。。 79 * 最後のインクリメント部分 $m = $m + $_GET['rows']とかじゃないかな。 80 * さっきの2ページ前から2ページ先までのリンク作成 81 */ 82?> 83<? for ( $m = $s; $m <= $e; $m = $e++ ) { ?> 84<!--ページリンク生成--> 85<a href="result.php?page=<?= $m ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>"> 86<?php /*現在のページ番号と同一の場合太文字にしてページ番号の表示*/ ?> 87<? if ( $m == $_GET['page'] ) echo "<big><b>" . $m / $_GET['rows'] . "</b></big>"; else echo $m / $_GET['rows'] ?> 88 89</a> 90<? } ?> 91 92<?php /*最大表示件数が表示開始件数を上回る場合に進むリンクを表示させます。*/ ?> 93<? if ( $num_rows > $_GET['page'] + 1 ) { ?> 94<?php 95 /* 96 * 現在の検索結果を引き継ぎたいのでとりあえずGETパラメータは全て入れる。 97 * 以下のURLを表示させます。 98 * result.php?page=[表示開始件数 + 表示件数]&rows=[表示件数]&author_id=[その他id]& category_id=[カテゴリID]&query=[商品名の一部か全部]&sort=[表示順] 99 */ 100?> 101<a href="result.php?page=<?= $_GET['page'] + $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">&nbsp;次のページ</a> 102<? } ?> 103<!-- 進むリンクの表示終了。 --> 104<? require( 'footer.php' ) ?>

多分こんな感じ。

lang

1//条件に引っかかった値を全カラム取得 2$sql = "SELECT " 3. "* " 4. "FROM " 5//item tableにauthor tableをauthor_idで結合 6. "item " 7. "LEFT JOIN " 8. "author " 9. "ON " 10. "item.author_id = author.author_id " 11//検索用のWhereで絞り込み 12. "where " 13. $where 14//並び順の設定 15. "order by " 16. mysql_real_escape_string( $_GET['sort'] ) 17//page件目からrows件のデータを取得 18//TODO:ここインジェクションの脆弱性があるため、このままでは必ず実装しないこと 19. " LIMIT ${_GET['page']}, ${_GET['rows']}";

投稿2015/06/25 11:41

編集2015/06/29 00:23
nanndemoiikara

総合スコア775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gik

2015/06/25 16:30 編集

```lang-<php> /* * 変数eは 表示開始件数 + delta がnum_rowsより上回る時に最大件数 *(一番最後のページリンクを作るため) * 上回る時には表示開始件数 + delta * これは、現在のページより2ページ次のページまでページリンクを表示させたい為 */ if ( $_GET['page'] + $delta > $num_rows ) $e = $num_rows; else $e = $_GET['page'] + $delta; ``` この部分で表示開始件数がわからないです。 この$_GET['page']はページ数のみgetするのはないのですか? つまりたとえば$_GET['page'] + $_GET['rows']で$_GET['page']が1だったとき1ページ目は20件、2ページ目は1件で$_GET['page']が2をしたら22件ではないのですか? $_GET['page']が表示開始件数を手にしている部分はどこですか? ```lang-<php> <?php /* 表示開始件数が表示件数を上回る場合に戻るリンクを表示させます。*/ ?> <? if ( $_GET['page'] >= $_GET['rows'] ) { ?> <?php /* * 現在の検索結果を引き継ぎたいのでとりあえずGETパラメータは全て入れる。 * 以下のURLを表示させます。 * result.php?page=[表示開始件数 - 表示件数]&rows=[表示件数]&author_id=[その他id]& category_id=[カテゴリID]&query=[商品名の一部か全部]&sort=[表示順] */ ?> <a href="result.php?page=<?= $_GET['page'] - $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">前のページ&nbsp;</a> <? } ?> <!-- 戻るリンクの表示終了。 --> ``` 表示開始件数と$_GET['page']がよくわかりません。 <?= $_GET['page'] - $_GET['rows'] ?>にするとマイナスになってしまうのでは? ```lang-<php> <?php /*最大表示件数が表示開始件数を上回る場合に進むリンクを表示させます。*/ ?> <? if ( $num_rows > $_GET['page'] + 1 ) { ?> <?php /* * 現在の検索結果を引き継ぎたいのでとりあえずGETパラメータは全て入れる。 * 以下のURLを表示させます。 * result.php?page=[表示開始件数 + 表示件数]&rows=[表示件数]&author_id=[その他id]& category_id=[カテゴリID]&query=[商品名の一部か全部]&sort=[表示順] */ ?> <a href="result.php?page=<?= $_GET['page'] + $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">&nbsp;次のページ</a> <? } ?> <!-- 進むリンクの表示終了。 --> <? require( 'footer.php' ) ?> ``` 表示開始件数の意味と $_GET['page']がページ数のみgetしていると思っていたのがもしかして 間違った解釈を私していると思うんです。 申し訳ありません。 そこのところ、もう少しわかりやすく教えてください よろしくお願います
nanndemoiikara

2015/06/26 00:41 編集

> この部分で表示開始件数がわからないです。 > この$_GET['page']はページ数のみgetするのはないのですか? 1ページの表示件数(rows)が30だった場合2ページ目の表示開始件数(page)は30になります。 rowsの倍数でページを決めているととらえて下さい。 > つまりたとえば$_GET['page'] + $_GET['rows']で$_GET['page']が1だったとき1ページ> 目は20件、2ページ目は1件で$_GET['page']が2をしたら22件ではないのですか? ? $_GET['page'] + $_GET['rows']この行ではこのような式はありません。 rowsが30、現在2ページ目にいてpageの値が30だった場合、ここでは 30 + 90が変数eに入ります。 > $_GET['page']が表示開始件数を手にしている部分はどこですか? pageはリンクのgetパラメータで取得します。 result.php?page=[ページ番号] と言った形下部でリンクを生成してpageが渡されるようになっています。 > 表示開始件数と$_GET['page']がよくわかりません。 表示開始件数がpageと思って下さい。 > <?= $_GET['page'] - $_GET['rows'] ?>にするとマイナスになってしまうのでは? pageはrowsの倍数の為なりません。 > 表示開始件数の意味と > $_GET['page']がページ数のみgetしていると思っていたのがもしかして > 間違った解釈を私していると思うんです。 間違った解釈をしています。 逆にpageにページ数が入ると思った理由を教えて頂きたいぐらいです。 表示開始件数がpageです。 > 申し訳ありません。 > そこのところ、もう少しわかりやすく教えてください > よろしくお願います pageには、page番号ではなく表示開始件数が入ります。 rowsが30で5ページ目を表示する場合 150がpageです。 150件目の商品データから表示させます。
gik

2015/06/26 14:56

pageには、page番号ではなく表示開始件数が入ります。 っと書いてありますが、すいません。その記述はどこにあるのでしょうか? $sql = "select * from item left join author on item.author_id = author.author_id where $where order by " . mysql_real_escape_string( $_GET['sort'] ) . " limit ${_GET['page']}, ${_GET['rows']}"; $result2 = mysql_query( $sql ); この部分も教えてください。 すいません。
nanndemoiikara

2015/06/29 00:23

<a href="result.php?page=<?= $_GET['page'] + $_GET['rows'] ?>&rows=<?= $_GET['rows'] ?>&author_id=<?= $_GET['author_id'] ?>&category_id=<?= $_GET['category_id'] ?>&query=<?= $_GET['query'] ?>&sort=<?= $_GET['sort'] ?>">&nbsp;次のページ</a> <? } ?> ここ等のgetパラメータ付きのリンクを生成している場所で page + rows になっています。 また、上の例で貼って頂いたpage部分でもlimit句の1つめにpageは入っている事から page = 表示開始件数であると予測できます。 ページ番号であった場合貼って頂いたSQLも破綻しています。 pageがページ番号と思った理由はなんですか? SQL文の説明を追記致しました。
gik

2015/06/29 15:10

ずっとそう思っていました。 根拠があったわけでもなくすいません。 解決しました。 ありがとうございます。 もっと勉強します
guest

0

これは本に書かれているままのコードなのでしょうかね…
その先に修正されたコードがあるならいいのですが、このコードのままだとするならサーバーにあげてはいけません。この短いコードの中にいくつも「やってはいけない」悪いコードが…

XSSとか…

この本だけではとても実用レベルの学習にはなりませんので、早々に卒業して、次のレベルで学習して下さい。

投稿2015/06/25 15:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanndemoiikara

2015/06/26 00:38 編集

はっきり言って窓から投げ捨てるレベルですよね。。。 getパラメータsqlに直に入れてるのでインジェクションされますし。。。 issetしてないし、htmlspecialcharsしてないし。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問