Ответы пользователя по тегу PHP
  • Если в бд поле не заполнено как сделать выборку полей на заполненных и незаполненных?

    @Aricus
    По сути вопроса уже ответили в комментариях:
    if ($_SESSION['city']=='') {
      // Поле пустое
    } else {
      // Поле заполненное
    }

    Лучше установить в БД city то поле равным пустой строке, а не NULL, чтобы путаницы не было. Тогда будет однозначное соответствие между базой данных и значением в поле.
    Далее, советую в PHP использовать функции не mysql, а mysqli, которые в разы быстрее отрабатывают. Работает с той же базой данных mysql и по тем же запросам, только синтаксис функций немного другой. Бесплатно делюсь своей функцией для удобной работы:
    $dbHost = 'localhost';
    $dbName = '...';
    $dbUser = 'root';
    $dbPassword = '...';
    $mysqli = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);
    if ($mysqli->connect_errno) {
    	echo "Не удалось подключиться к MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }
    $mysqli->set_charset("utf8");
    mb_internal_encoding("UTF-8");
    /**
     * Выполнение запроса к MySQL
     * @param string $query - запрос
     * @param string $type - вариант выполнения функции
     *   "many" (по умолчанию) - для возврата нескольких строк. Возвращает двухмерный массив
     *   "one" - для возврата одной строки. Возвращает массив
     *   "count" - для возврата подсчёта количества строк. Возвращает число, записанное в строке
     *   "do" - для выполняемой команды. Возвращает true в случае успешного выполнения, в случае ошибки выдаёт текст ошибки.
     *   остальные - для возврата одного значения одной строки
     * @return array|string|bool
     */
    function query($query, $type="many") {
    	global $mysqli;
    	if (!$result = $mysqli->query($query)) {
    		return mysqli_error($mysqli);
    	}
    	if ($type == "do") {
    		return true;
    	}
    	$values = [];
    	while ($row = $result->fetch_assoc()) {
    		$values[] = $row;
    	}
    	$result->free();
    	if ($type == "count") {
    		return $values[0]["COUNT(*)"];
    	} elseif ($type == "one") {
    		return $values[0];
    	} elseif ($type == "many") {
    		return $values;
    	} else {
    		return $values[0][$type];
    	}
    }
    Ответ написан
    Комментировать
  • Почему не устанавливаются границы в PhpExcel?

    @Aricus Автор вопроса
    Если кому интересно, сработал очередной вариант:
    $borderStyle = array(
    		'borders' => array(
    			'allborders' => array(
    				'style' => PHPExcel_Style_Border::BORDER_THIN
    			)
    		)
    	);
    	$sheet->getStyle('A'.$coord.':J'.$coord)->applyFromArray($borderStyle);

    Этот код рисует все границы внутри интервала. Отдельно рисуются как-то по другому, но для моих целей это не нужно, если пользоваться объединением ячеек:
    $sheet->mergeCells('D'.$coord.':J'.$coord);
    Ответ написан
    Комментировать
  • Как заменить регулярым выражением текст вне тегов?

    @Aricus
    Если кто, как и я, наткнётся на этот вопрос в поиске, я решил эту проблему. Вот как я заменил дефисы на неразрывные дефисы
    function processingText($text) {
    	if (preg_match("/\<.*\>/u", $text)) {
    		// До первого тега
    		$text = preg_replace_callback("|^([^\<]*)\<|u", function ($matches) {
    			return str_replace('-', '&#8209;', $matches[1]).'<';
    		}, $text);
    		// Основная часть
    		$text = preg_replace_callback("|\>([^\<]*)\<|u", function ($matches) {
    			return '>'.str_replace('-', '&#8209;', $matches[1]).'<';
    		}, $text);
    		// После последнего тега
    		$text = preg_replace_callback("|\>([^\<]*)$|u", function ($matches) {
    			return '>'.str_replace('-', '&#8209;', $matches[1]);
    		}, $text);
    		return $text;
    	} else {
    		// Замена в тексте без тегов
    		return str_replace('-', '&#8209;', $text);
    	}
    }

    Ограничение: предполагается, что '<' и '>' используются только в паре.
    Ответ написан
    Комментировать
  • Методы выборки из БД?

    @Aricus
    $sql = "SELECT * FROM `hashtags` WHERE ";
    if (...) {
      $sql .= "`id` = '$id' AND ";
    }
    if (...) {
      $sql .= "`tag` = '$tag' AND ";
    }
    if (...) {
      $sql .= "`type` = '$type' AND ";
    }
    $sql = substr($sql, 0, -5);
    Ответ написан
  • PhpSpreadsheet: как добавить изображение (gif) в excel?

    @Aricus Автор вопроса
    Если кому интересно, в этом "новом, улучшенном" плагине сделать добавление изображений не получилось. А вот "устаревший" PhpExcel c этой задачей отлично справляется.
    Ответ написан
    Комментировать