🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

解決済

1回答

729閲覧

phpによるDBの上書きについて

daichi-onoue

総合スコア53

PHP

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

0グッド

0クリップ

投稿2020/01/05 08:24

前提・実現したいこと

db(mysql)に書き込まれているデータをphpのpostで上書きする。
submitを押すと、moneyの欄のみ更新される。
また、user_idはauto_incrementで自動配布になっているため、user_idから該当の欄を呼び出し、更新することが好ましい。
ログイン画面を実装しているため、user_idを逐一指定する必要はない。
("user_id"="2"  のように…。)

下記ソースであれば、上書きではなく、新規作成になってしまう。
イメージ説明

発生している問題・エラーメッセージ

Notice: Undefined index: id in C:\xampp\htdocs\cfabond\create.php on line 24 Notice: Undefined variable: dbh in C:\xampp\htdocs\cfabond\create.php on line 49 Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\cfabond\create.php:49 Stack trace: #0 {main} thrown in C:\xampp\htdocs\cfabond\create.php on line 49

該当のソースコード

<?php session_start(); include_once 'dbconnect.php'; if(!isset($_SESSION['user'])) { header("Location: index.php"); } // ユーザーIDからユーザー名を取り出す $query = "SELECT * FROM users WHERE user_id=".$_SESSION['user'].""; $result = $mysqli->query($query); $result = $mysqli->query($query); if (!$result) { print('クエリーが失敗しました。' . $mysqli->error); $mysqli->close(); exit(); } // ユーザー情報の取り出し while ($row = $result->fetch_assoc()) { $username = $row['username']; $email = $row['email']; $money = $row['money']; } // データベースの切断 $result->close(); ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>chenge db</title> <link rel="stylesheet" href="style.css"> <!-- Bootstrap読み込み(スタイリングのため) --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"> </head> <body> <div class="col-xs-6 col-xs-offset-3"> <?php // signupがPOSTされたときに下記を実行 if(isset($_POST['signup'])) { $username = $mysqli->real_escape_string($_POST['username']); $email = $mysqli->real_escape_string($_POST['email']); $password = $mysqli->real_escape_string($_POST['password']); $password = password_hash($password, PASSWORD_BCRYPT); $money = $mysqli->real_escape_string($_POST['money']); // POSTされた情報をDBに格納する $query = "INSERT INTO users(money) VALUES('$money')"; if($mysqli->query($query)) { ?> <div class="alert alert-success" role="alert">登録しました</div> <?php } else { ?> <div class="alert alert-danger" role="alert">エラーが発生しました。</div> <?php } } ?> <center> <form method="post"> <div class="form-group"> <input type="text" class="form-control" name="money"placeholder="used" required /> </div> <button type="submit" class="btn btn-default" name="signup">submit</button> </form> </center>

試したこと

$sql = "UPDATE **** SET *** = ?? WHERE ** = ?";
の構文を使用しようと試みましたが、idの取得などで分からないことが多く、断念しました。

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

断念しました

とは言え、UPDATE以上に効率的な更新の手段はありません。
「上書き」なら尚更です。覚えてください。

※deleteしてinsertしたとしてもID変わるし運用的にとても良いとは言えませんし、むしろ「ID指定で」ならUPDATEもできたも当然でしょう。

insertでもselectでも同じですが、まず直接DBに対して実行して想定の結果・効果が得られるSQLを作成するところから。PHPに組み込むのはSQLの母体が出来てからです。

投稿2020/01/05 11:00

編集2020/01/05 11:01
m.ts10806

総合スコア80875

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問