Доброе утро всем:
Я был бы признателен, если бы некоторые люди могли дать мне несколько советов по веб-системе планирования файлов, которую я разрабатываю. Я работаю в подразделении правительственного агентства, которое занимается управлением записями. Мы работаем с различными другими подразделениями агентства, чтобы помочь им разработать планы файлов, чтобы они соответствовали федеральным законам и правилам, касающимся хранения документации. В настоящее время мы используем базу данных Access, которую каждое подразделение загружает, чтобы ввести имена различных папок, а затем назначить некоторые другие характеристики. Мое подразделение хочет перейти от платформы Access к правильному веб-приложению. У меня есть обширный опыт создания баз данных SQL в MySQL, SQL Server и т. Д. Для целей анализа. И я работал с PHP спорадически в течение последних нескольких лет, так что я не совсем новичок, но я не эксперт, поэтому я мог бы использовать некоторую помощь в устранении неполадок в некотором коде.
Вот краткий обзор того, как эта система должна работать. Пользователь вводит имя папки в текстовое поле, а затем назначает другие характеристики для папки, выбирая из ряда выпадающих списков. Они есть:
тип носителя: бумага, DVD / CD, дискета, другое
Тип классификации: несекретный, конфиденциальный, секретный, совершенно секретный
Расположение: так же, как Sub Series
Эти последние три были легкими. Я успешно написал while и mysql_fetch_arrays, чтобы получить их из своих таблиц в БД и отобразить как выпадающие списки.
Теперь вот первая сложная часть. Пользователь должен назначить группу, серию файлов и серию субфайлов, где группа — самый высокий уровень, серию файлов — следующий уровень, а серию субфайлов — наиболее детализированный. Это будет выглядеть как Файлы администрирования группы 100 —> Файлы персонала серии 101 файлов —> Файлы обзора супервизора серии 101-01 Supervisor. В таблице Sub File Series есть 715 выборок. Текущая база данных Access требует, чтобы пользователь щелкнул по всем 715 перестановкам, чтобы найти соответствующую серию субфайлов, и это самая большая жалоба на базу данных Access. Поэтому, чтобы помочь пользователю в новой системе, я хочу использовать ряд зависимых выпадающих меню, чтобы пользователь мог начать с самого высокого уровня, чтобы сделать выбор, который затем заполнит средний уровень только сериями файлов для этой группы и затем заполните нижний уровень серией подфайлов, связанной только с предыдущим выбором серии файлов. Я смог заставить это работать тоже.
Но вот две мои проблемы. Мне нужно иметь возможность отображать выбранные пользователем данные на той же странице, что и корзина покупок, в которой пользователь может редактировать или удалять имя папки и основные параметры выбора. У меня есть оператор include в моем скрипте index.php, который предназначен для этого, но он не работает. Когда пользователь нажимает кнопку «Отправить», он отображает вводимые пользователем данные на новой странице, и мне действительно нужно, чтобы они отображались на той же странице, что и форма … предпочтительно справа от формы. Моя вторая проблема — когда пользователь нажимает кнопку «Отправить», и браузер переходит на новую страницу, чтобы отобразить пользовательские вводы, он правильно отображает все пользовательские вводы / выборы, за исключением серии подфайлов. Вместо отображения серии подфайлов отображается только дубликат выбора среднего уровня: серия файлов. Вот как это должно выглядеть
Имя файла: Folder1
Тип носителя: DVD / CD
Тип классификации: совершенно секретно
Тип диспозиции: такой же, как в субсерии
Название группы: 100-Администрирование файлов
Серия файлов: 101-кадровый файл
Подфайл серии: 101-01 Файлы обзора супервизора
Вот некорректный вывод
Имя файла: Folder1
Тип носителя: DVD / CD
Тип классификации: совершенно секретно
Тип диспозиции: такой же, как в субсерии
Название группы: 100
Серия файлов: 101
Подфайл серии: 101
Вот мой код Прошу прощения за любые мелкие опечатки. Мне пришлось вручную транскрибировать этот код, поскольку он находится на другом сервере. Если есть небольшие ошибки, они, вероятно, не вызывают проблему, которую я должен исправить. Спасибо всем за любые указатели, которые вы можете дать. Я знаю, что мой код может выглядеть немного неровным и любительским для всех старых соленых разработчиков на этом сайте, так что будьте осторожны со мной. 🙂
index.php
<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://gmpg.org/xfn/11">
<head>
<title>File Entry</title>
<script type = "text/javascript" src="jquery-1.5.2.min.js"></script>
<style type ="text/css">
body {
font-family:arial;
color:#010DF;
}
form select{
padding:5px;
border:1px solid:#aaa;
border-radius:4px;
width:400px;
}
form label{
font-size:12px;
font-weight:bold;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
load_options('','Group');
});function load_options(id,index){
$("#loading").show();
if(index=="FileSeries"){
$("#SubFileSeries").html('<option value="">Select SubFileSeries</option>');
}
$.ajax({
url: "ajax.php?index=+index+"&id="+id,
complete: function(){$("#loading").hide():},
success: function(data) {
$("#"+index).html(data);
}
})
}
</script>
</head>
<body>
<div style="width:2000px; margin: auto; padding-top:100px;">
<form action="SendUserSelectionsToArray.php" method="post">
<p>Folder Name: <input type = "text" name = "Foldername1"/></p>
<p><label>Select Media type</label>
<?php
mysql_connect('localhost','fakename1','fakepassword1') or die("Connection Failed");
mysql_select_db('csc') or die("Connection Failed");
$query = "SELECT media_type FROM Media";
$result = mysql_query($query);
?>
<select name="selectMediaType1">
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
?><option value = "<?php echo $line['media_type'];?>"> <?php echo $line['media_type'];?></option>
<?php
}
?>
</select>
</p>
<p><label>Select Media type</label>
<?php
mysql_connect('localhost','fakename1','fakepassword1') or die("Connection Failed");
mysql_select_db('csc') or die("Connection Failed");
$query = "SELECT classification_type FROM Classification";
$result = mysql_query($query);
?>
<select name="classificationType1">
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
?><option value = "<?php echo $line['classification_type'];?>"> <?php echo $line['classification_type'];?></option>
<?php
}
?>
</select>
</p>
<p><label>Select Media type</label>
<?php
mysql_connect('localhost','fakename1','fakepassword1') or die("Connection Failed");
mysql_select_db('csc') or die("Connection Failed");
$query = "SELECT dispostion_type FROM disposition";
$result = mysql_query($query);
?>
<select name="dispositionType1">
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
?><option value = "<?php echo $line['disposition_type'];?>"> <?php echo $line['disposition_type'];?></option>
<?php
}
?>
</select>
</p>
<p><label>Select Group</label></p>
<p><select name="Group1" id="Group" onchange="load_options(this.value, 'FileSeries');"><option value="">Select Group</option>
</select></p>
<p><label>Select File Series</label></p>
<p><select name="FileSeries1" id="FileSeries" onchange="load_options(this.value, 'SubFileSeries');"><option value="">Select File Series</option>
</select></p>
<p><label>Select Sub File Series</label></p>
<p><select name="SubFileSeries1" id="SubFileSeries"><option value="">Select Group</option>
</select></p>
<img src="loader.gif" id="loading" align="absmiddle" style="display:none'"/>
<p>input type = "submit" id="sendtoarray" value="Submit and Enter Another Folder/></p>
</form>
</div>
</body>
</html>
<?php
include('SendUserSelectionsToArray.php');
?>
ajax.php
<?php
class AJAX {
private $database = NULL;
private $_query = NULL;
private $_fields = array();
private $_index = NULL;
const DB_HOST = 'localhost';
const DB_USER = 'fakeuser1';
const DB_PASSWORD = 'fakepassword1';
const DB_NAME = 'csc';
public function __construct() {
$this -> db_connect();
//initiate database connection
$this->process_data();
}
//Connect to database
private function db_connect(){
$this->database = mysql_connect(self::DB_HOST, self::DB_USER, self::DB_PASSWORD);
if($this->database) {
$db = mysql_select_db(self::DB_NAME, $this-> database);
} else {
echo mysql_error();die;
}
}
private function process_data(){
$this->_index=($_REQUEST['index'])?$_REQUEST['index']:NULL;
$id = f($_REQUEST['id'])?$_REQUEST['id']:NULL;
switch($this->_index) {
case 'Group':
$this->_query = "SELECT * FROM groups";
$this->_fields = array('id,'group_display_title');
break;
case 'FileSeries':
$this->_query = "SELECT * FROM file_series WHERE group_id=$id";
$this->_fields = array('file_series_id','file_series_name');
break;
case 'SubFileSeries':
$this->_query = "SELECT * FROM sub_file_series WHERE file_series_id=$id";
$this->_fields = "array('file_series_id','sub_file_series_name');
break;
default: break;
}
$this->show_result();
}
public function show_result() {
echo '<option value="">Select'.$this->_index.'</option>";
$query = mysql_query($this->_query);
while($result = mysql_fetch_array($query)){
$entity_id = $result[$this->fields[0]];
$enity_name = $result[$this->_fields[1]];
echo "<option value='$entity_id'>$enity_name</option>";
}
}
}
$obj = new AJAX;
?>
senduserselectionstoarray.php
<html>
<h1>User Inputs</h1>
<?php
$userselection = array(
'Foldername1' => $_POST['Foldername1'],
'selectMediaType1' => $_POST['selectMediaType1'],
'selectClassificationType1' => $_POST['Foldername1'],
'selectDispositionType1' => $_POST['selectClassificationType1'],
'Group1' => $_POST['Group1'],
'FileSeries1' => $_POST['FileSeries1'],
'SubFileSeries1' => $_POST['SubFileSeries1'],
foreach($userselection1 as $userSelectionArrayDisplay1) {
echo "$userSelectionArrayDisplay1<br />";
}
?>
</html>
Если вы не хотите, чтобы данные отображались на новой странице, вы можете сделать это, используя поле ввода в качестве кнопки, и вызвать функцию javascript, чтобы отобразить данные в элементе div, который может находиться справа от раскрывающегося списка.
<input type="button" value="Submit" onclick="yourFunction()">
Когда вы используете поле ввода с типом «отправить», оно по умолчанию отображает новую страницу.
Чтобы ваша функция JavaScript отображала данные справа, она должна выглядеть примерно так:
function yourFunction() {
//#tableWrapper is the id of the div that you insert the table with the data into
var displayData = document.getElementById("tableWrapper");
displayData.innerHTML = "<table><tr><td>...."; //Put the data here
}
Что касается выпадающего списка. Вы можете сделать что-нибудь, где у вас есть три раскрывающихся списка Group, FileSeries и SubFileSeries. Вы можете отключить последние два, а когда выбрана группа, вы можете заполнить выпадающий список FileSeries правильными данными и так далее. Прочитайте этот вопрос для хорошего примера: Выбрав из выпадающего списка, включите другой выпадающий
Надеюсь это поможет.
Других решений пока нет …