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

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

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

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

Q&A

3回答

815閲覧

Undefined indexエラーを解決したい

mikiko

総合スコア11

PHP

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

0グッド

0クリップ

投稿2021/06/24 02:26

過去に作ったCMSでエラーが出るようになってしまいました。
パスワードを変更する画面なのですが、
下記ファイルでUndefined indexエラーが表示されてしまいます。
(Notice: Undefined index: pw_id in /home/users/0/●●●●●●●/update.php on line 33)

13行目のmysql_real_escape_string($_POST['pw_id']));
のところのようなのですが、具体的にどのように記述すれば良いか
ご教示いただけないでしょうか。
どうぞよろしくお願いいたします。

以前はエラーが出ていなかったのに、
出るようになってしまうというのは、
サーバーの仕様変更なのでしょうか?

<?php if(!empty($_POST)){ if($_POST['pw'] and $_POST['pw_new'] and $_POST['pw_new2']){ if($_POST['pw_new']==$_POST['pw_new2']){ $sql=sprintf('SELECT * FROM password WHERE pw_id=0'); $OLD_PASS=sha1(mysql_real_escape_string($_POST['pw'])); $record=mysql_query($sql) or die(mysql_error()); $PASS=mysql_fetch_assoc($record); $SQL_PASS=htmlspecialchars($PASS['pw']); if($OLD_PASS==$SQL_PASS){ $sql_up=sprintf('UPDATE password SET pw="%s" WHERE pw_id=0', sha1(mysql_real_escape_string($_POST['pw_new'])), mysql_real_escape_string($_POST['pw_id']) ); mysql_query($sql_up) or die(mysql_error()); echo '<p>パスワードを変更しました。</p>'; } else{echo '<p>現在のパスワードが違います。</p><input type="submit" class="SEND" onClick="history.back()" value="戻る" />';} } else{echo '<p>新しいパスワードを確認してください。</p><input type="submit" class="SEND" onClick="history.back()" value="戻る" />';} } else{echo '<p>入力されていない項目があります。</p><input type="submit" class="SEND" onClick="history.back()" value="戻る" />';} } ?>

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

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

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

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

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

K_3578

2021/06/24 02:46

古すぎるものを直すのって1から作り直すより時間かかる気がする
退会済みユーザー

退会済みユーザー

2021/06/24 02:46

何をきっかけに発生するようになったのか、サーバーの仕様変更を疑うなら変更前と後の情報がないと判断できないよ、サーバーの仕様を確認してね。
guest

回答3

0

そもそもPOST送信するデータの仕様が示されていないので他人にはわからん。

$_POST['pw']
$_POST['pw_new']
$_POST['pw_new2']
に加えて出現する
$_POST['pw_id']も含めて、それぞれの違いや機能や目的がわからん。

mysql_real_escape_string()やmysql_query()とか
sha1()とか
今どき滅んだ古いやり方なところはツッコミ禁止でしょうか。

投稿2021/06/24 02:44

編集2021/06/24 05:06
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

過去に作ったCMSで

でしたら作った人に確認されたほうが良いと思います。
エラーは、エラーに書いてあるとおり、配列に指定のインデックス名(キー名)がないことによるものですが、じゃあ、「そのキーが存在したときだけ処理」のように単純に変更するだけで良いとは限りません。

リクエストを生成するフォームなどあるなら、そちらを見直したり、仕様変更に対応できてるかどうかを調査する必要があるかと思います。

投稿2021/06/24 02:38

m.ts10806

総合スコア80875

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

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

m.ts10806

2021/06/24 02:40

>mysql_query よほど古い実装なんでしょうね。 PHP7から削除された機能で実装されています。
guest

0

ここんとこ

php

1 $sql_up = sprintf('UPDATE password SET pw="%s" WHERE pw_id=0', 2 sha1(mysql_real_escape_string($_POST['pw_new'])), 3 mysql_real_escape_string($_POST['pw_id']) 4 );

sprintf のフォーマットでは置換対象がひとつしかないけど、値はふたつ指定してますよね。
なんかソース修正ミスってんじゃないの?
$_POST['pw_id'] も実際になさそげだし。

投稿2021/06/24 11:57

takasima20

総合スコア7464

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問