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

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

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

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

3868閲覧

HerokuでデプロイしたPHPサイトに、「Fatal error」が解消できずDBに接続できません。

nem96

総合スコア8

MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MySQL

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2019/12/04 17:23

Herokuでデプロイしたポートフォリオサイトをブラウザに表示するまではよかったのですが、いざログインや新規登録機能などを使おうとすると、以下のようなエラーが表示されてしまい、DBに接続できません。

Fatal error: Uncaught Error: Call to a member function prepare() on null in /app/login.php:17 Stack trace: #0 {main} thrown in /app/login.php on line 17

おそらく**「nullのところからpreperaファンクションを呼び出そうとしているよ!」**というエラーだと思い、定義されている変数が一致しているか下記のファイルを確認したのですが、まちがえている部分が分からず、完全に行き詰まってしまいました…。

▼「dbconnect.php」(*local用から本番用に書き換えています)

php

1<?php 2 3//DB接続設定用ファイル(dbconnect.php)// 4 5function dbConnect(){ 6 $db = parse_url($_SERVER['CLEARDB_DATABASE_URL']); 7 $db['arabia_social2'] = ltrim($db['path'], '/'); 8 $dsn = "mysql:host={$db['us-cdbr-iron-east-05.cleardb.net']};dbname={$db['arabia_social2']};charset=utf8"; 9 $user = $db['b748bc5df82266']; 10 $password = $db['*******']; 11 $options = array( 12 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 13 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 14 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true, 15 ); 16 $dbh = new PDO($dsn,$user,$password,$options); 17 return $dbh; 18} 19

▼「login.php」

php

1 2 3<?php 4session_start(); 5require('dbconnect.php'); 6 7ini_set('display_errors', true); 8error_reporting(E_ALL); 9 10//cookieが入っているかチェック 11if($_COOKIE['email']!==''){ 12 $email=$_COOKIE['email']; 13} 14 15if(!empty($_POST)){ 16 $email=$_POST['email']; 17 18 if($_POST['email']!=='' && $_POST['password']!==''){ 19 $login=$dbh->prepare('SELECT*FROM members WHERE email=? AND password=?'); 20 $login->execute(array( 21 $_POST['email'], 22 sha1($_POST['password']) 23 )); 24 $member=$login->fetch(); 25 26 //パスワードや個人情報はセッション変数に保存しない 27 if($member){ 28 $_SESSION['id']=$member['id']; 29 $_SESSION['time']=time(); 30 31 if($_POST['save']==='on'){ 32 setCookie('email',$_POST['email'],time()+60*60*24*14); 33 } 34 35 //ログインされたらトップページへ 36 header('Location:index.php'); 37 exit(); 38 }else{ 39 $error['login']='failed'; 40 } 41 }else{ 42 $error['login']='blank'; 43 } 44} 45?> 46<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 47<html xmlns="http://www.w3.org/1999/xhtml"> 48 49------------------------------------------略------------------------------------ 50 51<div class="container"> 52<h1>ログインする</h1> 53<div id="lead"> 54 <p>メールアドレスとパスワードを記入してログインしてください。</p> 55 <p>入会手続きがまだの方はこちらからどうぞ。</p> 56 <p>&raquo;<a href="join/">入会手続きをする</a></p> 57 </div> 58 <form action="" method="post"> 59 <div class="form-group"> 60 <label for="exampleInputEmail1">Eメールアドレス</label> 61 <input type="email" name="email" class="form-control" id="exampleInputEmail1" value="<?php print(htmlspecialchars($email,ENT_QUOTES)); ?>"> 62 <small class="text-muted">あなたのメールは他の誰とも共有しません。</small> 63 <?php if($error['login']==='blank'): ?> 64 <p class="error">メールアドレスとパスワードを入力してください</p> 65 <?php endif; ?> 66 <?php if($error['login']==='failed'): ?> 67 <p class="error">ログインに失敗しました。正しく入力してください</p> 68 <?php endif; ?> 69 </div> 70 71 <div class="form-group"> 72 <label for="exampleInputPassword1">パスワード</label> 73 <input type="password" name="password" class="form-control" id="exampleInputPassword1" value="<?php print(htmlspecialchars($_POST['password'],ENT_QUOTES)); ?>"> 74 </div> 75 <div class="form-group form-check"> 76 <input type="checkbox" class="form-check-input" id="save" name="save" value="on"> 77 <label class="form-check-label" for="save">記憶する</label> 78 </div> 79 <button type="submit" class="btn btn-primary">ログインする</button> 80</form> 81 82</div> 83---------------------------略---------------------------------------

preperaファンクションは「$dbh」で呼び出しているのですが、「dbconnect.php」を確認すると、きちんと定義されているはずなので、どうして「$dbh」が「null」となってエラーが起きているのか分かりません。

前提

Herokuへのデプロイ、およびphpMyAdminからMyworkbenchへのDBのインポートなどは問題なく行えています。
ブラウザ上にもきちんとポートフォリオサイトは表示されます。
したがって正常に機能しているDBに、正常に接続できていないというのが現状だと思います。


Heroku(PHP+MySQL)でWebサービス公開手順
ちなみに冒頭で掲示した「dbconnect.php」ファイルは、こちらのサイトに書かれていた下記のソースコードを元に、自分自身の「CLEARDB_DATABASE_URL」のデータに当てはめた上で、DB接続ファイルを書き換えました。

php

1//DB接続設定用ファイル(dbconnect.php)// 2 3function dbConnect(){ 4 $db = parse_url($_SERVER['CLEARDB_DATABASE_URL']); 5 $db['dbname'] = ltrim($db['path'], '/'); 6 $dsn = "mysql:host={$db['host']};dbname={$db['dbname']};charset=utf8"; 7 $user = $db['user']; 8 $password = $db['pass']; 9 $options = array( 10 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 11 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 12 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true, 13 ); 14 $dbh = new PDO($dsn,$user,$password,$options); 15 return $dbh; 16}

dbname: arabia_social2
host: us-cdbr-iron-east-05.cleardb.net
user: b748bc5df82266
pass: ********


【他にも試したこと】

DBを使う他のページも試しに動作を確認しましたが、やはり全く同じように以下のようなエラーが出てしまい、**「nullのところからpreperaファンクションを呼び出そうとしているよ!」**と言われてしまいました。

Notice: Undefined variable: dbh in /app/join/index.php on line 35 Fatal error: Uncaught Error: Call to a member function prepare() on null in /app/join/index.php:35 Stack trace: #0 {main} thrown in /app/join/index.php on line 35

▼「join/index.php」

php

1 2<?php 3session_start(); 4require('../dbconnect.php'); 5 6ini_set('display_errors', true); 7error_reporting(E_ALL); 8 9 //$_POSTが空ではない時にこのエラーチェックを走らせる=フォームを送信した時だけエラーチェックする 10if(!empty($_POST)){ 11 12 if($_POST['name']===''){ 13 $error['name']='blank'; 14 } 15 if($_POST['email']===''){ 16 $error['email']='blank'; 17 } 18 //パスワードの長さ指定 19 if(strlen($_POST['password']) < 4){ 20 $error['password']='length'; 21 } 22 if($_POST['password']===''){ 23 $error['password']='blank'; 24 } 25 //セキュリティのため画像のみをアップロードできるようにする 26 $fileName=$_FILES['image']['name']; 27 if(!empty($fileName)){ 28 //「-3」として拡張子を得る 29 $ext=substr($fileName, -3); 30 if($ext !='jpg' && $ext !='gif' && $ext !='png'){ 31 $error['image']='type'; 32 } 33 } 34 //アカウントの重複チェック 35 if(empty($error)){ 36 $member=$dbh->prepare('SELECT COUNT(*) AS cnt FROM members WHERE email=?'); 37 $member->execute(array($_POST['email'])); 38 $record=$member->fetch(); 39 if($record['cnt'] > 0){ 40 $error['email']='duplicate'; 41 } 42 } 43 44 45 //$errorの配列がカラかどうか 46 if(empty($error)){ 47 //ファイル名に日付を入れることで、同じ名前による重複した画像保存を防ぐ 48 $image=date('YmdHis').$_FILES['image']['name']; 49 move_uploaded_file($_FILES['image']['tmp_name'],'../member_picture/'.$image); 50 $_SESSION['join']=$_POST; 51 //「$image」にファイル名保存 52 $_SESSION['join']['image']=$image; 53 header('Location:check.php'); 54 exit(); 55 } 56} 57//書き直しがクリックされた時の処理(セッションが正しく設定されている場合のみ) 58if($_REQUEST['action']=='rewrite'&& isset($_SESSION['join'])){ 59 $_POST=$_SESSION['join']; 60} 61?> 62 63<!DOCTYPE html> 64<html lang="ja"> 65<head> 66 67---------------------------略--------------------------------------- 68 69<div class="container"> 70 <p>次のフォームに必要事項をご記入ください。</p> 71 <form action="" method="post" enctype="multipart/form-data"> 72 <div class="form-group"> 73 <label for="Input">名前(ニックネーム可)<span class="required">必須</span></label> 74 <input type="text" name="name" class="form-control" id="Input" value="<?php print(htmlspecialchars($_POST['name'],ENT_QUOTES)); ?>"> 75 <?php if($error['name']==='blank'): ?> 76 <p class="error">名前を入力してください</p> 77 <?php endif; ?> 78 </div> 79 80 <div class="form-group"> 81 <label for="exampleInputEmail1">Eメールアドレス<span class="required">必須</span></label> 82 <input type="email" name="email" class="form-control" id="exampleInputEmail1" value="<?php print(htmlspecialchars($_POST['email'],ENT_QUOTES)); ?>"> 83 <small class="text-muted">あなたのメールは他の誰とも共有しません。</small> 84 <?php if($error['email']==='blank'): ?> 85 <p class="error">メールアドレスを入力してください。</p> 86 <?php endif; ?> 87 <?php if($error['email']==='duplicate'): ?> 88 <p class="error">指定されたメールアドレスはすでに登録されています</p> 89 <?php endif; ?> 90 </div> 91 92 93 <div class="form-group"> 94 <label for="exampleInputPassword1">パスワード<span class="required">必須</span></label> 95 <input type="password" name="password" class="form-control" id="exampleInputPassword1" value="<?php print(htmlspecialchars($_POST['password'],ENT_QUOTES)); ?>"> 96 <?php if($error['password']==='length'): ?> 97 <p class="error">4文字以上で入力してください</p> 98 <?php endif; ?> 99 <?php if($error['password']==='blank'): ?> 100 <p class="error">パスワードを入力してください。</p> 101 <?php endif; ?> 102 </div> 103 104 <input type="file" name="image" size="35" value="test" /> 105 <?php if($error['image']==='type'): ?> 106 <p class="error">「.jpg」「.gif」「.png」の画像を指定してください</p> 107 <?php endif; ?> 108 <?php if(!empty($error)); ?> 109 <p class="error">画像をもう一度指定してください</p> 110 <div><input type="submit" value="入力内容を確認する" /></div> 111</form> 112 113</div> 114 115------------------------------略--------------------------------- 116

DBへの接続を試みるたびに、エラーの解消のいたちごっこのようになっていて困っているため、アドバイスいただけると幸いです。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

dbConnect()を呼び出して返却値を受け取っているところがありません。
そういう名前の関数が定義されただけです。

関数の呼出や返却値の受け取りかたはPHPマニュアルの関数の項を確認してください。

※ですが今回はnullオブジェクトから機能を呼び出すというエラーの前にすでにNotice: Undefined variable: dbh と未定義変数のNotice出てるのでそちらで気づけると思います

投稿2019/12/04 21:51

編集2019/12/05 01:36
m.ts10806

総合スコア80850

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

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

nem96

2019/12/06 08:27 編集

アドバイスいただきありがとうございます。 アドバイスを受けて、以下のようにDB接続関数を呼び出したのですが、「このページは動作していません HTTP ERROR 500」というエラーが出てきてしまいました。 以下のように、一番下にdbConnect()のDB接続関数を呼び出すように追記したのですが、どこが誤っているのか自力で調べても分かりませんでした…。 参考にしたサイト 「テスト環境と本番環境でDB接続を切り替える」 https://jobtech.jp/php/603/ ____▼dbconnect.php__________________________________________________ <?php //DB接続設定用ファイル(dbconnect.php)// function dbConnect(){ $db = parse_url($_SERVER['CLEARDB_DATABASE_URL']); $db['arabia_social2'] = ltrim($db['path'], '/'); $dsn = "mysql:host={$db['us-cdbr-iron-east-05.cleardb.net']};dbname={$db['arabia_social2']};charset=utf8"; $user = $db['b748bc5df82266']; $password = $db['*********']; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true, ); $dbh = new PDO($dsn,$user,$password,$options); return $dbh; } //DB接続関数を呼び出して接続 $db = dbConnect(); _______________________________________________________________________ 完全にお手上げ状態になってしまったので、お手すきの際にアドバイスいただけると幸いです。 よろしくお願い致します…。 (かれこれDB接続のエラーに試行錯誤し続けて1週間が経ってしまいました)
m.ts10806

2019/12/06 08:09

これは、関数をやめたということですかね。 いずれにしても変数名変えたら使ってる方のコードも合わせないといけません。
Y.H.

2019/12/06 08:13

> ▼書き直した「dbconnect.php」 $dbh に設定されてません。
m.ts10806

2019/12/06 08:17

requireやincludeはその読み込み先をその場で実行すると同義なので別ファイルに切り出す前にもとコードにそのまま貼って確認すると良いですよ。
nem96

2019/12/06 08:48 編集

ありがとうございます! 元コードをそのまま貼るという確認方法があったんですね! ただローカルホストで書いていた方法だとユーザーアクセス権限のエラーが出てきてしまったため、関数を使う書き方に戻しました(二転三転して申し訳ありません…)。 そこで関数を使い、アドバイスいただいたように、以下のようにDB接続関数を呼び出したのですが、「このページは動作していません HTTP ERROR 500」というエラーが出てきてしまいました。 ____▼dbconnect.php__________________________________________________ <?php //DB接続設定用ファイル(dbconnect.php)// function dbConnect(){ $db = parse_url($_SERVER['CLEARDB_DATABASE_URL']); $db['arabia_social2'] = ltrim($db['path'], '/'); $dsn = "mysql:host={$db['us-cdbr-iron-east-05.cleardb.net']};dbname={$db['arabia_social2']};charset=utf8"; $user = $db['b748bc5df82266']; $password = $db['*********']; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true, ); $dbh = new PDO($dsn,$user,$password,$options); return $dbh; } //DB接続関数を呼び出して接続 $db = dbConnect(); ________________________________________ ______▼login.php_______________________ <?php session_start(); require('dbconnect.php'); ini_set('display_errors', true); error_reporting(E_ALL); //cookieが入っているかチェック if($_COOKIE['email']!==''){ $email=$_COOKIE['email']; } if(!empty($_POST)){ $email=$_POST['email']; if($_POST['email']!=='' && $_POST['password']!==''){ $login=$db->prepare('SELECT*FROM members WHERE email=? AND password=?'); $login->execute(array( $_POST['email'], sha1($_POST['password']) )); $member=$login->fetch(); //パスワードや個人情報はセッション変数に保存しない if($member){ $_SESSION['id']=$member['id']; $_SESSION['time']=time(); if($_POST['save']==='on'){ setCookie('email',$_POST['email'],time()+60*60*24*14); } //ログインされたらトップページへ header('Location:index.php'); exit(); }else{ $error['login']='failed'; } }else{ $error['login']='blank'; } } ?> 一番下にdbConnect()のDB接続関数を呼び出すように追記したのですが、どこが誤っているのか自力で調べても分かりませんでした…。 参考にしたサイト 「テスト環境と本番環境でDB接続を切り替える」 https://jobtech.jp/php/603/ お二方のアドバイスを受け、変数名が一致しているのかも確認しましたが、「nullのところからpreperaファンクションを呼び出そうとしているよ!」とエラーが出ている「$db->prepare」の箇所も、DB接続ファイルで定義した変数($db)と一致しているので、変数名の統一はできていると思うのです…。 (DB難しいですね…)
m.ts10806

2019/12/06 08:47

$dbで受け取って使う方は$dbhになってるように見受けられますが。
Y.H.

2019/12/06 09:00

ini_set('display_errors', true); error_reporting(E_ALL); この2行は、 <?php の次の行に書きましょう。
nem96

2019/12/06 09:52

ご指摘を受けた通り、使っている方は「$dbh」にしていました…!恥ずかしながら見落としていました…。 そしてエラーチェックは<?phpの上に書きました! お二方ありがとうございます! ここまでアドバイスしていただいたことを元に、自分でもまた調べながら修正したのですが、やはり最初と変わらず、全く同じ箇所($bdh->prepareのところ)で「nullのところからpreperaファンクションを呼び出そうとしているよ!」というエラーが出続けてしまいます…。 __________________________________________ Fatal error: Uncaught Error: Call to a member function prepare() on null in /app/login.php:20 Stack trace: #0 {main} thrown in /app/login.php on line 20 _________________________________________ 現在最終的には以下のようなコードになっており、修正等加えた上で全体を見直しましたが、誤りが分かりません…。 ($dbhはreturnで返り値を受け取っているはずなのですが…) _______▼「dbconnect.php」__________________________ <?php //DB接続設定用ファイル(dbconnect.php)// function dbConnect(){ $db = parse_url($_SERVER['CLEARDB_DATABASE_URL']); $db['arabia_social2'] = ltrim($db['path'], '/'); $dsn = "mysql:host={$db['us-cdbr-iron-east-05.cleardb.net']};dbname={$db['arabia_social2']};charset=utf8"; $user = $db['b748bc5df82266']; $password = $db['********']; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true, ); $dbh = new PDO($dsn,$user,$password,$options); return $dbh; } ___________________________________ _______▼「login.php」__________________________ <?php ini_set('display_errors', true); error_reporting(E_ALL); session_start(); require('dbconnect.php'); ini_set('display_errors', true); error_reporting(E_ALL); //cookieが入っているかチェック if($_COOKIE['email']!==''){ $email=$_COOKIE['email']; } if(!empty($_POST)){ $email=$_POST['email']; if($_POST['email']!=='' && $_POST['password']!==''){ $login=$dbh->prepare('SELECT*FROM members WHERE email=? AND password=?'); $login->execute(array( $_POST['email'], sha1($_POST['password']) )); $member=$login->fetch(); //パスワードや個人情報はセッション変数に保存しない if($member){ $_SESSION['id']=$member['id']; $_SESSION['time']=time(); if($_POST['save']==='on'){ setCookie('email',$_POST['email'],time()+60*60*24*14); } //ログインされたらトップページへ header('Location:index.php'); exit(); }else{ $error['login']='failed'; } }else{ $error['login']='blank'; } } ?> ___________________________________ 丁寧なアドバイスをいただいているのに、何回も聞いていてそろそろ申し訳なくなってきました…。
Y.H.

2019/12/06 10:26 編集

dbconnect.phpの最後に以下1行を追加してください。 $dbh=dbConnect(); >$dbhはreturnで返り値を受け取っているはずなのですが… いえ、dbConnect()内のローカル変数$dbhをreturnしているだけです。 dbConnect()はどこからも呼び出されてないし、$login=$dbh->prepare()で使用している$dbhにセットもしていません。
m.ts10806

2019/12/06 10:15

コードは質問に追記してもらった方がマークダウン使えるので見やすいです
nem96

2019/12/06 15:38

本当ですね…!関数自体の呼び出しをし損ねるという致命的なミスをしていたことに、指摘されて初めて気づきました…。 本当にありがとうございます…! 教えていただいたおかげで、DB接続設定ファイルの記述は正しくできたと思われるのですが、新たに「2002」のエラーが発生してしまいました。 しかし今回の質問範囲でのエラーの解決はおかげさまで出来たのと、これ以上続けると何回もお尋ねして申し訳ないので、それは別途新たに質問を作ることに致します! 最後まで丁寧に分かりやすく教えていただきありがとうございました!
m.ts10806

2019/12/06 20:52

PHPマニュアルを必ず確認するようにしてください。 あと…コードはコメント欄ではなく質問本文へ。 質問は編集できますので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問