PHP Script for Datepicker для выбора и отображения базы данных из Mysql - PullRequest
0 голосов
/ 03 апреля 2011

Проведя 3 дня в Интернете и борясь с таким количеством различных форумов, я нашел здесь совпадение и похожий случай моей проблемы.

Друзья, я ноль в PHP, но все же мне удалосьсделайте что-нибудь, чтобы выполнить мое требование.

Я застрял с одной вещью сейчас. Так что мне нужна помощь ....

Я использую одну HTML + PHP форму для отправки базы данных в MySQL,Я создал отображение этой таблицы с помощью php-скрипта на веб-странице.Теперь мне нужна опция выбора даты на этой отображаемой странице, с помощью которой я могу выбрать диапазон дат и отобразить данные этого диапазона дат из моей таблицы MySQL.А затем выполните экспорт данных, отображаемых в выбранном диапазоне дат в Excel.

Эта отображаемая страница защищена при входе в систему, поэтому я хочу, чтобы после входа в систему при следующем входе отображалась опция выбора состояния, которая должна быть от даты до додата, а затем записи должны отображаться из базы данных, и я могу взять экспорт этих отображаемых результатов в файл Excel.Ниже приведен код, который я использую на этой странице, но в нем нет ничего для сценария экспорта в Excel и средства выбора даты. Я вставляю код здесь и прошу вас включить требуемый код в него, как требуется.

Заранее спасибо

<?php
//database connections
$db_host = 'localhost';
$db_user = '***********';
$db_pwd = '*************';

$database = 'qserves1_uksurvey';
$table = 'forms';  
$file = 'export';
if (!mysql_connect($db_host, $db_user, $db_pwd))
    die("Can't connect to database");

if (!mysql_select_db($database))
    die("Can't select database");

// sending query
$result = mysql_query("SELECT * FROM {$table} ORDER BY date desc");
if (!$result) {
    die("Query to show fields from table failed");
}
$num_rows = mysql_num_rows($result);
$fields_num = mysql_num_fields($result);

echo "$num_rows"; 
echo "<h1></h1>";
echo "<table border='1'><tr>";
// printing table headers
for($i=0; $i<$fields_num; $i++)
{
    $field = mysql_fetch_field($result);
    echo "<td>{$field->name}</td>";
}
echo "</tr>\n";
// printing table rows
while($row = mysql_fetch_row($result))
{
    echo "<tr>";

    // $row is array... foreach( .. ) puts every element
    // of $row to $cell variable
    foreach($row as $cell)
        echo "<td>$cell</td>";

    echo "</tr>\n";
}
mysql_free_result($result);
?>
</body></html>

1 Ответ

6 голосов
/ 03 апреля 2011

Это не сайт "напишите мой код для меня, пожалуйста", так что вам нужно быть немного более привлекательным и активным.Но мы, безусловно, можем дать некоторые рекомендации.Давайте посмотрим ...

В настоящее время у вас есть страница, которая отображает все записи из данной таблицы, это правильно?И вам нужно сделать две вещи:

  • Прежде чем отображать какие-либо записи, попросите пользователя выбрать диапазон дат.И сохраните выбор диапазона дат на странице, чтобы пользователь мог выбрать повторно.
  • Предоставьте кнопку, которая позволит пользователю экспортировать выбранные записи в Excel.

Для любого из этихвам нужно будет добавить фактическую форму на страницу.В настоящее время нет ни одного.Для выбора даты я рекомендую (естественно) использовать jQuery UI datepicker .Таким образом, форма для этого будет выглядеть примерно так:

<form method="POST" action="myPHPFile.php">
  <input type="text" id="fromDate" name="fromDate" />
  <input type="text" id="toDate" name="toDate" />
  <input type="submit" name="filterDate" value="Submit" />
</form>
<script>
  $(function() {
    $("#fromDate").datepicker();
    $("#toDate").datepicker();
  });
</script>

Возможно, вам придется обернуть JavaScript в $(document).ready(){}, чтобы заставить его работать правильно, вы захотите проверить это.В любом случае, это даст вам форму для отправки дат в ваш сценарий.Оберните части вашего скрипта, которые выводят данные в условное выражение, которое определяет, присутствуют ли значения формы или нет.Если это не так, не берите никаких записей.Если это так, выполните некоторую базовую проверку ввода (убедитесь, что значения являются допустимыми значениями, убедитесь, что fromDate предшествует toDate и т. Д.) И создайте запрос SQL для фильтрации по диапазону дат.(Старайтесь избегать уязвимостей в SQL-инъекциях.)

Для вывода в Excel вы можете найти готовое решение для вас, которое просто нужно немного переделать.Если бы я создавал его с нуля, я бы, вероятно, просто выводил файл .csv, а не полный файл Excel.Большинство пользователей не знают / не заботятся о разнице.В этом случае вам просто нужно либо создать второй сценарий, который почти идентичен существующему, либо добавить к существующему флаг, который переключается между выводом HTML и CSV, например, через скрытое поле формы.

Для вывода CSV сначала убедитесь, что вы установили заголовки ответа .Вы захотите написать заголовок, чтобы сообщить браузеру, что вы выводите файл CSV, а не text/html, и, возможно, предложить имя файла для сохранения браузером.Тогда форма ввода SQL-запроса будет почти такой же, как и раньше.Разница лишь в «HTML», который выводится.Вместо HTML-тегов вы должны обернуть записи в запятые, двойные кавычки (где это уместно) и возврат каретки.

Нет ничего особенного в выводе «файла» против «HTML», потому что HTTPПротокол не имеет различий между ними.Это всегда просто текст с заголовками.

Теперь я уверен, что у вас есть еще вопросы по этому поводу.И это нормально.На самом деле, нам нравится поощрять задавать (и, конечно, отвечать) вопросы здесь.Поэтому, пожалуйста, не стесняйтесь просить разъяснений либо в комментариях к этому ответу (или в других ответах), либо путем редактирования и уточнения исходного вопроса, либо задавая совершенно новый вопрос, если у вас есть конкретная тема, по которой вам нужна помощь.В идеале, хороший вопрос о переполнении стека состоит из примера кода, который вы пытаетесь написать, объяснения того, что код должен делать, описания фактического результата кода и любой полезной информации, относящейся к коду.,На данный момент ваш вопрос содержит код, несколько не связанный с тем, что вы спрашиваете, и вы просто просите, чтобы мы добавили к нему некоторые функции.

...