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

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

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

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

2342閲覧

PHPで作るユーザ登録情報の変更

naiurhg

総合スコア13

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2021/08/24 07:23

前提・実現したいこと

現在、PHPとXAMPPのmysqlを使って、ユーザの登録情報変更の機能を実装しています。
しかし、ユーザ情報をforeachで配列にいれるときに以下のようなエラーが発生します。
ユーザ情報(name、e-mail、id)を取得し、表示することはできます。
解決方法を教えていただきたいです。よろしくお願いします。

【データベースの情報】
テーブル:users
カラム:id, name, email, password

・index.phpのbuttonを押すと、edit.phpに飛びます。

エラーメッセージ

Warning: Undefined array key "id" in edit.php on line 11

ソースコード

######index.php

index.php

1<?php 2 3try { 4 5 $dbh = new PDO($dsn, $user, $password); 6 7 $stmt = $dbh->query('SELECT * FROM users'); 8 9 $result = 0; 10 11 $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 12 13} catch (Exception $e) { 14 echo 'エラーが発生しました。:' . $e->getMessage(); 15} 16 17?> 18 19<!DOCTYPE html> 20<!-- 略 --> 21 22<h2>プロフィール</h2> 23 <?php foreach ($result as $user): ?> 24 <p>ユーザー名: 25 <?php echo $user['name'] ?></p> 26 <p>メールアドレス: 27 <?php echo $user['email'] ?></p> 28 <p>パスワード:********</p> 29 <div class="change-button"> 30 <button type="button" onclick="location.href='./edit.php'". <?php echo $user['id'] ?>> 31 変更する 32 </button> 33 <?php endforeach; ?> 34 </div> 35</html>

######edit.php

edit.php

1<?php 2 3try { 4 5 $dbh = new PDO($dsn, $user, $password); 6 7 $stmt = $dbh->prepare('SELECT * FROM users WHERE id = :id'); 8 9//エラーメッセージの11行目 10 $stmt->execute(array(':id' => $_GET["id"])); 11 12 $result = 0; 13 14 $result = $stmt->fetch(PDO::FETCH_ASSOC); 15 16} catch (Exception $e) { 17 echo 'エラーが発生しました。:' . $e->getMessage(); 18} 19 20?> 21 22<!DOCTYPE html> 23<!--略--> 24<h2>プロフィール編集</h2> 25 <form action="update_profile.php" mthod="POST"> 26 <input type="hidden" name="id" value="<?php if (!empty($result['id']))echo h($result['id']); ?>"> 27 <p> 28 <label for="name">ユーザー名</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 29 <input type="text" name="name" value="<?php if (!empty($result['name'])) echo h($result['name']); ?>"> 30 </p> 31 <p> 32 <label for="email">メールアドレス</label> 33 <input type="email" name="email" value="<?php if (!empty($result['email'])) echo h($result['email']); ?>"> 34 </p> 35 <p> 36 <label for="password">パスワード</label> 37 <input type="password" name="password" value="********"> 38 </p> 39 <p> 40 <label for="password_conf">パスワード確認</label> 41 <input type="password" name="password_conf" value="********"> 42 </p> 43 44 <div class="save-button"> 45 <button type="button">保存する</button> 46 </div> 47 </form> 48</html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

クエリストリングの構成が間違っていますしクォートの位置がおかしいです。
ブラウザに表示したときのhtml確認を。
onclick="location.href='./edit.php'".123>
↑こんな感じになってるはず

クエリストリングの構成はこう
URL?key=value&key=value…

今回だと、こうなるように組むこと。
onclick="location.href='./edit.php?id=123'">

formでgetにして送信するとこのようなURLになるのでそちらに切り替えるのもありです。

投稿2021/08/24 07:37

編集2021/08/24 07:39
m.ts10806

総合スコア80850

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

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

naiurhg

2021/08/24 11:09

大変勉強になりました。回答いただいてありがとうございました!!
naiurhg

2021/08/30 06:08

申し訳ございません...。 そもそもマイページが全員共通のページで表示されるようになっていたため、マイページを各ユーザに合わせたページに修正しました。次に、クエリストリングを理解せず使っていたことも原因でした。「.」で結合し、「""」で囲むこと。また、シングルコーテーションで変数を囲むと文字列として扱われることも知りました。
m.ts10806

2021/08/30 06:48

>「.」で結合し、「""」で囲むこと。また、シングルコーテーションで変数を囲むと文字列として扱われることも知りました。 というか「htmlとして正しく解釈される文字列の出力」を目指せば自ずと使う機能は決まります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問