Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как решить данную проблему?

Как решить данную проблему?


     07.07.2017    Общие вопросы по PHP, Модули    2350

вопрос
Приветствую всех. Помогите пожалуйста. Делаю модуль и столкнулся с проблемой. Нужно чтобы при запросе к примеру сайт.ру/skript.php?id=123 произошёл поиск по базе в таблице xfield в доп поле id и если данный id будет найден, то сделать вывод информации с другого доп поля к примеру imya. Есть код который вроде как справляется со своей задачей но немного не верно, так как при обоих запросах к примеру сайт.ру/skript.php?id=123 и сайт.ру/skript.php?id=1 выводиться одинаковая информация. Привожу код:
<?php
@error_reporting(E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);
@ini_set('error_reporting', E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);

@ini_set('display_errors', true);
@ini_set('html_errors', false);

define('DATALIFEENGINE', true);
define('ROOT_DIR', dirname(__FILE__));
define('ENGINE_DIR', ROOT_DIR.'/engine');

include ENGINE_DIR.'/data/config.php';
require ENGINE_DIR.'/classes/mysql.php';
require ENGINE_DIR.'/data/dbconfig.php';
require ENGINE_DIR.'/modules/functions.php';

$search_data = ($_GET['id']) ? intval($_GET['id']) : 0;
$kod=$_GET['id'];
if (!$search_data) die();

$xfields_search_name = 'kp'; //Имя доп. поля в котором искать
$xfields_print_name = 'txt'; //Имя доп. поля которое выводить

$posts = $db->super_query("SELECT xfields FROM ".PREFIX."_post WHERE xfields LIKE '%".$db->safesql($xfields_search_name)."|".$db->safesql($search_data)."%'", true);

foreach ($posts as $post) {
    $xfieldsdata = xfieldsdataload($post['xfields']);
    if (isset($xfieldsdata[$xfields_print_name])) {
        
    }
}


			
?>

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

Ответил: Pringles


Горе луковое)
$id = intval($_GET['id']);

if (!$search_data) {
	die();
}

$xf_config = [
	'search' => 'kp', //Имя доп. поля в котором искать
	'print' => 'txt' //Имя доп. поля которое выводить
];

$db->query("SELECT xfields FROM ".PREFIX."_post WHERE SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . $xf_config['search'] . "|', -1 ) , '||', 1 ) = '{$id}'");

while ($row as $db->get_row()) {
	$xfieldsdata = xfieldsdataload($row['xfields']);

    if ($xfieldsdata[$xf_config['print']]) {
        echo 'success';
    }
}

9 комментариев

Pringles
Юзер

Pringles - 7 июля 2017 22:04 -


igrovik
Юзер

igrovik - 7 июля 2017 22:30 -

Pringles,
Почему я луковое?:-) Не ругается Parse error: syntax error, unexpected '[' in W:\domains\test\prov.php on line 17
Да и в принципе уже нашел подходящий код:-) Вот еще бы в нём сделать такую фикчу что если совпадений не найдено то вывести нужно сообщение на экран например "Увы но у нас ничего такого нет" было бы вообще супер:-)
<?php

@error_reporting(E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);
@ini_set('error_reporting', E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);

@ini_set('display_errors', true);
@ini_set('html_errors', false);

define('DATALIFEENGINE', true);
define('ROOT_DIR', dirname(__FILE__));
define('ENGINE_DIR', ROOT_DIR.'/engine');

$search_data = ($_GET['id']) ? intval($_GET['id']) : 0;

if (empty($search_data)) {
    die();
}

include(ENGINE_DIR.'/data/config.php');

require_once ENGINE_DIR.'/classes/mysql.php';
require_once ENGINE_DIR.'/data/dbconfig.php';
require_once ENGINE_DIR.'/modules/functions.php';

$xfields_search_name = 'kp'; //Имя доп. поля в котором искать
$xfields_print_name = 'txt'; //Имя доп. поля которое выводить

$posts = $db->super_query("SELECT xfields FROM ".PREFIX."_post WHERE xfields LIKE '%".$db->safesql($xfields_search_name)."|".$db->safesql($search_data)."%'", true);

foreach ($posts as $post) {
    $xfieldsdata = xfieldsdataload($post['xfields']);
    if (isset($xfieldsdata[$xfields_print_name]) && isset($xfieldsdata[$xfields_search_name]) && $xfieldsdata[$xfields_search_name] == $search_data) {
        echo $xfieldsdata[$xfields_print_name].'<br>';
    }
}

Pringles
Юзер

Pringles - 7 июля 2017 22:40 -

Вам предоставил уже рабочий вариант, у вас же это мессиво, и не правильный выбор из xfields

igrovik
Юзер

igrovik - 7 июля 2017 22:46 -

Ну когда ставлю ваш вариант то выдает такую ошибку Parse error: syntax error, unexpected '[' in W:\domains\test\prov.php on line 17 ругается на это место
$xf_config =[
и еще мне нужно ответы в переменные записать к примеру если совпадений нет то $no если есть то $yes, а в вашем примере просто выдается echo 'success'; .

Pringles
Юзер

Pringles - 7 июля 2017 22:48 -

потому что у вас php < 5.4, и полностью за вас задачу никто не сделает.
Так что, "пишу модуль" и "напишите мне модуль" это разные вещи.

$id = intval($_GET['id']);

if (!$id) {
	die();
}

$xf_config = array(
	'search' => 'kp', //Имя доп. поля в котором искать
	'print' => 'txt' //Имя доп. поля которое выводить
);

$db->query("SELECT xfields FROM ".PREFIX."_post WHERE SUBSTRING_INDEX( SUBSTRING_INDEX( xfields, '" . $xf_config['search'] . "|', -1 ) , '||', 1 ) = '{$id}'");

if (!$db->num_rows()) {
	echo "Увы но у нас ничего такого нет";
	exit;
}

while ($row = $db->get_row()) {
	$xfieldsdata = xfieldsdataload($row['xfields']);

    if ($xfieldsdata[$xf_config['print']]) {
        echo $xfieldsdata[$xf_config['print']];
    }
}

igrovik
Юзер

igrovik - 7 июля 2017 23:12 -

Pringles,
Поставил php7 вот что выдает Fatal error: Uncaught Error: Call to a member function query() on null in W:\domains\test\prov.php:22 Stack trace: #0 {main} thrown in W:\domains\test\prov.php on line 22

Pringles
Юзер

Pringles - 7 июля 2017 23:17 -

ну дак а db кто подключит?

@error_reporting(E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);
@ini_set('error_reporting', E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);

@ini_set('display_errors', true);
@ini_set('html_errors', false);

define('DATALIFEENGINE', true);
define('ROOT_DIR', dirname(__FILE__));
define('ENGINE_DIR', ROOT_DIR.'/engine');

include ENGINE_DIR.'/data/config.php';

require_once ENGINE_DIR.'/classes/mysql.php';
require_once ENGINE_DIR.'/data/dbconfig.php';
require_once ENGINE_DIR.'/modules/functions.php';

igrovik
Юзер

igrovik - 7 июля 2017 23:26 -

Pringles,
Теперь выбивает 504 ошибку в браузере.

igrovik
Юзер

igrovik - 7 июля 2017 23:51 -

Pringles,

Всё заработало выставил php5.5 и полетело все нормально. Спасибо большое за помощь.И извините за потраченное время.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх