DBへ追加&更新 追加不能状態です!

このQ&Aのポイント
  • 会員個々にDBへ書き込みができない状態です。更新はできてもデータが無いため無意味です。
  • 追加するソースが原因かもしれません。すでにデータが存在する場合は表示し、データが存在しない場合は追加する仕組みです。
  • 注意点は、会員情報の更新ができるが、追加ができないことです。
回答を見る
  • ベストアンサー

DBへ追加&更新 追加不能状態です!

お世話になっております! ユーザー個々に自由に書き込み・更新作業の出来るスペースを作っていたのですが・・・。 会員登録と会員情報の更新の様な仕組みと思っていただければと思います。 更新作業をするソースは完成したのですが追加するソースが出来ません。 と言いますのは、会員個々にDBへ書き込みができないと言う事なんです。 つまり、更新は出来てもそもそもデータが無いので意味が無い状態です。 追加するソースです $result1 = $DB->execute("INSERT INTO $k_koukoku_table values('',k_name='$[2]' where k_name='$id'"); フォームソースです <textarea name="2" rows="1" id="2"><?=$id?></textarea> 多少ソースは省いてます。おそらく追加するプログラムが原因かと思っています。 すでにデータが存在する場合は、データ抽出を行い表示させて、更新を行いデータが存在しない場合は追加をすると言う事になっております。 データ抽出と更新のプログラムは完成しているので記載していません。 宜しくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • manimani2
  • ベストアンサー率70% (12/17)
回答No.2

だいぶ状況が見えてきました(笑 一番てっとり早いのは、SUBMITがあるフォーム側のHTMLと、それを受け取っている(ハズ)のPHPファイル側のソースとコードを公開していただくことですが、まぁ、状況によっては難しい場合もありうると思うので、参考程度に読んでください。 >初めは$pr[2]になっていました。(自分で色々していて外してしまいました) これではインサートされるはずがありません。変数というのは箱のようなもので、中に情報を入れて使うものです。今回、本来ならば「pr」という箱(変数)に何かの情報(ここでは登録したい内容のこと)を入れ(代入し)て処理していたのです。ですから、SQL文では「prという箱の中身をデータベースに登録してね」という内容の文章になっていたはずです。つまり、今回「pr」という部分を削ってしまったため、箱の名前を命令文(SQL文)から抜いてしまった事になり、登録すべき情報の入った箱の名前を指定していないが為、何も登録できずに終わっているのでしょう。 >変数と言うのを調べるためにはどうしたらよいですか 変数名は製作者がほぼ自由に決めることが出来ますので、具体的に正しい変数名はわかりませんが、もしも、別のページから登録すべき内容をフォームか何かから送信し、受け取っているのであれば「$変数名 =$_POST['○○○']」とか「$変数名=$_GET['○○○']」とかで、受け取った情報を変数に入れているはずです。そこを探してください。 ちなみに、今回、もともとは配列型になっていたようなので、その変数名の近くに「array」という言葉が出ているかもしれません。 >ちなみに追加ソース自体はこれで行けますか。 上の変数名の如何によって変わります。 >テーブルが変わると変数と言うのも変わってしまうんですね テーブルを変えて、登録する中身も変えるならそうかもしれません。テーブルが変わることと変数名が変わることは本来無関係です。 ということで、とにかく情報量が足りなさ過ぎますが、たぶん上記のことを確認し、クリアできれば動くと思います。ただし、基本的な部分で誤解されているような箇所もお見受けできますので、まず、もともとのサンプルコードを精読していただき、「一体、どこで何をしているのか」をお考えください。それが早道です。

iinnffoo
質問者

お礼

こんばんは! とても詳細な所までご教授頂き大変恐れ入ります。 別なファイルで受け取っていると言う事だったんですね・・・。 私の裸を見られた様な感じになりました。受け取っているファイルを探してみます!そこから辿って行きたいと思います。 ありがとうございました!m(__)m

iinnffoo
質問者

補足

こんにちは! パソコンからの設定とユーザー設定のページに分かれていました。 別なファイルで受け取っていたみたいです。 元々の$prのある変数とテーブル移動をした変数を入れ替えてしてみました。そうした所無事に追加する事が出来ました! 一安心と落ち着いていた所、Warning エラーでました。 「うわっ」と思ってWarningエラーを検索してみました。 どうやら受け取りページと入力ページの関数みたいなものの個数が合わない場合に出るらしいと書いてあり訂正しました。 そうしたら無事に願っていた機能がバッチリ完成いたしました。 有り難う御座いました。 実は一ヶ月以上これに悩まされておりました。。。 奇跡と言いますかたまたま一回は追加されたものの・・・それからが地獄の始まりでした。 作成者さんになんども聞けずこちらで質問いたしました。 本当に良かったです!(≧∇≦)

その他の回答 (1)

  • manimani2
  • ベストアンサー率70% (12/17)
回答No.1

こんにちは。 エラーが出て出来ないということでしょうか? (まぁ抽出・更新できているということなので、そういう事なんだと思うのですが) エラー文を掲載できますか?それがあるとないとでは、回答の集まり具合が違います(^^ 気になったのは $[2] というところ。これは「$」のあとに本来何か変数名が入っているのではないですか?それがないので、インサートされずにエラーがでる(もしくはスルーしている)とかではないでしょうか?

iinnffoo
質問者

お礼

こんにちは! ありがとうございます! エラーは出ていないです!Submidを押しても何事も無かったかのように・・・って感じです。 実は・・・そこにprと言う文字ありました。 初めは$pr[2]になっていました。(自分で色々していて外してしまいました) 実は別なテーブルへの追加ソースの改良だったんです。(この場合変数も変わりますか) ・・・テーブルが変わると変数と言うのも変わってしまうんですね・・・。 その変数と言うのを調べるためにはどうしたらよいですか・・・。 ちなみに追加ソース自体はこれで行けますか。 分かりづらくてすみませんm(__)m よろしくお願い致します。

関連するQ&A

  • VB2005 データセットの内容をDBに更新

    VB2005Expressにて開発を行っています。 ・DBから条件を指定して抽出した値をデータセットにセット ・データセット内の値を編集(追加、更新、削除) ・データセットの値をDBへ更新 という処理を行った場合、DB側では 1.データセットの値だけが更新される  (抽出されてないデータは残っている) 2.データセットの値に更新されるので、データセットの値のみになる  (抽出されてないデータは消えてしまう) のどちらなのでしょうか。 どなたかご存知でしたら教えてください。

  • DBをまたいで更新

    現在、testDB1とtestDB2というDBが存在します。 それで、testDB1のtable.idとtestDB2のtable2.idを SELECT文で比較して、同じidの場合はtestDB2のtable2.dataに 1という値を格納したいと思っています。 それで、DBをまたいで更新するときの記述が分からず ネットで検索したのですが、うまくヒットしませんでした。 そもそもDBをまたいで問い合わせや更新等はできないのでしょうか? できない場合、代替の方法があったら教えて頂けますでしょうか。 よろしくお願い致します。

  • SQLite3にPHPでデータの更新・追加する方法

    PHP初心者です。 すみません、どなたか教えてください。 SQLite3 のデータベース内にあるテーブルに、同一データがすでにある場合はそのデータを更新、無い場合はデータを追加したいのですが、PHPではどのように書けばよいのでしょうか? 具体的には、hoge.dbの中のテーブル prime_ministers があり、 id 1, name 伊藤博文, origin 長州 id 2, name 黒田清隆, origin 薩摩 上記の2データはすでに保存されているものとします。 そこにデータを追加するのですが、 name 伊藤博文, origin 長州 の場合は、もうすでにテーブル内に伊藤博文のデータがあるので、上書き更新、 name 大隈重信, origin 肥前 の場合は、nameのカラムに大隈重信が無いので、データを追加。 データベースがSQLite3の場合、どのように書けば良いのでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • DBの環境変数について

    OracleのユーザIDやパスワード等がかかれている環境設定専用のファイルを読み込み、 環境変数に読み込んだ内容をセットし、DBからデータを抽出するというサブルーチンを作っています。 ファイルを読み込み、環境変数にセットするところまでは動くのですが、 DBからデータを抽出することができません。 ただし、ファイルを読み込まずじかにサブルーチンの中に書き込んでいると正しく抽出することができます。 原因がまったくわからないので、アドバイスをお願いします。 -----以下環境ファイル読み込みプログラムの一部----- my $env_file= '○/△/■';←環境設定のファイルパス open(KAN, $env_file); while(<KAN>){ ($name, $val) = split(/=/, $_);←環境ファイルを=で分割 chomp($val); $kankyou{$name} = $val; ←取得したものをハッシュに } close(KAN); $ENV{'userid'} = $kankyou{'db_userid'}; $ENV{'passwd'} = $kankyou{'db_passwd'}; $ENV{'dbstring'} = $kankyou{'db_dbstring'}; このあとDBからのデータ抽出処理実行と続く ---------------------------------- ---ここから環境ファイルの内容--- db_userid=AAA db_passwd=BBB db_dbstring=CCC ↑この内容を下記の書き方でサブルーチンの中で直接書くと動く。 $ENV{'userid'} = 'AAA';

    • ベストアンサー
    • Perl
  • ユーザーが画面上からDB上のデータの並び替えをする際、効率的な実装方法は?

    EC サイトを構築しており、 店舗管理者が商品の並びを自由に替えるようにしたいです。 例えば、以下のようなテーブルが DB 内にあるとします。 +---+-------+ |ID | name | +---+-------+ | 1 | 商品1 | | 2 | 商品2 | | 3 | 商品3 | | 4 | 商品4 | | 5 | 商品5 | +---+-------+ ユーザーが 商品1 - 商品4 - 商品2 - 商品3 - 商品5 という順で並べ替えを行う機能を実装するには 以下の 2 つの方法が考えられます。 【方法1】 rank というカラムを追加して +---+-------+------+  +---+-------+------+ |ID | name | rank |  |ID | name | rank | +---+-------+------+  +---+-------+------+ | 1 | 商品1 |  1 |  | 1 | 商品1 |  1 | | 2 | 商品2 |  2 | => | 2 | 商品2 |  3 | | 3 | 商品3 |  3 |  | 3 | 商品3 |  4 | | 4 | 商品4 |  4 |  | 4 | 商品4 |  2 | | 5 | 商品5 |  5 |  | 5 | 商品5 |  5 | +---+-------+------+  +---+-------+------+ と rank を更新し、rank の昇順で表示させる 【方法2】 next_id というカラムを追加して +---+-------+---------+  +---+-------+---------+ |ID | name | next_Id |  |ID | name | next_id | +---+-------+---------+  +---+-------+---------+ | 1 | 商品1 |    2 |  | 1 | 商品1 |    4 | | 2 | 商品2 |    3 | => | 2 | 商品2 |    3 | | 3 | 商品3 |    4 |  | 3 | 商品3 |    5 | | 4 | 商品4 |    5 |  | 4 | 商品4 |    2 | | 5 | 商品5 |     |  | 5 | 商品5 |     | +---+-------+---------+  +---+-------+---------+ と next_id を更新し、 ID と next_id を交互に見ながら画面に並べる 【方法2】では、どんなにデータ数が多くなっても 3 レコードだけ更新すれば済みますが 【方法1】だと、データ数が多くなれば かなりの数のレコードを更新する必要があります。 ところが、 【方法1】だと SQL の order by rank でソートできるのに対し、 【方法2】だと全データを取得してからプログラムで並べ替えを行わなくてはならない と思います。 そこで、【方法2】を使い、かつ SQL で簡単に取得できる方法はないか探しています。 【方法2】で、素直にプログラムで並べ替えればいいという意見もあるかと思いますが ページ送りのある一覧画面で並べ替えもさせたいと思っており、 DB 側でで並べ替えられたデータを limit で 1 画面に表示する件数分だけ取得する ということを行いたいのです。 もし、うまい方法があれば宜しくお願い致します。 DB は MySQL を使っていますが、他の DB にすることも可能で、 バージョンも問いません。

  • トランザクションが原因?DBにデータ追加出来ません

    言語:PHP Framework:symfony DB:MySQL DBにデータを追加したいのですが、 [Rollback failed. There is no active transaction.] といったエラーが表示され、追加することが出来ません。 【ソース】 ------------------------------------------------------ try { $connection->beginTransaction(); ★DB追加処理; $connection->commit(); } catch (Exception $e) {   // ここで[Rollback failed. There is no active transaction.]というエラーが表示されます echo $e->getMessage(); $connection->rollBack(); } ------------------------------------------------------ DB追加処理の部分でエラーとなり、catchに飛ばされていたので、初めは追加の方法が間違っているのかと思ったのですが、下記の3つをソースから外すと正常に追加されました。 $connection->beginTransaction(); $connection->commit(); $connection->rollBack(); ※正確に言うと「$connection->beginTransaction();」を外すだけで追加出来ました。 また、これは私の勘違いかもしれませんが、初めてこの処理を行った時は正常にDBに追加されました。 実際にDBにデータが入ったのを確認しています。 ですが、2回目以降?からは、上記のように[Rollback failed. There is no active transaction.]というエラーが表示され、追加出来なくなりました。 ちなみにDB接続にはPDOというものを使用しているようです。 追加処理の部分に関してはSymfonyの方法で、下記のように実装しています。 ------------------------------------- $user = new T_USER(); $user->setName($name); $user->setAge($age); $user->save(); ------------------------------------- 何かヒントになるようなことでも構いませんので、分かる方がいらっしゃいましたらよろしくお願いします。 質問の内容に不備な点がございましたら、申し訳ありません。 以上です。

    • ベストアンサー
    • PHP
  • VB2008を用いたDBの更新について

    始めまして。 VB2008とMySQL2008を用いて簡単な商品管理のプログラムを作成しようと しているのですが、VBを使って自分で作成したDBへ追加するといった処理が どうしても上手くいかない為、質問させていただきにきました。 /*****VB2008のプログラム*****/ '商品情報追加 Private Sub 追加btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 追加btn.Click Dim r As FDA_DBDataSet.商品マスタRow Try r = Me.FDA_DBDataSet.商品マスタ.New商品マスタRow() r.Item(0) = 商品ID_text.Text r.Item(1) = 商品名_text.Text r.Item(2) = CInt(単価_text.Text) r.Item(3) = 型番_text.Text r.Item(4) = 仕入先CD_text.Text r.Item(5) = CInt(リードタイム_text.Text) r.Item(6) = 備考_text.Text Me.FDA_DBDataSet.商品マスタ.rows.Add(r) Me.商品マスタTableAdapter.Update(Me.FDA_DBDataSet.商品マスタ) Catch ex As Exception MsgBox("入力値エラーです。正確な値を入力してください。", 0, "エラー") End Try Me.商品マスタTableAdapter.商品IDソート(FDA_DBDataSet.商品マスタ) End Sub /*****ここまで*****/ 上記の処理はVBのフォーム上で追加というボタンを押したらFDA_DBという名前のDBの 商品マスタというテーブルにフォーム上で入力したデータを書き込むという処理をしようとしています。 追加ボタンを押したとき、プログラムが起動している最中はフォーム上のDataGridViewにはきちんと値が追加され表示もできているのですが、実際にDBの中身を確認してみるとDBへの追加処理が行われておらずプログラムを再起動させると当然ながら追加していたデータも消えてしまいます。 どうにかして実際のDBに反映させる方法はないでしょうか?

  • 重複を除くカウントの取得方法

    御晩です。 ----------------- <?php //カウント $id= "$k_id"; $id = mb_convert_encoding($k_id,"EUC-JP","SJIS"); $id_count = $DB->getone("SELECT count(*) FROM ".$k_koukoku_log_table." ".$k_koukoku_inp_table." where a_num =$k_id"); ?> カウント数は<?=$id_count?>です。 ----------------- 上記は重複もカウントされてしまいます。 ユーザー個々に広告番号があり($k_id)、その広告番号をクリックされた回数を同一人物(重複)を除いてのカウントを表示したいと思っています。

    • ベストアンサー
    • MySQL
  • 基本的なmysqlのDB操作につきまして

    PHPの初心者です。あまり上達せず、困っていました。 よろしくお願いします。 用件は、POSTからもらったデータをMysqlへ追加する操作です。 とある参考書に書いてあるように、 しても、エラーで追加されません。 ちなみに、$commentの箇所を省いて、nameとpasswordだけにすると ちゃんと追加されます。これが不思議なんです。 DBへのアカウントやパスは間違っていません。 PHPのバージョンは5です。 // データの文字コードを変換する関数 function cnv_dbstring{ XXXXXX変換するコードXXXXX } if (count($_POST) > 0) { $name = $_POST["name"]; $password = $_POST["password"]; $comment = $_POST["comment"]; // データが送信されたときはデータを追加する if (strlen($name) and strlen($password) and strlen($comment)){ // データを追加する $sql = "INSERT INTO xx_xxxx_usr(name, password, comment) VALUES( '".cnv_sqlstr(cnv_dbstring($name, $db_enc))."', '".cnv_sqlstr(cnv_dbstring($password, $db_enc))."', ".cnv_sqlstr(cnv_dbstring($comment, $db_enc)).") ;"; mysql_query($sql, $conn) or die("データ追加エラー"); ←このエラーが出ます。 echo "<p>追加されたデータのID:".mysql_insert_id($conn); } }

    • ベストアンサー
    • PHP
  • sqliteへのデータ追加

    sql文で質問です。接続は1-29の表示を確認済み。 掲示板を作る練習をしているのですが、とりあえずpostなどのユーザーから受け取り値をdbに保存・表示する前に、自分で保存(カラムは左から順にid,name,sexになっていてidの1~29は埋まっている状態です。)・表示してみようと思いtest.dbのhumanテーブルに「データの追加」と表記している部分をテーブルに書き込み表示したいのですが、エラーは表示されないもののid30番にデータの追加ができておらず困っています。 データを追加する方法を教えてください。 <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの追加 $sql = 'INSERT INTO human( id, name, sex, ) VALUES ( 30, "吉川", "男", )'; // データの取得 $sql = 'SELECT * FROM human WHERE id BETWEEN 1 AND 50;'; $res = $db->query($sql); while( $row = $res->fetchArray() ) { echo '<ul>'.'<li>'. $row[0] . $row[1] .$row[2].'<li>'.'<ul>';} ?>

専門家に質問してみよう