2014-02-14 2 views
0

Я пытаюсь создать систему планирования с использованием PHP и MySQL. У меня есть это, поэтому я могу просматривать/редактировать/удалять сотрудников, оборудование и клиентов. Последнее, что мне нужно сделать, это составить расписание. У меня есть следующие таблицыНе могу понять, как сделать эту форму

-- Lookup table for employee positions. 
CREATE TABLE `EmployeePosition` (
    `EmployeePositionID` INTEGER AUTO_INCREMENT NOT NULL, 
`Name` VARCHAR(100) NOT NULL, 
CONSTRAINT `PK_Position` PRIMARY KEY (`EmployeePositionID`), 
CONSTRAINT `UK_Position_Name` UNIQUE (`Name`) 
); 

-- Lookup table for eqipment types. 
CREATE TABLE `EquipmentType` (
`EquipmentTypeID` INTEGER AUTO_INCREMENT NOT NULL, 
`Name` VARCHAR(100) NOT NULL, 
CONSTRAINT `PK_EquipmentType` PRIMARY KEY (`EquipmentTypeID`), 
CONSTRAINT `UK_EquipmentType_Name` UNIQUE (`Name`) 
); 

-- Employee information. 
CREATE TABLE `Employee` (
`EmployeeID` INTEGER AUTO_INCREMENT NOT NULL, 
`Email` VARCHAR(100) NOT NULL, 
`FirstName` VARCHAR(100) NOT NULL, 
`LastName` VARCHAR(100) NOT NULL, 
`EmployeePositionID` INTEGER NOT NULL, 
`HomePhone` VARCHAR(32), 
`CellPhone` VARCHAR(32), 
`AccessLevel` TINYINT NOT NULL DEFAULT 0, 
`IsDisabled` TINYINT NOT NULL DEFAULT 0, 
`PwdHash` CHAR(40) NOT NULL DEFAULT 'X', 
CONSTRAINT `PK_Employee` PRIMARY KEY (`EmployeeID`), 
CONSTRAINT `FK_Employee_EmployeePositionID` FOREIGN KEY (`EmployeePositionID`)  REFERENCES `EmployeePosition` (`EmployeePositionID`), 
CONSTRAINT `UK_Employee_Email` UNIQUE (`Email`) 
); 

-- Customer information. 
CREATE TABLE `Customer` (
`CustomerID` INTEGER AUTO_INCREMENT NOT NULL, 
`Name` VARCHAR(100) NOT NULL, 
`Address1` VARCHAR(100), 
`Address2` VARCHAR(100), 
`City` VARCHAR(100), 
`State` VARCHAR(2), 
`ZipCode` VARCHAR(20), 
`Phone` VARCHAR(32), 
`Fax` VARCHAR(32), 
`IsDisabled` TINYINT NOT NULL DEFAULT 0, 
CONSTRAINT `PK_Customer` PRIMARY KEY (`CustomerID`), 
CONSTRAINT `UK_Customer_Name` UNIQUE (`Name`) 
); 

-- Equipment information. 
CREATE TABLE `Equipment` (
`EquipmentID` INTEGER AUTO_INCREMENT NOT NULL, 
`Number` VARCHAR(32) NOT NULL, 
`EquipmentTypeID` INTEGER NOT NULL, 
`IsDisabled` TINYINT NOT NULL DEFAULT 0, 
CONSTRAINT `PK_Equipment` PRIMARY KEY (`EquipmentID`), 
CONSTRAINT `FK_Equipment_EquipmentTypeID` FOREIGN KEY (`EquipmentTypeID`) REFERENCES `EquipmentType` (`EquipmentTypeID`), 
CONSTRAINT `UK_Equipment_Number` UNIQUE (`Number`) 
); 

-- Basic job information. 
CREATE TABLE `ScheduledJob` (
`ScheduledJobId` INTEGER AUTO_INCREMENT NOT NULL, 
`CustomerID` INTEGER NOT NULL, 
`JobDate` DATETIME NOT NULL, 
`ReportTime` DATETIME NOT NULL, 
`StartTime` DATETIME NOT NULL, 
`JobDescription` MEDIUMTEXT NOT NULL, 
CONSTRAINT `PK_ScheduledJob` PRIMARY KEY (`ScheduledJobId`), 
CONSTRAINT `FK_ScheduledJob_CustomerID` FOREIGN KEY (`CustomerID`) REFERENCES `Customer` (`CustomerID`) 
); 

-- Employees tied to jobs. 
CREATE TABLE `ScheduledEmployee` (
`ScheduledEmployeeID` INTEGER AUTO_INCREMENT NOT NULL, 
`ScheduledJobID` INTEGER NOT NULL, 
`EmployeeID` INTEGER NOT NULL, 
`Notes` MEDIUMTEXT, 
CONSTRAINT `PK_ScheduledEmployee` PRIMARY KEY (`ScheduledEmployeeID`), 
CONSTRAINT `FK_ScheduledEmployee_ScheduledJobID` FOREIGN KEY (`ScheduledJobID`) REFERENCES `ScheduledJob` (`ScheduledJobID`), 
CONSTRAINT `FK_ScheduledEmployee_EmployeeID` FOREIGN KEY (`EmployeeID`) REFERENCES `Employee` (`EmployeeID`), 
CONSTRAINT `UK_ScheduledEmployee` UNIQUE (`ScheduledJobID`, `EmployeeID`) 
); 

-- Equipment tied to jobs. 
CREATE TABLE `ScheduledEquipment` (
`ScheduledEquipmentID` INTEGER AUTO_INCREMENT NOT NULL, 
`ScheduledJobID` INTEGER NOT NULL, 
`EquipmentID` INTEGER NOT NULL, 
`Notes` MEDIUMTEXT, 
CONSTRAINT `PK_ScheduledEquipment` PRIMARY KEY (`ScheduledEquipmentID`), 
CONSTRAINT `FK_ScheduledEquipment_ScheduledJobID` FOREIGN KEY (`ScheduledJobID`) REFERENCES `ScheduledJob` (`ScheduledJobID`), 
CONSTRAINT `FK_ScheduledEquipment_EquipmentID` FOREIGN KEY (`EquipmentID`) REFERENCES `Equipment` (`EquipmentID`), 
CONSTRAINT `UK_ScheduledEquipment` UNIQUE (`ScheduledJobID`, `EquipmentID`) 
); 

форма я пытаюсь сделать должен выглядеть примерно так:

+------------------------------------------------------------------------------------------------- 
ScheduledJobID JobDate ReportTime StartTime CustomerID EmployeeID EquipmentID JobDescription 
+------------------------------------------------------------------------------------------------- 

CustomerID, EmployeeID, EquipmentID все должны быть dropown коробки, которые я могу выбрать из информации, уже в база данных . Я не знаю, с чего начать ... Может кто-нибудь мне помочь. Я знаю, как сделать выпадающие списки, поскольку я уже использую их в моих добавленных формах.

В основном я хочу показать дату работы, время, чтобы сообщить в офис, время, чтобы сообщить клиенту (StartTime), Клиент, с которым мы работаем, Сотрудники на работе, оборудование на работе, и описание работы .... Мы являемся сервисной компанией, и именно так мы планируем. Мы в настоящее время делаем это на бумаге, и я пытаюсь вовлечь нас в XXI век.

+0

SELECT * из таблицы заданий и LEFT JOIN все оборудование и сотрудников таблицы на это. Затем просто отобразите его. Я не совсем уверен, что вы имеете в виду в раскрывающемся меню ... можете ли вы подробно остановиться на этом? – Tularis

+0

Извините. Что я имею в виду - это список ... со стрелкой вниз и он отображает данные из определенной строки в базе данных, которые вы можете выбрать – user3251779

+0

, каков будет запрос к LEFT JOIN двух таблиц в один ... i знаю, как это сделать с другой таблицей ... но не с двумя – user3251779

ответ

0

Что-то вроде:

<?php 
// assuming mysqli 
$db = new mysqli(...); 

// initialize variables 
$employees = array(); 
$equipment = array(); 

$r = $db->query("SELECT `EmployeeID`, `FirstName` FROM `Employee`"); 
while($employee = $r->fetch_object()){ 
    $employees[$employee->EmployeeID] = $employee->FirstName; 
} 
// same for equipment 

echo '<table>'; 
echo '<tr>'; 
echo '<th>ScheduledJobID</th><th>JobDate</th><th>ReportTime</th><th>StartTime</th><th>CustomerID</th><th>EmployeeID</th><th>EquipmentID</th><th>JobDescription</th>'; 
echo '</tr>'; 

// get your jobs 
$result = $db->query("SELECT `ScheduledJob`.`ScheduledJobID`, `ScheduledJob`.`JobDate`, `ScheduledJob`.`ReportTime`, `ScheduledJob`.`StartTime`, `ScheduledJob`.`CustomerID`, `ScheduledEmployee`.`EmployeeID`,`ScheduledEquipment`.`EquipmentID`, `ScheduledJob`.`JobDescription` FROM `ScheduledJob` LEFT JOIN `ScheduledEmployee` ON (`ScheduledEmployee`.`ScheduledJobID`=`ScheduledJob`.`ScheduledJobId`) LEFT JOIN `ScheduledEquipment` ON (`ScheduledEquipment`.`ScheduledJobID`=`ScheduledJob`.`ScheduledJobId`)"); 
while($job = $result->fetch_object()){ 
    echo '<tr>'; 
    echo '<td>',$job->ScheduledJobID,'</td>'; 
    echo '<td>',$job->JobDate,'</td>'; 
    echo '<td>',$job->ReportTime,'</td>'; 
    echo '<td>',$job->StartTime,'</td>'; 
    echo '<td><select name="employee_in_job[',$job->ScheduledJobID,']">'; 
    foreach($employees as $id=>$name) { 
     if($id == $job->EmployeeID) { 
      // selected emplyee according to your joblist 
      echo '<option value="',$id,'" selected="selected">', $name, '</option>'; 
     } else { 
      echo '<option value="',$id,'">', $name, '</option>'; 
     } 
    } 
    echo '</select></td>'; 
    echo '<td>',$job->EquipmentID,'</td>'; // same thing for equipment, but you can do that yourself 
    echo '<td>',$job->JobDescription,'</td>'; 
    echo '</tr>'; 
} 
echo '</table>'; 
+0

Я продолжаю получать эту ошибку ...... Неустранимая ошибка: вызовите функцию-член fetch_object() на не-объект в /home/tinker74/public_html/learning/schedule/admin/schedule1.php в строке 13 – user3251779

+0

Сделано опечатка, эта переменная должна быть $ r, а не $ result (исправлена ​​в ответе). Но я начинаю удивляться, насколько вы профессиональны в PHP с этим комментарием ... вы действительно понимаете, что именно делает этот код? : s – Tularis

+0

вы правы ... я не очень-то знаю PHP .. я все еще изучаю – user3251779

Смежные вопросы