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

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

ただいまの
回答率

90.83%

  • PHP

    18663questions

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

  • MySQL

    5364questions

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

  • phpMyAdmin

    590questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

$_POSTに文字列が代入されない

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 147

kalon

score 77

皆様いつもお世話になっております。

実行環境は以下の通りです。
PHP:7.2.1
phpMyAdmin:4.7.7
MySQL:5.6.38

こちらのデータベースのmountの数値を
イメージ説明

PHPを使って増減させたいのですが、$_POST['code']に値がうまく入らず、エラーが出てしまいます。
イメージ説明

イメージ説明

<?php

function accessSQL(){
    $user = "root";
    $pass = "root";
    $dbh = new PDO('mysql:host=localhost;dbname=hozon;charset=utf8', $user, $pass);
    return $dbh;
}

try {
    $dbh = accessSQL();
    $stmt = $dbh->prepare("SELECT id, code, prod_name, mount, category, end_date from hozon where id = 56");
    $stmt->execute();
    $value_array = $stmt->fetchALL();
        foreach ($value_array as $value) {
            $value['code'];
            $value['prod_name'];
            $value['mount'];
        }
    }catch (PDOException $e){
        echo $e->getMessage();
    }


if (isset($_POST['change'])){
    echo 'new_mount is : '.$_POST['new_mount'];//テスト
    echo 'code is : '.$_POST['code'];//テスト:ここの$_POST変数にcodeが代入されない
    try{$dbh = accessSQL();
        $stmt = $dbh->prepare("update hozon set mount = :mount where code = :code");
        $stmt -> bindParam(':mount', $_POST['new_mount'],PDO::PARAM_STR);
        $stmt -> bindParam(':code',$_POST['code'], PDO::PARAM_STR); //ここの$_POST変数にコードが代入されない
        $stmt -> execute();
    }catch (PDOException $e){
        echo $e->getMessage();
    }
}

if (isset($_POST['cancel'])){
    [header('Location:./index.php')];
    exit();
}
?>
<!doctype html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <!--Import materialize.css-->
    <link type="text/css" rel="stylesheet" href="css/materialize.min.css"  media="screen,projection"/>
    <link type="text/css" rel="stylesheet" href="css/base.css"  media="screen,projection"/>
    <title>保存期限管理システム</title>
</head>
<form action="update.php" method="post">
    <div class="row input-field">
        <div class="col s2">
            <label>&nbsp;</label>
            <input type="text" name="code" placeholder="商品番号" value="<?php echo $value['code'];?>" disabled>
        </div>
        <div class="col s5">
            <label>&nbsp;</label>
            <input type="text" name="prod_name" placeholder="商品名" value="<?php echo $value['prod_name']; ?>" disabled>
        </div>
        <div class="col s5">
            <label>*個数(半角数字で入力してください)</label>
            <input type="number" name="new_mount" placeholder="個数" min="1" value="<?php echo $value['mount']; ?>" required>
        </div>

        <div class="row">
            <input type="submit" name="change" value="登録" class="regist btn btn-large">
            <input type="submit" name="cancel" value="キャンセル" class="btn-large cancel">
        </div>
    </div>
</form>

どうしたら$_POST['code']に値が入るようになるでしょうか?アドバイスとご教授のほどよろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+3

DBから受け取ったcodeをinputにうけてpostしなおしたときの処理ですね?

<input type="text" name="code" placeholder="商品番号" value="<?php echo $value['code'];?>" disabled>

disabled属性のタグはサブミットしたときにデータ渡しされません
disabled→readonlyとするか
disabledをとってtype="hiddenなどに変更するとよいでしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/11 13:02

    解決しました!「disabled属性のタグはサブミットしたときにデータ渡しされません」全く知りませんでした。的確なアドバイスをありがとうございます。

    キャンセル

+1

すみませんが、このコードだけでは何も答えられません

というのも、通常$_POST外部から来る値なのですが、送っている側のコードが不明なので、確認の方法がないからです。

このPHPコードを呼び出す側についても追記をお願いします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

$_POST['code']が空ということは、更新処理をするフォームに対して送ってきていないということになると思います。
別のphpファイルなどで表示しているフォームでしょうから、そちらのソースを見せてもらわないとなんとも言えません。
codeをcodaとかタイプミスしているんじゃないでしょうか。hidden属性で持たせるべきcodeが欠落していないでしょうか。

画面遷移も適切に過不足なく質問内に説明がほしいです。
入力→確認→更新処理と画面遷移してそれぞれphpファイルが別なのかどうかとか。
別だとした場合、
確認画面のformの中に<input type="hidden" name="code" value="<?php echo $_POST['code']?>" />とか必要ですが、いかがでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

echo 'code is : '.$_POST['code'];
→
var_dump($_POST);


と変更してみて、中身を確認してください。

このスクリプト、大量に問題点があるので、全体見直したほうが良いかと。

ざっくっと
・入力値確認なしに DB に突っ込もうとしている
・foreach ($value_array as $value) の $value を <input value=…> まで引きずっている & foreach 内で何もやっていない。 
・$dbh 作成時、ATTR_ERRMODE の設定がされていない。
・$dbh 作成時、なぜ try - catch しない?
・(出力時にエスケープはしてほしいなぁ)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/11 13:49

    ご丁寧なご指摘に感謝です。

    >・入力値確認なしに DB に突っ込もうとしている

    実装します。

    >foreach ($value_array as $value) の $value を <input value=…> まで引きずっている & foreach 内で
    >何もやっていない。

    foreach ($value_array as $value)をしないで、データベースからとってきた値を$value['code']のような連想配列にすることは出来るのでしょうか? & <input value=…>まで引きずらない方法は他にあるのでしょうか?

    >・$dbh 作成時、ATTR_ERRMODE の設定がされていない。

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);の一文を入れれば良いのでしょうか?

    >・$dbh 作成時、なぜ try - catch しない?
    function accessSQL(){
    try {
    $user = "root";
    $pass = "root";
    $dbh = new PDO('mysql:host=localhost;dbname=hozon;charset=utf8', $user, $pass);
    return $dbh;
    }catch (PDOException $e){
    echo $e->getMessage();
    }

    }

    こういうことでしょうか?

    >・(出力時にエスケープはしてほしいなぁ
    htmlspecialcharですね?実装します。

    キャンセル

  • 2018/05/11 18:35

    https://qiita.com/mpyw/items/b2a2b0e8e60ed4680f06

    私は、mpyw さんの書いている以下の記事で学習したのでオススメです。
    ・PHPでデータベースに接続するときのまとめ
    ・PDOフェッチパターン大全
    ・「何故htmlspecialcharsを通すのか?」を一言でどうぞ

    「PHPでデータベースに接続するときのまとめ」はボリュームもあり、中身も濃いので、初心者には難しいと思いますが、DB 接続する度に読み返すと、理解が進みます。

    頑張ってください。

    キャンセル

  • 2018/05/11 18:55

    教えてくださってありがとうございます。わかりました、読んでみます。

    キャンセル

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

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    18663questions

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

  • MySQL

    5364questions

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

  • phpMyAdmin

    590questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。