目前,我正在处理一个网页,其中从数据库中提取某些数据并将其显示给用户。此信息与某些项目信息以及这些项目的主要合作伙伴有关。我想实现一个功能,用户可以在一个主要合作伙伴(链接)和链接点击将重定向该用户到另一个页面(其中所有的机构的数据库中的信息是),但与预定义仅用于组织搜寻条件的等于点击的潜在客户合作伙伴链接。
我找到了解决方案,但是问题是该解决方案(我将在下面进一步描述)对于多个(128)组织而言不是那么好/有效。所以问题是,您知道更好/更多吗?实现这一目标的有效解决方案。要回答这个问题,您可能还需要一些背景信息:
背景资料
在输出的数据库信息(在表中完成)中,有几个信息列/标题,例如:
数据的获取是通过简单的查询完成的,其中某些数据库列具有特定的标识符。例如,项目网站列显然是一个链接,因此在查询中它是按以下方式完成的:$ SomeQueryVar =(“ SELECT project_website as LINK FROM xxxx WHERE project_website('$ some_website')”);-只是一个简短的例子来澄清问题。
为了显示,数据被“捕获”,如下所示:
if(count($SomeQueryVar)>0){
for($i=0;$i<count($SomeQueryVar);$i++){
echo "<tr>";
foreach($SomeQueryVar[$i] as $key=>$value){
echo "<td>";
$b=unserialize($value);
if($key =='LINK' && $value != NULL){
$first = true;
array_filter($b);
foreach($b as $y){
echo '<a href="'.$y.'">'."Project website".'</a>';
$first = false;
if(!$first) break;
}
} else {
echo $value;
}
echo "</td>";
}
echo "</tr>";
}
}
如您在上面的代码中看到的,某些数据库列需要其余显示。例如,链接必须是可单击的,而不仅仅是纯文本。if $ key ==捕获了这些“例外”,对于只需要常规显示(纯文本)的数据,插入的最后一个echo只是$ value。
我找到的解决方案
因此,关于该问题,我发现我可以使用项目页面上的?SomePage并使用组织页面上的此“添加的链接值”进行比较来创建重定向链接。如果链接相等,则执行特定查询。但是将代码粘贴到此处可能更容易:
为了捕获特定的主要合作伙伴,“捕获”部分在我的查询中也使用了一个称为ORG的标识符(代表组织)。所以这是我捕获organizations表的代码:
if($key =='ORG' && $value != NULL){
$needle = array('Brainport','Development','BRAINPORT',
'brainport','DEVELOPMENT','development');
$needle2 = array('Casa','CASA', 'casa');
if (strpos_arr($value,$needle) !== false) {
echo '<a href="http://portal.e-ucare.eu/database/organisations/?a=brainport" >'.$value.'</a>';
}
if (strpos_arr($value,$needle2) !== false) {
echo '<a href="http://portal.e-ucare.eu/database/organisations/?a=casa" >'.$value.'</a>';
}
}
在上面的代码中,我为2个组织(brainport和casa)创建了它。对于此解决方案,我使用了一个名为strpos_arr的函数,该函数在大海捞针中搜索;)因此,在上面的代码中,我将这些针设置为数据库中必须为其创建链接的名称。因此,例如,如果数据库中存在一个带有Brainport字样的公司,则该“收集程序”将看到并显示组织,并使名称可单击。
$ needle的strpos_arr函数如下:
function strpos_arr($value, $needle) {
if(!is_array($needle)) $needle = array($needle);
foreach($needle as $what) {
if(($pos = strpos($value, $what))!==false) return $pos;
}
return false;
}
在重定向页面的代码也将赶上某些环节,使该链接查询-所以对于brainport链接,这是http://portal.e-ucare.eu/database/organisations/?a=brainport -在第二页代码此链接被捕获是这样的:
$host = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
if($host == 'portal.e-ucare.eu/database/organisations/?a=brainport')
{
$link_word = "Brainport";
$tmp = $wpdb->get_results("
SELECT
name_of_company__organization, company_location,
company_website as LINK, organisation_type,
organisation_active_in_, organisation_scope,
organisation_files as DOC
FROM
wp_participants_database
WHERE
name_of_company__organization REGEXP ('$link_word')
ORDER BY
name_of_company__organization ASC
");
}
有了这个解决方案,我可以做我想做的,但是就像我一开始所说的那样,我不仅需要两个组织,而且需要128个组织!这意味着我必须在两个页面上复制捕获代码块128次!!这显然不是很有效。
那么,有没有更有效的方法来实现这一目标?抱歉,如果不清楚,但我发现很难轻易将其缩小;)
无论如何,先谢谢您!
您可以重写为第一部分
if($key =='ORG' && $value != NULL){
$needles = array(
'brainport'=>array('Brainport','Development','BRAINPORT','brainport','DEVELOPMENT','development'),
'casa'=>array('Casa','CASA', 'casa')
);
foreach($needles AS $nkey => $needle){
if(strpos_arr($value,$needle) !== false) {
echo "<a href='http://portal.e-ucare.eu/database/organisations/?a={$nkey}' >{$value}</a>";
}
}
}
对于第二部分,制作一个类似于[EDIT]的数组
$link_words = array(
'portal.e-ucare.eu/database/organisations/?a=brainport'=>'Brainport',
'portal.e-ucare.eu/database/organisations/?a=casa'=>'Casa',
);
那么你可以使用
$host = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
if(!empty($link_words[$host])){
$link_word = $link_words[$host];
$tmp = $wpdb->get_results("
SELECT
name_of_company__organization, company_location, company_website as LINK, organisation_type, organisation_active_in_, organisation_scope, organisation_files as DOC
FROM
wp_participants_database
WHERE
name_of_company__organization REGEXP ('$link_word')
ORDER BY
name_of_company__organization ASC
");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句