include_once 'dbh.php';
в пределах ваша функция кажется подозрительной. Что вы будете делать, если у вас есть другие функции, которые также должны выполнять SQL-запросы?
Вместо этого я бы поставил include_once 'dbh.php';
вне (над) вашей функции и, возможно, использовал бы require_once
вместо [ 114]. И затем внутри вашей функции поместите global $conn;
над вызовом mysqli_query
, чтобы ваша переменная $conn
определялась там, когда вы передаете ее в mysqli_query
.
Однако, если вы беспокоитесь о создании ненужных соединений SQL (например, в случае, если ваша функция lookup
никогда не вызывается), я думаю, было бы еще лучше поместить это в ваш dbh.php
:
<?php
$conn = null;
function Query($sql)
{
global $conn;
if (!$conn) // will only connect if connection does not exist yet
{
$dbServername = 'localhost';
$dbUsername = 'root';
$dbPassword = 'xxxxxxxxxxx';
$dbName = 'Recipe';
$conn = mysqli_connect($dbServername,$dbUsername,$dbPassword,$dbName);
}
return mysqli_query($conn,$sql);
}
?>
И теперь в вашем основном PHP-файле или в любом PHP-файле, в который вы включаете require_once 'dbh.php';
, вы можете напрямую использовать Query($sql)
для выполнения запросов, которые позаботятся о самом соединении (и делают это только при необходимости). [ 1117]
Просматривая код www.codeplex.com/aspnet , не кажется, что ни SelectList, ни метод расширения DropDownList не поддерживают использование OptGroup в выборе. Похож необходимо будет записать собственный дополнительный метод и расширить SelectListItem, чтобы содержать группировку или генерировать выбор вручную в разметке.
Я просто пишу расширения для этого, посмотрите это:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Routing;
namespace System.Web.Mvc.Html
{
public static class GroupDropListExtensions
{
public static string GroupDropList(this HtmlHelper helper, string name, IEnumerable<GroupDropListItem> data, string SelectedValue, object htmlAttributes)
{
if (data == null && helper.ViewData != null)
data = helper.ViewData.Eval(name) as IEnumerable<GroupDropListItem>;
if (data == null) return string.Empty;
var select = new TagBuilder("select");
if (htmlAttributes != null)
select.MergeAttributes(new RouteValueDictionary(htmlAttributes));
select.GenerateId(name);
var optgroupHtml = new StringBuilder();
var groups = data.ToList();
foreach (var group in data)
{
var groupTag = new TagBuilder("optgroup");
groupTag.Attributes.Add("label", helper.Encode( group.Name));
var optHtml = new StringBuilder();
foreach (var item in group.Items)
{
var option = new TagBuilder("option");
option.Attributes.Add("value", helper.Encode(item.Value));
if (SelectedValue != null && item.Value == SelectedValue)
option.Attributes.Add("selected", "selected");
option.InnerHtml = helper.Encode(item.Text);
optHtml.AppendLine(option.ToString(TagRenderMode.Normal));
}
groupTag.InnerHtml = optHtml.ToString();
optgroupHtml.AppendLine(groupTag.ToString(TagRenderMode.Normal));
}
select.InnerHtml = optgroupHtml.ToString();
return select.ToString(TagRenderMode.Normal);
}
}
public class GroupDropListItem
{
public string Name { get; set; }
public List<OptionItem> Items { get; set; }
}
public class OptionItem
{
public string Text { get; set; }
public string Value { get; set; }
}
}