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

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

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

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

PHP

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

データベース

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

Q&A

解決済

2回答

828閲覧

データベースのテーブルを結び付けたいのですが方法が分かりません

higa_yomityu

総合スコア41

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

PHP

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

データベース

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

0グッド

0クリップ

投稿2020/11/18 16:54

編集2020/11/20 00:43

プログラミング初学者です。

現在、フォームの内容をMySQLに保存したいのですがどのようにして保存したらいいのかわかりません。

使用しているテーブルはmemberテーブルとpostsテーブルになり、フォームの内容をpostsテーブルに保存したいと考えています。(memberテーブルには会員情報が入っています)

memberテーブルのidというカラムとpostsテーブルのmember_idがプライマリーキーになっているため、
INSERT構文でSETしているmember_idにmemberテーブルのidを指定したいのですが記述の方法が分かりません。

今回の質問では
・My SQLにフォームの内容を保存する方法
・postsテーブルのmember_idとmemberテーブルのidを紐づけする方法
の2点を知りたいです。
皆様の知恵をお貸しください。よろしくお願いします。

php

1if($_POST['check']==='able'){ 2 $date=$db->prepare('INSERT INTO posts SET member_id=,data=able,created=time()'); 3 4 header('Location:main.php'); 5 exit(); 6 }elseif($_POST['check']==='wrong'){ 7  $date=$db->prepare('INSERT INTO posts SET member_id=,data=wrong,created=time()'); 8 header('Location:main.php'); 9 exit(); 10 }

html

1<form method="POST" action=""> 2 <button input type="submit" name="check" value="able">できた</button> 3 <button input type="submit" name="check" value="wrong">失敗した</button> 4</form>

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

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

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

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

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

hentaiman

2020/11/18 18:11

回答しといてなんですが、もしかして外部キーを設定したいという質問ですか?
m.ts10806

2020/11/18 22:46 編集

> フォームの内容をphpmyadminに保存したいのですが ですから、phpMyAdminはあくまでDB(MySQL/MariaDB)を操作するツールであると。 そこの定義から間違ってると話が通じません。
m.ts10806

2020/11/19 01:06

前に指摘した内容も反映されてないようですし、アドバイス聞く気ないなら他人を頼らないでくださいね。
higa_yomityu

2020/11/20 00:33

外部キーを設定したいというわけでは無いです! プライマリーキーで紐付けしているので外部キーの設定はしなくてもいいのかなと思っています。 もし現在のコードの記述で外部キーが必要という事でありましたらその理由を教えていただけると幸いです。
m.ts10806

2020/11/20 00:38 編集

先に「phpmyadminに保存」という表現を改めてもらえませんか。初学者の段階から間違えてるといつまでも初学者のままです。これに限らず用語や表現は正しく使うこと。 プログラムは書いた通りにしか動きません。 他人には書いた通りにしか伝わりません。
m.ts10806

2020/11/20 00:39

つまり >phpmyadminに保存したい という要件なら「そんなことできません。phpMyAdminってツールだし」という回答になります。
higa_yomityu

2020/11/20 00:39

すみませんでした! ご指摘ありがとうございます! 変更しました!
m.ts10806

2020/11/20 00:39

雑に対応しないこと。 >・phpmyadminにフォームの内容を保存する方法
guest

回答2

0

質問文の$dbが何なのか分からないけどPDOだと仮定すると
公式マニュアルのSQLを見てみると(サンプルはSELECTですが)

$sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();

executeで値を充てる必要がある事が分かります

・postsテーブルのmember_idとmemberテーブルのidを紐づけする方法

一般的に、ログインして使うサイトならセッションを元にユーザーIDを取得してINSERT時に使うでしょう。
しかしこれはプログラムの設計の問題なので質問者次第です。正しい回答は質問者の設計次第です。

投稿2020/11/18 17:40

編集2020/11/18 17:44
hentaiman

総合スコア6389

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

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

higa_yomityu

2020/11/20 00:28

ログイン時に必要なIDを$_session[ID]に格納しているのですが、その$_session[ID]をmember_idとして使用できるという事でしょうか? 見当違いな質問でしたらすみません。
m.ts10806

2020/11/20 00:42 編集

$_session というものは作らないかぎりないです。 $_SESSIONなら正しくセッションスタートすればあります。 コードで$_sessionと書いたら単にそういう変数はないとエラーになるだけ。
higa_yomityu

2020/11/20 00:51

$_SESSIONですね。 $_sessionでもいいだろうと甘い考えでした。何度もすみません。
m.ts10806

2020/11/20 00:55

いいかどうかはプログラムやコンパイラーが判断します。書いて実行してみれば分かりますよ。幾ら年功者から言い聞かされても、自分で失敗しないと覚えないことも多々あります。
hentaiman

2020/11/20 01:36

ログインに必要なID=nenber_idという事なら使えます。 そしてその判断は質問者にしか出来ません。なぜなら質問内容からは設計が分からないからです。 もしも「member_idを$_session[ID]に格納しているのですが」と質問されていればYESと答えています。
higa_yomityu

2020/11/20 14:40

executeに値を充ててみたのですが、mysqlに保存することができません。 elseif($_POST['check']==='wrong'){ $date=$db->prepare('INSERT INTO posts(member_id,data)VALUES(member_id=:member_id,worng)'); $date->execute(array( ":member_id"=>$mem, "wrong" )); header('Location:main.php'); exit(); } $memにはログイン時に必要な$_session[id]が格納されています。 $mems=$db->prepare('SELECT * FROM member WHERE id=?'); $mems->execute(array($_SESSION['id'])); $mem = $mems->fetch();
hentaiman

2020/11/20 15:04

> executeに値を充ててみたのですが、mysqlに保存することができません。 それは知りません。 質問文の内容だけでは不明な点を回答に書きましたがコメントではそれに対する返答もありません。よって何を使ってSQLを実行しているのかも分かりません。 さらにテーブル定義も分かりません。 具体的な変数の値も提示が無いので、そこまでの処理が正しいのか(デバッグをされているのか)すら分かりません。 どんなエラーが出ているのかも分かりません。 どんなSQLが実行されているのかも分かりません。 そういった状態でさらに追加で質問されてもなーんにもサッパリ分かりません。 自分は基本的に丸投げ(今の状態)に対するデバッグはしませんが、上記の情報漏れなく整理されて質問されれば指摘・修正点を回答する事もあります。 恐らく他の回答者も同様です。 なのでまずは手抜きせずに情報を整理し、質問に記載しましょう。質問は修正できます。
higa_yomityu

2020/11/25 15:20

恥ずかしながら、自分が何を分かっていないのかすら分かっていなかったことが分かりました。 henntaimannさんの言う通り、質問者が質問したいことを分かっていないのに質問を丸投げしても回答者が分かるはずもないですよね。 精進していきます。ご指摘ありがとうございます。
guest

0

自己解決

テーブルの設計から間違っていました。
テーブル間の紐づけがおかしくなっており、テーブルの設計をやりなおしてみました。
紐づけができていないのに誰が何をPOSTしたのかなんてわかるはずなかったです。

投稿2020/11/25 15:21

higa_yomityu

総合スコア41

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

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

m.ts10806

2020/11/25 20:30

なにをどうしたのか具体的に書いてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問