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

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

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

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

Q&A

解決済

2回答

1074閲覧

phpによる、DB書き込み

daichi-onoue

総合スコア53

PHP

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

0グッド

0クリップ

投稿2020/03/10 02:13

編集2020/03/10 02:15

前提・実現したいこと

htmlのフォームでpostされるとDBに書き込む機能を実装中に以下のエラーメッセージが発生しました。

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

エラーが発生しました (フォーム送信の際にifで分けた ソースを見ていただければわかると思います。)

該当のソースコード

php

1 2<?php 3session_start(); 4include_once 'dbconnect.php'; 5if(!isset($_SESSION['user'])) { 6 header("Location: index.php"); 7} 8 9// ユーザーIDからユーザー名を取り出す 10$query = "SELECT * FROM users WHERE user_id=".$_SESSION['user'].""; 11$result = $mysqli->query($query); 12 13$result = $mysqli->query($query); 14if (!$result) { 15 print('クエリーが失敗しました。' . $mysqli->error); 16 $mysqli->close(); 17 exit(); 18} 19 20// ユーザー情報の取り出し 21while ($row = $result->fetch_assoc()) { 22 $username = $row['username']; 23 $email = $row['email']; 24 $class = $row['class']; 25} 26 27// データベースの切断 28$result->close(); 29 30?> 31<?php 32 33// 接続 34$link = mysqli_connect('mysql1.php.xdomain.ne.jp', 'kinransenri_ad', 'keentorun', 'kinransenri_cfabond'); 35 36if (!$link) { 37 echo "データベース接続失敗" . PHP_EOL; 38 echo "errno: " . mysqli_connect_errno() . PHP_EOL; 39 echo "error: " . mysqli_connect_error() . PHP_EOL; 40 exit; 41} 42 43echo 'データベース接続成功'; 44 45 46?> 47 48<!DOCTYPE HTML> 49<html lang="ja"> 50<head> 51<meta charset="utf-8" /> 52<meta name="viewport" content="width=device-width, initial-scale=1"> 53<title>貸出申請</title> 54<link rel="stylesheet" href="style.css"> 55 56<!-- Bootstrap読み込み(スタイリングのため) --> 57<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"> 58</head> 59<body> 60<div class="col-xs-6 col-xs-offset-3"> 61 62<?php 63 64echo date("Y/m/d H:i:s"); 65$time = date("Y/m/d H:i:s"); 66// signupがPOSTされたときに下記を実行 67if(isset($_POST['signup'])) { 68 69 $date = $mysqli->real_escape_string($_POST['date']); 70 $no = $mysqli->real_escape_string($_POST['no']); 71 $r1 = $mysqli->real_escape_string($_POST['r1']); 72 $r2 = $mysqli->real_escape_string($_POST['r2']); 73 $gohome = $mysqli->real_escape_string($_POST['gohome']); 74$r2 = $time; 75$no = $username; 76 // POSTされた情報をDBに格納する 77 $query = "INSERT INTO class(date,no,r1,r2,gohome) VALUES('$date','$no','$r1',’$r2’,'$gohome')"; 78 79 if($mysqli->query($query)) { ?> 80 <div class="alert alert-success" role="alert">登録しました</div> 81 <?php } else { ?> 82 <div class="alert alert-danger" role="alert">エラーが発生しました。</div> 83 <?php 84 } 85} ?> 86 87<form method="post"> 88 <h1>申請フォーム</h1> 89 <div class="form-group"> 90 <input type="text" class="form-control" name="date" placeholder="日付(例)2020/09/04" required /> 91 </div> 92 <div class="form-group"> 93 <input type="text" class="form-control" name="r1" placeholder="代表者" required /> 94 </div> 95 <div class="form-group"> 96 <input type="text" class="form-control" name="gohome" placeholder="下校時刻" required /> 97 </div> 98 <button type="submit" class="btn btn-default" name="signup">登録する</button> 99 <a href="home.php">戻る</a> 100</form> 101 102 103</div> 104</body> 105</html> 106

試したこと

サーバー接続までは確認できているので、
フォームから受け取った数値をDBに書き込むところでエラーが発生していると思われます。
DBに2回接続したりしてますが、今回のエラーとそこは問題ではないと認識しています。
DB情報ものせておきます。
イメージ説明

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

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

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

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

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

m.ts10806

2020/03/10 02:24

早急に質問削除依頼を運営に出してください。 DBアクセス情報がそのまま提示されています。不正アクセスされる恐れがありますよ。 質問編集では履歴から確認できるので「削除依頼」です。
Takumiboo

2020/03/10 03:01

削除依頼に合わせて、DBのユーザ名・パスワードは変更したほうが良いでしょう。
daichi-onoue

2020/03/23 09:44

練習環境だったので、サーバーを閉鎖しました。
m.ts10806

2020/03/23 09:58

それでも念のため削除依頼だすか、対象情報の書き換えを依頼しておいた方が良いですよ。 本番へのヒントに全くならないわけではないので。
guest

回答2

0

とりあえずmysqliでもprepareでの処理をしてください
できればpdoをおすすめします
SQL文に予約語を入れるのもやめたほうがいいです

投稿2020/03/10 02:22

yambejp

総合スコア114572

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

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

yambejp

2020/03/10 02:24

insertでエラーを起こしていると想像ができているなら その部分だけ切り出してテストすることをおすすめします 関係ない部分との切り分けができていないように見受けられます
guest

0

ベストアンサー

プリペアドステートメントとバインドの仕組みを駆使するように書き換えてください。
そうすれば、文字列だから「'」で囲むとか気にせず、mysqliに任せられます。
PHP: mysqli_stmt::bind_param - Manual

php

1$query = "INSERT INTO class(date,no,r1,r2,gohome) VALUES('$date','$no','$r1',’$r2’,'$gohome')";

じゃなく、

php

1$query = "INSERT INTO class(`date`,`no`,`r1`,`r2`,`gohome`) VALUES(?,?,?,?,?)"; 2$stmt = $mysqli->prepare($query); 3$stmt->bind_param("sssss", $date, $no, $r1, $r2, $gohome); 4$stmt->execute();

とか。

MySQLでデータベースの識別子とカラム名を混同しないようにするために
「`」で括るといいらしいです。
まぁ、できればdateとかclassとかは避けたほうがよろしいかと。

他の$query使ってる箇所も真似して書き換えてください。

投稿2020/03/10 03:19

編集2020/03/10 03:21
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問