@arsenaljek

Таблица products. В ней есть 3 поля по которым нужно выдавать конкретную строку. По GET запросу?

Дано: Таблица products. В ней есть 3 поля по которым нужно выдавать конкретную строку. Эти поля: idProduct(Это артикул товара может содержать, как цифры, так и буквы), linkProduct(это конкретный УРЛ товара) и поле name (это название товара)
Пользователь при вводе в форму своего запроса(обычно это или артикул или прямая ссылка) должен получить нужную ему строку из таблицы. Запрос идёт GET и я решаю это следующим образом
if (isset($_GET['sku'])) {
	if (is_numeric($sku)) { // если начало с цифры
	// if (mb_strlen($sku) >= 5 & mb_strlen($sku) <= 12) { // если запрос от 8 до 10 символов
		$sku = str_replace(" ","",$sku);
		$sql = "SELECT * FROM products WHERE idProduct = '".$sku."' LIMIT 0,1";
	} elseif ($sku == strpos($sku, 'https')) { // если начало с https
		$sku = str_replace(" ","",$sku);
		if ($_GET['sku'] = strpos($_GET['sku'], '?block_main')) {
			$sku = strstr($sku, '?block_main', true);
			$sql = "SELECT * FROM products WHERE linkProduct = '".$sku."' ";
		} elseif ($sku_new == true) {
			$sql = "SELECT * FROM products WHERE linkProduct = '".$sku."/' ";
		} else {
			$sql = "SELECT * FROM products WHERE linkProduct = '".$sku."' ";
		}
		// $sql = "SELECT * FROM products WHERE linkProduct LIKE '%".$sku."%' LIMIT 0,1";
	} else {
		$sql = "SELECT * FROM products WHERE name LIKE '%".$sku."%' LIMIT 0,1";
	}
}

Но мне это решение кажеться слишком корявым и оно не всегда отрабатывает т.к как задумано. Помогите его сделать более "уникальным" для возможности добавления условий.
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
Такая строчка работать не может, strpos возвращает число
$sku == strpos($sku, 'https')

Я бы переписал так

$sku = isset($_GET['sku']) ? str_replace(" ", "", $_GET['sku']) : null;

if (is_numeric($sku)) { // если начало с цифры
    $filter = ['idProduct', $sku, true];  
} elseif (substr($sku, 0, 5) == 'https') { // если начало с https
    $beforeBlockMain = strstr($sku, '?block_main', true) || $sku;
    $filter = ['linkProduct', $sku . ($sku_new ? '/' : ''), false];
} elseif ($sku) {
    $filter = ['name', "%" . $sku . "%", true];
}

if ($filter) {
    $attrName = $filter[0];
    $value = $filter[1];
    $operator = $value[0] == "%" ? " LIKE " : " = ";
    $limit = $filter[2];

    $sql = "SELECT * FROM products WHERE " . $attrName . $operator . $value . ($limit ? " LIMIT 0,1" : "");
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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