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

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

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

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

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

Q&A

解決済

2回答

2789閲覧

Queryエラーになってしまいます

YukaSaku

総合スコア52

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

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

0グッド

0クリップ

投稿2017/05/29 14:47

ログインフォームにて、ユーザー登録されてない人は、最初にユーザー登録をし、DB:login tableにユーザー情報が登録され、その際にcust_idが発行されます。そのレジスタされた時をログイン回数0回目とし、DB:login_time tableに、ログイン時間(logtime),何回目のログインか(login_no), カスタムID(cust_id:key)が記録されます。その後、同じカスタムIDがログインするごとにlogin_noをカウントしていき、毎度ログイン情報を登録していきたいと思っています。
現在は”Couldn't execute query in login++.”と表示されてしまいます。
なぜQueryエラーになってしまうのでしょうか。
よろしくお願いします。

login_time tableは以下の通りです。

login_no INT(5)
How many times the customer logged in. Primary key.

cust_ID INT(5)
This is the key to joining by Customer ID with login table. Primary key.

logtime TIMESTAMP
When customer input the data from login form, automatically register the time.(Not update)

php

1<?php 2session_start(); 3ini_set("include_path","./includes"); 4include("dbinfo.inc"); 5 6$errorMessage = ""; 7$login_no = $_SESSION['login_no']; 8 9if(isset($_SESSION['cust_id'])) 10{ 11$errorMessage = "No registration."; 12}else{ 13 $date = date("Y-m-d H:i:s"); 14// login_timeからcust_idを取り出す 15 $mysqli = new mysqli($host, $user, $passwd, $dbname); 16 $sql = "SELECT * FROM login_time WHERE cust_id ='".$_SESSION['cust_id']."'"; 17 $result = $mysqli->query($sql); 18 if(!isset($login_no)) 19 { 20 $login_no = $login_no++; 21 $sql = "INSERT INTO login_time (login_no,cust_id,logtime) VALUES 22 ('".$login_no."', 23 '".$_SESSION['cust_id']."', 24 '$date')"; 25 26 } 27 //$result = mysqli_query($cxn,$sql) 28 $result = $mysqli->query($sql) 29 or die("Couldn't execute query in login++."); 30 // if (!$result) { 31 // print('Cant execute query.' . $mysqli->error); 32 $mysqli->close(); 33 exit(); 34 // } 35 } 36// Cut data base 37//$result->close(); 38?> 39 40<!DOCTYPE HTML> 41<html> 42<head> 43<title>Exercise5</title> 44</head> 45</head> 46<body> 47<h1>You are logged in.</h1> 48<ul> 49 <li>Hi, <?php echo $_SESSION['username']; ?>!!</li> 50 <li>You logged in number of times:<?php echo $login_no; ?></li> 51 <li>Logtime:<?php echo $date; ?></li> 52</ul> 53<a href="logout.php?logout">Logout</a> 54 55 56</body> 57</html> 58

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

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

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

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

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

guest

回答2

0

ベストアンサー

作りが色々矛盾しているような気がしますが、何をどう直したらいいかは、もう少しコードを整理してからが良いような気がしますので、気づいた点のみ書いておきます。

まず$_SESSION['cust_id']ですが、最初にif文であるかないか判定して、ない場合にelse側に行きますが、ないにも関わらずSQL文に使っている。

それからelse側の最初のSQLでコメントでcust_idを取り出すとありますが、取り出してない(クエリを発行して終わり)

あとその次で$login_noの確認をしていますが、ない場合という条件にも関わらず、そのあとインクリメントしている。

投稿2017/05/30 00:12

ttyp03

総合スコア16996

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

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

YukaSaku

2017/05/30 14:33

コメントありがとうございます。 作りが矛盾していたのですね。。。それもよくわかっていなかったので、とりあえず言われたところを直したら、エラーメッセージが出てくれるようになりましたので、こちらをベストアンサーとさせていただきます。 もう少し、整理しようと思います。ありがとうございます。
guest

0

まず、

PHP

1if(isset($_SESSION['cust_id']) 23if(!isset($_SESSION['cust_id'])

ではないかと思います。
今の作りですと
「cust_idがあればエラー、なければ提示の処理」
になっています。
変数未定義のエラーも出ていませんか?

また $_SESSION['login_no']を冒頭受け取っていますが、こちらもissetで確認したほうがよいと思います。 ++ をするためにはその変数が数値であることが前提なので数値かどうかのチェックもしたほうがより確実なソースとなりますのでご検討ください。

投稿2017/05/29 22:01

編集2017/05/29 22:08
m.ts10806

総合スコア80765

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

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

YukaSaku

2017/05/30 14:42

いつもコメントありがとうございます。 上の方がいうように、ちょっと訳のわからないプログラムですみません。 ただクエリー処理が止まってしまうだけで他に何もエラーが出てこなかったので、何をしたらいいのかわからなくてこちらに質問させていただいた次第です。変数未定義のエラーも出てきてません。。。 数値かどうかのチェックをした方がいいという大切なヒント、ありがとうございます。cust_idは数値でした。でもlogin_noはこのプログラムの前のプログラムで生成されてarrayから取り出したもので文字でした。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問