私は現在、jQuery Mobile と MVC フレームワークを使用してモバイル アプリに取り組んでいます。これは、ユーザーがクラス情報 (名前、講師、説明など) と各クラスの課題情報 (タイトル、メモ、期日など) を入力できるタスク/割り当てマネージャーとして機能します。
セッション変数を使用してログイン ページを作成し、正常にログインできました。ログインすると、デフォルトの action="list_assignments" があります。これは、すべてのクラス名を取得し、それらを各クラスの下の割り当てを持つリストビューの仕切りに変えます。
私の問題は、ログインすると、すべてのユーザーのすべての割り当てが表示されることです。
私はMySQLに3つのテーブルを持っています.
- 割り当て (assign_id[PKey および AutoInc]、assign_title、note、dueDate、user_id、class_id)
- クラス (class_id[Pkey & AI]、class_name、class_instructor、class_description、user_id)
- ユーザー (user_id[Pkey & AI]、ユーザー名、パスワード)
assignment_tracker/index.php (コントローラー)
if ($action == 'list_assignments') {
// Get the current user ID
@ $user_id = $_SESSION['user_id'];
if (!isset($user_id)) {
$user_id = 1;
}
// Get the current class ID
@ $class_id = $_GET['class_id'];
if (!isset($class_id)) {
$class_id = 1;
}
// Get assignment and class data
$class_name = get_class_name($class_id);
$classes = get_classes();
// needs to be looped for each class within assignment_list.php
$assignments = get_assignments_by_class($class_id);
// Display the assignment list, or build "the view"
include('view/assignment_list.php');
}
Assignment_tracker/view/assignment_list.php
<?php include ('header.php'); ?>
<?php print $_SESSION['user_id']; ?>
<div data-role="content" id="assignment_list">
<!-- create 2 foreach loops, 1 for classes to be listed and organized by id in list dividers and another for listing individual assignments within each class -->
<ul data-role="listview">
<!--classes loop-->
<?php foreach ($classes as $class) : ?>
<li data-role="list-divider"><?php echo $class['class_name']; ?></li>
<?php $assignments=get_assignments_by_class($class['class_id']); ?>
<?php foreach ($assignments as $assignment) : ?><!--assignments loop-->
<?php print'<li><a href="index.php?action=show_assign_details&assign_id='.$assignment['assign_id'].'&class_id='.$assignment['class_id'].'">'.$assignment['assign_title'].'</a></li>';?>
<?php endforeach; ?> <!--/assignments loop-->
<?php endforeach; ?> <!--/classes loop-->
</ul>
</div><!--/data-role="content"-->
<?php include 'footer.php'; ?>
Assignment_tracker/モデル/class_db.php
<?php
function get_classes() {
global $db;
$query = 'SELECT * FROM classes
ORDER BY class_id';
$result = $db->query($query);
return $result;
}
function get_class_name($class_id) {
global $db;
$query = "SELECT * FROM classes
WHERE class_id = $class_id";
$class = $db->query($query);
$class = $class->fetch();
$class_name = $class['class_name'];
return $class_name;
}
Assignment_tracker/モデル/assignment_db.php
<?php
function get_assignments() {
global $db;
$query = 'SELECT * FROM assignments
ORDER BY assign_ID';
$assignments = $db->query($query);
return $assignments;
}
function get_assignments_by_class($class_id) {
global $db;
$query = "SELECT * FROM assignments
WHERE assignments.class_id = '".$class_id."'
ORDER BY assign_id";
$assignments = $db->query($query);
return $assignments;
}
ユーザーの ID に従って割り当てを見つけるクエリを作成しようとしましたが、foreach ループでソリューションを実装したときに、foreach エラーの無効な引数を取得しました。これは、入力の 1 つが配列ではないことを意味します。私は何時間もこれに行き詰まっていたので、自分のリソースを使用して助けを求める時が来たと考えました.
さらに情報が必要な場合はお知らせください。事前にご協力いただいた皆様に感謝いたします。
アップデート:
皆さんこんにちは、
ユーザーIDをクエリにハードコーディングして結果を取得する方法を見つけました。最初は何らかの理由で配列を返さないと思っていましたが、phpMyAdmin でテストすると、user_id がハードコーディングされている場合にクエリが正常に機能します。
user_id が一致するクラスのみを返す新しい関数を class_db.php に作成しました。$_SESSION['user_id']
ログイン時にコントローラーに設定した変数を使用しようとしています。
function get_classes_by_user($user_id) {
global $db;
$query = 'SELECT * FROM classes
WHERE user_id = 1
ORDER BY class_id';
$result = $db->query($query);
return $result;
}
index.php
if ($action == 'list_assignments') {
// Get the current class ID
@ $class_id = $_GET['class_id'];
if (!isset($class_id)) {
$class_id = 1;
}
// Get the current user ID
@ $user_id = $_SESSION['user_id'];
if (!isset($user_id)) {
$user_id = 1;
}
// Get assignment and class data
$class_name = get_class_name($class_id);
$classes = get_classes();
//new function being called with resultant array stored in $userclasses
$userclasses = get_classes_by_user($user_id);
// needs to be looped for each class within assignment_list.php
$assignments = get_assignments_by_class($class_id);
// Display the assignment list, or build "the view"
include('view/assignment_list.php');
}
割り当てリスト.php
<?php include ('header.php'); ?>
<?php print $_SESSION['user_id']; ?>
<div data-role="content" id="assignment_list">
<!-- create 2 foreach loops, 1 for classes to be listed and organized by id in list dividers and another for listing individual assignments within each class -->
<ul data-role="listview">
<!--classes loop-->
<?php foreach ($userclasses as $class) : ?>
<li data-role="list-divider"><?php echo $class['class_name']; ?></li>
<?php $assignments=get_assignments_by_class($class['class_id']); ?>
<?php foreach ($assignments as $assignment) : ?><!--assignments loop-->
<?php print'<li><a href="index.php?action=show_assign_details&assign_id='.$assignment['assign_id'].'&class_id='.$assignment['class_id'].'">'.$assignment['assign_title'].'</a></li>';?>
<?php endforeach; ?> <!--/assignments loop-->
<?php endforeach; ?> <!--/classes loop-->
</ul>
</div><!--/data-role="content"-->
<?php include 'footer.php'; ?>
新しい関数に合わせて、上記の foreach ループの $classes を $userclasses に変更しました。
誰にもアイデアはありますか?私はこれを理解するのに非常に近いことを知っています! もう一度、あなたの助けに感謝します!