- 締切済み
PHPでユーザー登録画面を作成しています。
こんばんは。 初めて質問させていただきます。 PHP、JavaScriptの初心者です。 現在、会社の研修でPHPとJavaScriptを用いてユーザー登録画面を作成しています。 そこで、必須項目の未入力をJavaScriptでチェックしエラーメッセージを表示しています。 その入力されたデータをindex.phpのuser_tというデータベースのテーブルにINSERT文でID・名前・パスワード・性別を登録したいのですが、INSERT文の用い方がいまいち理解できず、上手く動きません。 どなたか、ご教授願います。 以下、HTMLを除いた登録画面のソースです。 <html> <head> <title>ユーザ登録画面</title> <script type="text/javascript"> </head> <body> <?php // データベース接続 $dbcon = pg_connect("dbname=" user=postgres password="); if (!$dbcon) { die("<hr>pg_connect 失敗<hr>"); } //元の登録情報をそのまま持ってくる if(!empty($_GET['update_user_id'])){ $result = pg_query($dbcon,"SELECT * FROM TM_USER WHERE user_id='".$_GET['update_user_id']."'"); $row = pg_fetch_assoc($result); $new_user_id = $row['user_id']; $new_name = $row['name']; $new_password = $row['password']; $new_tel = $row['tel']; $new_mail = $row['mail']; $new_gender = $row['gender']; } ?> <script type="text/javascript"> function chkHissu(frm){ // 必須入力のname属性 var hissu=Array("user_id","name","password","gender"); // アラート表示用 var hissu_nm = Array("ユーザID","ユーザ名","パスワード","性別"); // 必須入力の数 var len=hissu.length; var hasError = false; var isFocused = false; var errorMsg = ""; for(i=0; i<len; i++){ var obj=frm.elements[hissu[i]]; // テキストボックス or テキストエリアが入力されているか調べる if(obj.type=="text" || obj.type=="textarea"){ if(obj.value==""){ // 未入力のエレメントにフォーカスを当てる hasError = true; if (!isFocused) { frm.elements[hissu[i]].focus(); isFocused = true; } // エラーメッセージ if(errorMsg != "") { errorMsg += "<br>"; } errorMsg += hissu_nm[i] + "が未入力です。"; } }else{ // 性別がチェックされているか調べる var chk = 0; for(var j=0; j<obj.length; j++){ // チェックされていたらchkフラグをプラス if(obj[j].checked) chk++; } if (chk == 0) { hasError = true; if(errorMsg != "") { errorMsg += "<br>"; } errorMsg += "性別が未入力です。"; } } } // エラーメッセージを指定の場所に表示 if(hasError){ var msg = document.getElementById("msg"); msg.innerHTML = errorMsg; return false; } // エラーじゃない場合indexに遷移 else{ document.userForm.action='maintenance.php'; document.userForm.submit(); } } </script> 以下、index.phpという検索機能やuser_tというテーブルを表示している画面、HTMLを除いたソースです。 <html> <head> <title>研修テスト</title> <script type="text/javascript"> <!-- // 削除リンク押下時にダイアログ表示 </head> <body> <?php // データベースへの接続 $dbcon = pg_connect("dbname= user=postgres password="); if (!$dbcon) { die("<hr>pg_connect 失敗<hr>"); } <// SQL の生成 $sql = ""; $where = ""; // ユーザ名が空白でない場合 if(!empty($_POST['input_user_name'])){ $where .= " WHERE NAME like '%".$_POST['input_user_nam_user_name'])){ $where .= " WHERE NAME like '%".$_POST['input_user_name']."%'" ; } // ユーザIDが空白でない場合 if(!empty($_POST['input_user_id'])){ if(empty($where)){ // $where が空の場合は、WHEREを追加 $where .=" WHERE "; } else{ // $where が空でない場合は、追加するためにANDを追加 $where .= " AND "; } $where .= " USER_ID = '".$_POST['input_user_id']."'"; } // 性別が空白でない場合 if(!empty($_POST['input_gender'])){ if(empty($where)){ // $where が空の場合は、WHEREを追加 $where .= " WHERE "; } else{ // $where が空でない場合は、追加するためにANDを追加 $where .= " AND "; } $where .= " GENDER = '".$_POST['input_gender']."'" ; } // ソート条件の追加 $sql .= "SELECT USER_ID,NAME,PASSWORD,TEL,MAIL,GENDER FROM TM_USER ".$where.' ORDER BY USER_ID'; // Queryの実行 $result = pg_query ($dbcon, $sql); if (!$result) { pg_last_error($dbcon); die( "pg_query SELECT 失敗<hr>"); } : 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- agunuz
- ベストアンサー率65% (288/438)
>INSERT文の用い方がいまいち理解できず、上手く動きません。 上手く動くとか動かないとか以前に、INSERT文を実行している部分が見当たりません。どこで実行するおつもりなんでしょうか(回答者に推測しろということでしょうか)。 「必要なエスケープをしよう」と思ってマニュアルを探っていればINSERTの文例も出てきたと思うのですが・・・ http://www.php.net/manual/ja/function.pg-escape-string.php (蛇足) phpカテゴリなので(長々と引用された)JavaScript部分はまったく読んでいません。無駄なテキストでしかありません。質問するときには「必要な記述を最低限の量で」提示することを意識してください(それもプログラミングスキルの一部です)。
いろいろツッコミどころ多すぎて・・・ とりあえず一番大事なことを言うと・・・このコードSQL文にGETで受け取った値そのままぶち込んでますよね?SQLインジェクションできちゃいますよ・・・
お礼
お答えありがとうございます。 SQLインジェクション調べさせていただきました。 研修で作成したものではなく、実際に利用するものだったらと考えると危ないことが分かりご指摘いただけてよかったです。
お礼
お答えありがとうございます。 プログラミングスキルがないことはこのようなところでも出てしまうとは、まだまだ勉強不足でした。 INSERT文を入れて実行後、動かなかったため削除してから保存したプログラムを記載しておりました。申し訳ありません。 一応、<?php 内のデータベース接続の後に入れていました。