有图片
如何以最少的代码从一张这样的图片中获取十六进制格式的颜色数组?(红宝石)
[#0091C0, #70D6EC, #83B0E7]
或哈希匹配,
@colors = [ "Aqua Splach Heather", "Crystal Blue Heather", "Navy Blue"]
每张图片的方格数不同(长度56px)
我有一个从文件中获取的数组
urls = IO.readlines("man.txt")
然后在循环中做一些事情
urls.each do |url|
url = urls.at(i)
some code..
# записываю в новый файл текущую строку
File.open('url__success.txt', 'a+'){ |file| file.write urls.at(i) }
# в конце пытаюсь удалить текущую строку и заменить пустой системно
system("sed -e 's/^/\n/' man.txt")
end
我明白了
sed:-e 表达式 #1,字符 5:未终止的 `s' 命令
尽管 sed 以纯粹的形式从控制台工作。还有其他选择吗?我也不希望url = urls.at(i)这些值随着循环的进行而丢失
在 vs 代码中,我将远程 ssh 和远程 ssh:explorer 在 ssh 配置中我尝试转发端口 9000,vs 代码将在该端口上侦听服务器上的 xdebug
Host debug
HostName y.y.y.y
User web
ForwardAgent yes
DynamicForward 9000
# RemoteForward 52698 127.0.0.1:52698
然后我连接到服务器,安装 x_debug 插件,在服务器上创建一个文件夹 .vscode,它包含 launh.json 调试器的设置
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "VS",
"type": "php",
"hostname": "localhost",
"port": 9000,
"request": "launch",
"stopOnEntry": true,
"log":true,
"pathMappings": {
"/var/www/html": "/var/web/sites/namesiteY",
"/app": "../"
}
}
]
}
在该站点的服务器上安装了 x_debug(根据此说明),将这些设置添加到 php.ini:
;XDEBUG START
zend_extension = /usr/lib/php/20151012/xdebug.so
[XDEBUG]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_enable = 1
xdebug.remote_host = x.x.x.x
xdebug.remote_port = 9000
xdebug.idekey = VS
xdebug.remote_connect_back = 1
xdebug.force_display_errors = On
;XDEBUG END
结果,我尝试按开始调试以获得简单的测试脚本
$home = 1 + 4;
echo $home;
$value = 0;
if ($value == 0 ) {
echo "TRUE"; // ТУТ BREAKPOINT
} else {
echo "False"; // И ТУТ
}
什么也没有发生,变量没有被写入,这出现在调试控制台中:
<- launchResponse
Response {
seq: 0,
type: 'response',
request_seq: 2,
command: 'launch',
success: true }
我尝试了使用和不使用 chrome 插件,检查了 ide 是否正在侦听端口 9000: http ://skrinshoter.ru/s/090719/1A2n8TG0?a ,一切似乎都很好我在哪里搞砸了?
附言 1
在 xdebug 插件文档中有一个用于 vs 代码的映射示例:
// server -> local
"pathMappings": {
"/var/www/html": "${workspaceRoot}/www",
"/app": "${workspaceRoot}/app"
}
关于注册这些方式的内容还不是很清楚?关于 .vscode 文件夹?在我的情况下有必要吗?
ps2
y.y.y.y - ip сервера с удаленным сайтом
x.x.x.x - мой статичный ip ( там где установлена ide)
有一个送货服务,客户在其中注册,每个客户可以通过在他的帐户中填写表格来添加多个收件人。
这是收件人的表格:
CREATE TABLE x_receivers (
id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
id_client bigint(20) UNSIGNED NOT NULL,
surname varchar(255) NOT NULL,
name varchar(255) NOT NULL,
patronymic varchar(255) NOT NULL,
ps_type tinyint(1) UNSIGNED NOT NULL COMMENT 'тип документа',
ps_serial varchar(255) NOT NULL,
ps_num varchar(255) NOT NULL,
ps_code varchar(255) NOT NULL,
ps_who varchar(255) NOT NULL,
ps_when char(14) NOT NULL,
postcode char(12) NOT NULL,
country varchar(255) NOT NULL,
area varchar(255) NOT NULL,
city varchar(255) NOT NULL,
street varchar(255) NOT NULL,
house char(12) NOT NULL,
room char(12) NOT NULL,
sort tinyint(3) UNSIGNED NOT NULL,
scan_1 varchar(255) NOT NULL COMMENT 'скан первой стр. паспорта',
scan_2 varchar(255) NOT NULL COMMENT 'скан прописки',
inn varchar(255) DEFAULT NULL,
house_korp varchar(255) DEFAULT NULL,
citizenship varchar(255) DEFAULT NULL,
b_date char(14) DEFAULT NULL COMMENT 'Дата рождения',
phone varchar(255) DEFAULT NULL,
email varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
)
ENGINE = MYISAM,
AUTO_INCREMENT = 37299,
AVG_ROW_LENGTH = 341,
CHARACTER SET utf8,
CHECKSUM = 0,
COLLATE utf8_general_ci;
ALTER TABLE x_receivers
ADD INDEX id_client (id_client);
客户端模型(将数据保存和写入数据库的部分)
/**
* Получаем сохраненные адреса покупателя
*
* @deprecated
*
* @param bool $id
*
* @return mixed
*/
public static function getAddresses($id = false) {
$user_id = $id ? (int)$id : (int)Client::get('id');
return DB::fetch('select address from #prefix#addresses where id_client = ? order by sort asc', $user_id);
}
/**
* Сохраняем паспортные данные получателей
*
* @param array $receivers
*/
public static function saveReceivers(&$receivers = array()) {
$user_id = (int)Client::get('id');
$receivers_ids = DB::shift_array('select id from #prefix#receivers where id_client = ?', $user_id);
$receivers_ids = $receivers_ids ? $receivers_ids : array();
DB::execute('delete from #prefix#receivers where id_client = ?', $user_id);
if ( $receivers ) {
foreach( $receivers as $i => $receiver ) {
$fields = array();
foreach( $receiver as $key => $field ) {
if ( $key == 'id' ) {
// если передается id, проверяем, чтобы он ранее пренадлежал текущему пользователю;
// т.о. защищаем подмену чужого получателя
if ( array_search((int)$field, $receivers_ids) === false ) {
continue;
}
}
// фильтруем значение от всякого мусора
$fields[ $key ] = "'" . preg_replace('#[^\w\d\s\-\.\,\@\/]#ui', '', $field) . "'";
}
$fields['sort'] = $i;
// insert по одному, потому что у каждой записи может быть разный набор заполненных полей
DB::execute('insert into #prefix#receivers (id_client, ' . join(', ', array_keys($fields)) . ") values ($user_id, " . join(', ', $fields) . ')');
// \clients\ReceiversHistory::saveItem(DB::last_id());
}
}
@setcookie('receivers', count($receivers), time() + conf('General', 'session_duration'), '/', $_SERVER['HTTP_HOST'], false, true);
}
/**
* Получаем данные всех получателей клиента
*
* @param int|bool $id
* @param bool $all
*
* @return object|bool
*/
public static function getReceivers($id = false, $all = false) {
$user_id = $id ? (int)$id : (int)Client::get('id');
if ( $id && !$all ) {
// получаем данные конкретного получателя
return DB::single('select * from #prefix#receivers where id = ? order by sort asc', $user_id);
}
$receivers = DB::fetch('select * from #prefix#receivers where id_client = ? order by surname', $user_id);
if ($receivers) {
foreach( $receivers as $item ) {
$item->regionid=Cities::getregionid($item->city,$item->country);
}
}
@setcookie('receivers', count($receivers), time() + conf('General', 'session_duration'), '/', $_SERVER['HTTP_HOST'], false, true);
return $receivers;
}
/**
* Имеются ли у текущего пользователя получатели
*
* @return bool
*/
public static function hasReceivers() {
if ( empty(self::getReceivers()) ) {
return false;
}
return true;
}
/**
* Принадлежит ли указанный получатель текущему пользователю
*
* @param int $receiver_id
*
* @return boolean
*/
public static function receiverExist($receiver_id) {
return !!DB::shift('select id from #prefix#receivers where id_client = ? and id = ? order by sort asc limit 1', Client::$user->id, (int)$receiver_id);
}
当客户有 40 多个收件人时会出现问题,即如果您填写 41 个收件人的表格,他不会进入数据库。如果您反其道而行之(直接通过数据库添加),则将显示 41 个收件人。可能是什么问题呢?首先应该调试什么以及如何调试?
告诉我为什么正则表达式不起作用
/^[0-9]{4}[-]{1}[0-9]{2}[-]{1}[0-9]{2} [0-9]{2}[:]{1}[0-9]{2}[:]{1}[0-9]{2}$
应该拉出日期:
2018-07-16 21:09:02 - 主机: - UNCAUGHT_EXCEPTION - [Bitrix\Main\DB\SqlQueryException]
查找日期左右是否没有更多字符
全文示例:
2018-07-16 21:09:02 - Host: - UNCAUGHT_EXCEPTION - [Bitrix\Main\DB\SqlQueryException]
Mysql query error: (1146) Table 'sitemanager.b_option' doesn't exist (400)
SELECT o.SITE_ID, o.MODULE_ID, o.NAME, o.VALUE FROM b_option o
/home/bitrix/www/bitrix/modules/main/lib/db/mysqliconnection.php:137
#0: Bitrix\Main\DB\MysqliConnection->queryInternal(string, array, NULL)
/home/bitrix/www/bitrix/modules/main/lib/db/connection.php:330
#1: Bitrix\Main\DB\Connection->query(string)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:226
#2: Bitrix\Main\Config\Option::load(string, NULL)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:53
#3: Bitrix\Main\Config\Option::get(string, string, string)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:370
#4: Bitrix\Main\HttpRequest->prepareCookie(array)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:68
#5: Bitrix\Main\HttpRequest->__construct(object, array, array, array, array)
/home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:46
#6: Bitrix\Main\HttpApplication->initializeContext(array)
/home/bitrix/www/bitrix/modules/main/lib/application.php:122
#7: Bitrix\Main\Application->initializeExtendedKernel(array)
/home/bitrix/www/bitrix/modules/main/include.php:1
#8: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog_before.php:14
#9: require(string)
/home/bitrix/www/bitrix/modules/main/tools/cron_events.php:11
----------
$externalId = $arValues['EXTERNAL_ID']; // id заявки текущей
$arValues['STATUS']['XML_ID'] = 41792862; // симв. код статуса 500
$arCurrentStatus['ID'] = 500; // текущий 500
CIBlockElement::SetPropertyValuesEx($arValues['EXTERNAL_ID'], false, array( $arValues['STATUS']['XML_ID'] => $arCurrentStatus['ID']));
告诉我如何正确重写 SetPropertyValuesEx 以通过单击当前数据更改 Bitrix 中应用程序的状态:41792861 XML_ID 200 - id
如何将block-item-price 块的内容对齐到中心?不使用像素缩进。(布局应该是流畅的,布局是 1960 像素,布局是 1360,所以没有确切的值)
html {
font-size: 20pt;
}
body {
background-image: url(../img/bg.png);
font-family: "Cormorant Infant", serif;
margin: 0 auto !important;
padding: 0 auto !important;
}
.no-gutter > [class*='col-'] {
padding-right: 0;
padding-left: 0;
}
.header-video {
max-height: 960px;
height: 100%;
width: 100%;
position: relative;
}
#video_background {
position: absolute !important;
top: -15px !important;
left: 0px !important;
bottom: 0px !important;
right: 0px !important;
width: 100% !important;
height: 960px !important;
}
.title-text {
color: #fff;
text-transform: uppercase;
font-family: "Cormorant Infant";
font-weight: bold;
}
.blank {
height: 900px;
position: relative;
background-image: url(../img/header.png);
background-repeat: no-repeat;
}
.title-text {
height: 108px;
display: inline-block;
text-align: center;
width: 100%;
}
.top-menu {
background-image: url(../img/menu.svg);
width: 113px;
height: 40px;
color: #46382e;
padding-top: 7px;
padding-bottom: 14px;
padding-left: 10px;
padding-right: 10px;
margin-top: 40px;
margin-left: 60px;
font-size: 16pt;
text-align: center;
text-transform: uppercase;
position: absolute;
}
.fa-bars {
font-size: 17px !important;
}
.personal-room {
background-image: url(../img/lk.svg);
background-repeat: no-repeat;
width: 233px;
height: 40px;
color: #46382e;
padding-top: 7px;
padding-bottom: 14px;
padding-left: 10px;
padding-right: 10px;
margin-top: 40px;
margin-right: 60px;
font-size: 16pt;
text-align: center;
text-transform: uppercase;
position: absolute;
right: 0;
top: 0;
}
.logo {
position: absolute;
left: 50%;
top: 15px;
margin-left: -75px;
}
.bootom-blank-icon {
bottom: 70px;
position: absolute;
text-align: center;
display: inline-block;
font-size: 34pt;
z-index: 100;
width: 100%;
}
.icon-circle {
color: #fff;
border: 2px #fff solid;
display: inline-block;
border-radius: 100%;
padding-left: 5px;
padding-right: 5px;
padding-top: 6px;
padding-bottom: 9px;
width: 70px;
height: 70px;
margin-left: 15px;
}
.block-item {
display: block;
float: left;
width: 100%;
background-position: center center;
position: relative;
background-size: 100%;
}
.block-item img {
width: 100%;
}
.block-item-name {
color: white;
text-align: right;
height: 80px;
font-size: 14pt;
text-transform: uppercase;
padding-top: 43px;
padding-right: 37px;
font-weight: bold;
position: absolute;
margin-left: 6%;
position: absolute;
width: 87%;
border-bottom: 2px #fff solid;
top: 0;
}
.block-item-name-span {
font-weight: bold;
font-family: "Cormorant Infant", serif;
font-size: 14pt;
}
.block-item-price {
position: absolute;
bottom: 30px;
font-size: 14pt;
}
.price-week {
background-color: #483e37;
color: #e3dedb;
display: inline-block;
float: left;
padding-top: 2%;
padding-bottom: 2%;
padding-left: 15px;
padding-right: 15px;
border-top-left-radius: 35px;
border-bottom-left-radius: 35px;
}
.price-holy {
background-color: #e3dedb;
color: #483e37;
display: inline-block;
padding-top: 2%;
padding-bottom: 2%;
padding-left: 15px;
padding-right: 15px;
border-top-right-radius: 35px;
border-bottom-right-radius: 35px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/css/bootstrap.css" rel="stylesheet" />
<div class="row no-gutter">
<div class="col-md-4">
<div class="block-item block-item-standart">
<img src="https://photos-3.dropbox.com/t/2/AADoJLpMrZqjdFy87e1PqJEJZSZWxuxzfmLFZP5QKr_Quw/12/418398532/png/32x32/1/_/1/2/standart.png/EPKFsq0DGJEQIAIoAg/wawVbTlclODjevfAaQvkdxVsFHkgvpH1f0A0xQPa58U?preserve_transparency=1&size=32x32&size_mode=5" alt="">
<div class="block-item-name"><span class="block-item-name-span">Стандарт</span></div>
<div class="block-item-price">
<span class="price-week">Цена в будни</span>
<span class="price-holy">Цена в выходные</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="block-item block-item-standart">
<img src="https://photos-3.dropbox.com/t/2/AADoJLpMrZqjdFy87e1PqJEJZSZWxuxzfmLFZP5QKr_Quw/12/418398532/png/32x32/1/_/1/2/standart.png/EPKFsq0DGJEQIAIoAg/wawVbTlclODjevfAaQvkdxVsFHkgvpH1f0A0xQPa58U?preserve_transparency=1&size=32x32&size_mode=5" alt="">
<div class="block-item-name"><span class="block-item-name-span">Стандарт</span></div>
<div class="block-item-price">
<span class="price-week">Цена в будни</span>
<span class="price-holy">Цена в выходные</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="block-item block-item-standart">
<img src="https://photos-3.dropbox.com/t/2/AADoJLpMrZqjdFy87e1PqJEJZSZWxuxzfmLFZP5QKr_Quw/12/418398532/png/32x32/1/_/1/2/standart.png/EPKFsq0DGJEQIAIoAg/wawVbTlclODjevfAaQvkdxVsFHkgvpH1f0A0xQPa58U?preserve_transparency=1&size=32x32&size_mode=5" alt="">
<div class="block-item-name"><span class="block-item-name-span">Стандарт</span></div>
<div class="block-item-price">
<span class="price-week">Цена в будни</span>
<span class="price-holy">Цена в выходные</span>
</div>
</div>
</div>
</div>
告诉我关于定位块的一般性建议、做什么(以及如何做)
ps谁吃一块codeopen舒服: codeopen
1s上有一个站点-Bitrix,用win-1251编码制作
问题是当与 roistat 交换时,交换文件以 win-1251 编码飞走,这导致管理面板中出现这样的帽子:
由于集成是很久以前和其他人完成的,不知道如何找到与roystat本身的交换文件?(根据新的api规则,现在集成是通过一个模块,但没有安装)。
来自 TP 答案
在表单代码中,按钮被标记为以下类 - bx_bt_submit 该类在您的项目中的表单代理中不使用。在这种情况下,当您单击时,您的脚本会引用以下路径 - onc ick="Stat.SEND_1BUY_CLICK();" 显然,有关应用程序的信息会转到您服务器上的单独订单处理器文件。请您检查信息的发送位置以及处理订单时是否添加了我们的 php 脚本或任何其他脚本
如何找到这个函数SEND_1BUY_CLICK()?
完全改变编码是没有意义的,因为它是劳动密集型的,而且问题只出在外部服务上。
这是 sass 中的一段 css 代码:
.no-gutter > [class*='col-']
Bitrix 17.4 有用于 catalog.section 的 result_modifier.php
// Заменяем картинку у товара на дефолтную, у которой не задано изображение
foreach($arResult["ITEMS"] as $key=>$arItem):
if (!is_array($arItem["PREVIEW_PICTURE"])):
$arResult["ITEMS"][$key]["PREVIEW_PICTURE"]["SRC"]=SITE_TEMPLATE_PATH."/assets/image/main/car-item-2.png";
$arResult["ITEMS"][$key]["PREVIEW_PICTURE"]["HEIGHT"]=150;
$arResult["ITEMS"][$key]["PREVIEW_PICTURE"]["WIDTH"]=150;
endif;
endforeach;
但是代码不起作用,只显示手动上传的图片。可能是什么问题呢?输出中的图片通过如下属性加载:
也许应该有另一个常量而不是 PREVIEW_PICTURE。
组件本身的UPD1模板代码
<? if ( ! defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true ) {
die();
}
use \Bitrix\Main\Localization\Loc;
/**
* @global CMain $APPLICATION
* @var array $arParams
* @var array $arResult
* @var CatalogSectionComponent $component
* @var CBitrixComponentTemplate $this
* @var string $templateName
* @var string $componentPath
*/
$this->setFrameMode(true);
$this->addExternalCss('/bitrix/css/main/bootstrap.css');
if ( ! empty($arResult['NAV_RESULT']) ) {
$navParams = array(
'NavPageCount' => $arResult['NAV_RESULT']->NavPageCount,
'NavPageNomer' => $arResult['NAV_RESULT']->NavPageNomer,
'NavNum' => $arResult['NAV_RESULT']->NavNum
);
} else {
$navParams = array(
'NavPageCount' => 1,
'NavPageNomer' => 1,
'NavNum' => $this->randString()
);
}
$showTopPager = false;
$showBottomPager = false;
$showLazyLoad = false;
if ( $arParams['PAGE_ELEMENT_COUNT'] > 0 && $navParams['NavPageCount'] > 1 ) {
$showTopPager = $arParams['DISPLAY_TOP_PAGER'];
$showBottomPager = $arParams['DISPLAY_BOTTOM_PAGER'];
$showLazyLoad = $arParams['LAZY_LOAD'] === 'Y' && $navParams['NavPageNomer'] != $navParams['NavPageCount'];
}
$templateLibrary = array('popup', 'ajax', 'fx');
$currencyList = '';
if ( ! empty($arResult['CURRENCIES']) ) {
$templateLibrary[] = 'currency';
$currencyList = CUtil::PhpToJSObject($arResult['CURRENCIES'], false, true, true);
}
$templateData = array(
'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
'TEMPLATE_LIBRARY' => $templateLibrary,
'CURRENCIES' => $currencyList
);
unset($currencyList, $templateLibrary);
$elementEdit = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_EDIT');
$elementDelete = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_DELETE');
$elementDeleteParams = array('CONFIRM' => GetMessage('CT_BCS_TPL_ELEMENT_DELETE_CONFIRM'));
$positionClassMap = array(
'left' => 'product-item-label-left',
'center' => 'product-item-label-center',
'right' => 'product-item-label-right',
'bottom' => 'product-item-label-bottom',
'middle' => 'product-item-label-middle',
'top' => 'product-item-label-top'
);
$discountPositionClass = '';
if ( $arParams['SHOW_DISCOUNT_PERCENT'] === 'Y' && ! empty($arParams['DISCOUNT_PERCENT_POSITION']) ) {
foreach (explode('-', $arParams['DISCOUNT_PERCENT_POSITION']) as $pos) {
$discountPositionClass .= isset($positionClassMap[$pos]) ? ' ' . $positionClassMap[$pos] : '';
}
}
$labelPositionClass = '';
if ( ! empty($arParams['LABEL_PROP_POSITION']) ) {
foreach (explode('-', $arParams['LABEL_PROP_POSITION']) as $pos) {
$labelPositionClass .= isset($positionClassMap[$pos]) ? ' ' . $positionClassMap[$pos] : '';
}
}
$arParams['~MESS_BTN_BUY'] = $arParams['~MESS_BTN_BUY'] ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_BUY');
$arParams['~MESS_BTN_DETAIL'] = $arParams['~MESS_BTN_DETAIL'] ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_DETAIL');
$arParams['~MESS_BTN_COMPARE'] = $arParams['~MESS_BTN_COMPARE'] ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_COMPARE');
$arParams['~MESS_BTN_SUBSCRIBE'] = $arParams['~MESS_BTN_SUBSCRIBE'] ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_SUBSCRIBE');
$arParams['~MESS_BTN_ADD_TO_BASKET'] = $arParams['~MESS_BTN_ADD_TO_BASKET'] ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_ADD_TO_BASKET');
$arParams['~MESS_NOT_AVAILABLE'] = $arParams['~MESS_NOT_AVAILABLE'] ?: Loc::getMessage('CT_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE');
$arParams['~MESS_SHOW_MAX_QUANTITY'] = $arParams['~MESS_SHOW_MAX_QUANTITY'] ?: Loc::getMessage('CT_BCS_CATALOG_SHOW_MAX_QUANTITY');
$arParams['~MESS_RELATIVE_QUANTITY_MANY'] = $arParams['~MESS_RELATIVE_QUANTITY_MANY'] ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY');
$arParams['~MESS_RELATIVE_QUANTITY_FEW'] = $arParams['~MESS_RELATIVE_QUANTITY_FEW'] ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW');
$generalParams = array(
'SHOW_DISCOUNT_PERCENT' => $arParams['SHOW_DISCOUNT_PERCENT'],
'PRODUCT_DISPLAY_MODE' => $arParams['PRODUCT_DISPLAY_MODE'],
'SHOW_MAX_QUANTITY' => $arParams['SHOW_MAX_QUANTITY'],
'RELATIVE_QUANTITY_FACTOR' => $arParams['RELATIVE_QUANTITY_FACTOR'],
'MESS_SHOW_MAX_QUANTITY' => $arParams['~MESS_SHOW_MAX_QUANTITY'],
'MESS_RELATIVE_QUANTITY_MANY' => $arParams['~MESS_RELATIVE_QUANTITY_MANY'],
'MESS_RELATIVE_QUANTITY_FEW' => $arParams['~MESS_RELATIVE_QUANTITY_FEW'],
'SHOW_OLD_PRICE' => $arParams['SHOW_OLD_PRICE'],
'USE_PRODUCT_QUANTITY' => $arParams['USE_PRODUCT_QUANTITY'],
'PRODUCT_QUANTITY_VARIABLE' => $arParams['PRODUCT_QUANTITY_VARIABLE'],
'ADD_TO_BASKET_ACTION' => $arParams['ADD_TO_BASKET_ACTION'],
'ADD_PROPERTIES_TO_BASKET' => $arParams['ADD_PROPERTIES_TO_BASKET'],
'PRODUCT_PROPS_VARIABLE' => $arParams['PRODUCT_PROPS_VARIABLE'],
'SHOW_CLOSE_POPUP' => $arParams['SHOW_CLOSE_POPUP'],
'DISPLAY_COMPARE' => $arParams['DISPLAY_COMPARE'],
'COMPARE_PATH' => $arParams['COMPARE_PATH'],
'COMPARE_NAME' => $arParams['COMPARE_NAME'],
'PRODUCT_SUBSCRIPTION' => $arParams['PRODUCT_SUBSCRIPTION'],
'PRODUCT_BLOCKS_ORDER' => $arParams['PRODUCT_BLOCKS_ORDER'],
'LABEL_POSITION_CLASS' => $labelPositionClass,
'DISCOUNT_POSITION_CLASS' => $discountPositionClass,
'SLIDER_INTERVAL' => $arParams['SLIDER_INTERVAL'],
'SLIDER_PROGRESS' => $arParams['SLIDER_PROGRESS'],
'~BASKET_URL' => $arParams['~BASKET_URL'],
'~ADD_URL_TEMPLATE' => $arResult['~ADD_URL_TEMPLATE'],
'~BUY_URL_TEMPLATE' => $arResult['~BUY_URL_TEMPLATE'],
'~COMPARE_URL_TEMPLATE' => $arResult['~COMPARE_URL_TEMPLATE'],
'~COMPARE_DELETE_URL_TEMPLATE' => $arResult['~COMPARE_DELETE_URL_TEMPLATE'],
'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
'USE_ENHANCED_ECOMMERCE' => $arParams['USE_ENHANCED_ECOMMERCE'],
'DATA_LAYER_NAME' => $arParams['DATA_LAYER_NAME'],
'BRAND_PROPERTY' => $arParams['BRAND_PROPERTY'],
'MESS_BTN_BUY' => $arParams['~MESS_BTN_BUY'],
'MESS_BTN_DETAIL' => $arParams['~MESS_BTN_DETAIL'],
'MESS_BTN_COMPARE' => $arParams['~MESS_BTN_COMPARE'],
'MESS_BTN_SUBSCRIBE' => $arParams['~MESS_BTN_SUBSCRIBE'],
'MESS_BTN_ADD_TO_BASKET' => $arParams['~MESS_BTN_ADD_TO_BASKET'],
'MESS_NOT_AVAILABLE' => $arParams['~MESS_NOT_AVAILABLE']
);
$obName = 'ob' . preg_replace('/[^a-zA-Z0-9_]/', 'x', $this->GetEditAreaId($navParams['NavNum']));
$containerName = 'container-' . $navParams['NavNum'];
if ( $showTopPager ) {
?>
<div data-pagination-num="<?= $navParams['NavNum'] ?>">
<!-- pagination-container -->
<?= $arResult['NAV_STRING'] ?>
<!-- pagination-container -->
</div>
<?
}
if ( $arParams['HIDE_SECTION_DESCRIPTION'] !== 'Y' ) {
?>
<div class="bx-section-desc bx-<?= $arParams['TEMPLATE_THEME'] ?>">
<p class="bx-section-desc-post"><?= $arResult['DESCRIPTION'] ?></p>
</div>
<?
}
?>
<div class="col-product col-sm-12" data-entity="<?= $containerName ?>">
<div class="row clearfix">
<?
if ( ! empty($arResult['ITEMS']) && ! empty($arResult['ITEM_ROWS']) ) {
$areaIds = array();
foreach ($arResult['ITEMS'] as $item) {
$uniqueId = $item['ID'] . '_' . md5($this->randString() . $component->getAction());
$areaIds[$item['ID']] = $this->GetEditAreaId($uniqueId);
$this->AddEditAction($uniqueId, $item['EDIT_LINK'], $elementEdit);
$this->AddDeleteAction($uniqueId, $item['DELETE_LINK'], $elementDelete, $elementDeleteParams);
}
?>
<!-- items-container -->
<?
foreach ($arResult['ITEM_ROWS'] as $rowData) {
$rowItems = array_splice($arResult['ITEMS'], 0, $rowData['COUNT']);
?>
<div class="row <?= $rowData['CLASS'] ?>" data-entity="items-row">
<?
switch ($rowData['VARIANT']) {
case 0:
?>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<div class="col-xs-12 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = reset($rowItems);
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
</div>
</div>
</div>
</div>
<?
break;
case 1:
?>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<?
foreach ($rowItems as $item) {
?>
<div class="col-xs-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
</div>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 2:
?>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<?
foreach ($rowItems as $item) {
?>
<div class="col-sm-4 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
</div>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 3:
?>
<?
foreach ($rowItems as $item) {
?>
<?php //echo var_dump($item); ?>
<div class="col-sm-6 col-md-4 col-lg-3">
<div class="gallery-filter__product gallery-product mh_item">
<?
$APPLICATION->IncludeComponent('bitrix:catalog.item', 'masshin_item_new', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
</div>
<?
}
?><?
break;
case 4:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = array_shift($rowItems);
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
unset($item);
?>
</div>
</div>
</div>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++) {
?>
<div class="col-xs-6">
<?
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$rowItems[$i]['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 5:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++) {
?>
<div class="col-xs-6">
<?
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$rowItems[$i]['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
<?
}
?>
</div>
</div>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = end($rowItems);
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
unset($item);
?>
</div>
</div>
</div>
<?
break;
case 6:
?>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<?
foreach ($rowItems as $item) {
?>
<div class="col-xs-6 col-sm-4 col-md-2">
<?
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 7:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = array_shift($rowItems);
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
unset($item);
?>
</div>
</div>
</div>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++) {
?>
<div class="col-xs-6 col-md-4">
<?
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$rowItems[$i]['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 8:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++) {
?>
<div class="col-xs-6 col-md-4">
<?
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$rowItems[$i]['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
<?
}
?>
</div>
</div>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = end($rowItems);
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
unset($item);
?>
</div>
</div>
</div>
<?
break;
case 9:
?>
<div class="col-xs-12">
<div class="row">
<?
foreach ($rowItems as $item) {
?>
<div class="col-xs-12 product-item-line-card">
<?
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N'
),
'PARAMS' => $generalParams + array('SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']])
), $component, array('HIDE_ICONS' => 'Y'));
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
}
?>
</div>
<?
}
unset($generalParams, $rowItems);
?>
<!-- items-container -->
<?
} else {
// load css for bigData/deferred load
$APPLICATION->IncludeComponent('bitrix:catalog.item', '', array(), $component, array('HIDE_ICONS' => 'Y'));
}
?>
</div>
</div>
<?
if ( $showLazyLoad ) {
?>
<div class="row bx-<?= $arParams['TEMPLATE_THEME'] ?>">
<div class="btn btn-default btn-lg center-block" style="margin: 15px;"
data-use="show-more-<?= $navParams['NavNum'] ?>">
<?= $arParams['MESS_BTN_LAZY_LOAD'] ?>
</div>
</div>
<?
}
if ( $showBottomPager ) {
?>
<div data-pagination-num="<?= $navParams['NavNum'] ?>">
<!-- pagination-container -->
<?= $arResult['NAV_STRING'] ?>
<!-- pagination-container -->
</div>
<?
}
$signer = new \Bitrix\Main\Security\Sign\Signer;
$signedTemplate = $signer->sign($templateName, 'catalog.section');
$signedParams = $signer->sign(base64_encode(serialize($arResult['ORIGINAL_PARAMETERS'])), 'catalog.section');
?>
<script>
BX.message({
BTN_MESSAGE_BASKET_REDIRECT: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_BASKET_REDIRECT')?>',
BASKET_URL: '<?=$arParams['BASKET_URL']?>',
ADD_TO_BASKET_OK: '<?=GetMessageJS('ADD_TO_BASKET_OK')?>',
TITLE_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_TITLE_ERROR')?>',
TITLE_BASKET_PROPS: '<?=GetMessageJS('CT_BCS_CATALOG_TITLE_BASKET_PROPS')?>',
TITLE_SUCCESSFUL: '<?=GetMessageJS('ADD_TO_BASKET_OK')?>',
BASKET_UNKNOWN_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_BASKET_UNKNOWN_ERROR')?>',
BTN_MESSAGE_SEND_PROPS: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_SEND_PROPS')?>',
BTN_MESSAGE_CLOSE: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_CLOSE')?>',
BTN_MESSAGE_CLOSE_POPUP: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_CLOSE_POPUP')?>',
COMPARE_MESSAGE_OK: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_OK')?>',
COMPARE_UNKNOWN_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_UNKNOWN_ERROR')?>',
COMPARE_TITLE: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_TITLE')?>',
PRICE_TOTAL_PREFIX: '<?=GetMessageJS('CT_BCS_CATALOG_PRICE_TOTAL_PREFIX')?>',
RELATIVE_QUANTITY_MANY: '<?=CUtil::JSEscape($arParams['MESS_RELATIVE_QUANTITY_MANY'])?>',
RELATIVE_QUANTITY_FEW: '<?=CUtil::JSEscape($arParams['MESS_RELATIVE_QUANTITY_FEW'])?>',
BTN_MESSAGE_COMPARE_REDIRECT: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_COMPARE_REDIRECT')?>',
BTN_MESSAGE_LAZY_LOAD: '<?=$arParams['MESS_BTN_LAZY_LOAD']?>',
BTN_MESSAGE_LAZY_LOAD_WAITER: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_LAZY_LOAD_WAITER')?>',
SITE_ID: '<?=SITE_ID?>'
});
var <?=$obName?> =
new JCCatalogSectionComponent({
siteId: '<?=CUtil::JSEscape(SITE_ID)?>',
componentPath: '<?=CUtil::JSEscape($componentPath)?>',
navParams: <?=CUtil::PhpToJSObject($navParams)?>,
deferredLoad: false, // enable it for deferred load
initiallyShowHeader: '<?=! empty($arResult['ITEM_ROWS'])?>',
bigData: <?=CUtil::PhpToJSObject($arResult['BIG_DATA'])?>,
lazyLoad: !!'<?=$showLazyLoad?>',
loadOnScroll: !!'<?=($arParams['LOAD_ON_SCROLL'] === 'Y')?>',
template: '<?=CUtil::JSEscape($signedTemplate)?>',
ajaxId: '<?=CUtil::JSEscape($arParams['AJAX_ID'])?>',
parameters: '<?=CUtil::JSEscape($signedParams)?>',
container: '<?=$containerName?>'
});
</script>
UPD2
以下是 template.php 中负责显示项目图像的位置 (bitrix/cataog.item/mashine_item/card)
$idFirstImg = $item['PROPERTIES']['images']['VALUE']['0'];
$URL = CFile::GetPath($idFirstImg);
?>
<div class="gallery-product__boximg">
<a href="<?= $URL ?>">
<img src="<?= $URL ?>" alt="" class="gallery-product__img">
</a>
</div>
前面是通过元素代码定义的,如下所示:
img src= (unknown) alt="" class="gallery-product__img"
sudo mkdir /var/www/site.local/publick_html
为站点创建一个文件夹
sudo vi /var/www/site.local/publick_html/index.php
创建一个文件
通过控制台,这两个命令开始“故障” - https://yadi.sk/i/L4-Cg-jizjbmJ
而且它们本身都归于文件名 .swp ,我真的不知道如何使用这样的交换文件,我也不需要它。如何解决?
在指定这些命令后,控制台也会挂起
服务器是干净的 ubuntu 16.04 + LAMP
=================================================== ==========
Edit1* 我按照手册安装了 vim,但没有帮助,事实是当你输入任何 vim 或 nano 命令时,控制台表现得很奇怪,之后什么也不能输入。我正在使用 Bitvise ssh 客户端,但这似乎不是问题所在。无奈之下,我安装了桌面 gvim,但据我了解,它没有内置控制台?)
有一个代码
<?php
require_once 'app_config.php';
require_once 'database_connection.php';
$first_name = trim($_REQUEST['first_name']);
$last_name = trim($_REQUEST['last_name']);
$email = trim($_REQUEST['email']);
$bio = trim($_REQUEST['bio']);
$vkontakte_url = str_replace("vk.com", "vkontakte.com", trim($_REQUEST['vkontakte_url']));
$position = strpos($vkontakte_url, "vk.com");
//Массив ошибок и переменные, связанные с изображением
$upload_dir = HOST_WWW_ROOT . "uploads/profile_pics/";
$image_fieldname = "user_pic";
//Потенциальные ошибки при отправке файлов
$php_errors = array(1=>'Превышен макс.размер файла указаный в php.ini',
2=>'Превышен макс. размер файла указанный в форме html',
3=>'Была отправлена только часть файла',
4=>'Файл отправки не был выбран');
if ($position === false) {
$vkontakte_url = "http://www.vk.com/" . $vkontakte_url;
}
$twitter_handle = trim($_REQUEST['twitter_handle']);
$twitter_url = "http://www.twitter.com/";
$position = strpos($twitter_handle, "@");
if ($position === false) {
$twitter_url = $twitter_url . $twitter_handle;
} else {
$twitter_url = $twitter_url . substr($twitter_handle, $position + 1);
}
//Проверка отсутствия ошибки при загрузке изображения
($_FILES[$image_fieldname]['error'] == 0) or handle_error("сервер не может получить выбранное вами изображене" , $php_errors[$_FILES[$image_fieldname]['error']]);
//Является ли файл нормальным результатом отправки?
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name']) or handle_error("Вы попытались обмануть, за вами уже выехали" , "Запрос на отправку: файл назывался 1" . "'{$_FILES[$image_fieldname]['tmp_name']}'");
//Дейтсвительно ли это изображение?
@getimagesize($_FILES[$image_fieldname]['tmp_name']) or handle_error("Вы выбрали файл для фото, который не является изображением", "{$_FILES[$image_fieldname]['tmp_name']}" . "не является файлом картинкой");
//Уникальное название файла
$now = time();
while (file_exists($upload_filename = $upload_dir . $now . $_FILES[$image_fieldname]['name'])) {
$now++;
}
//Перемещаем файл на постоянное место на сервере
//@move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename) or handle_error("Возникла проблема сохранения вашего изображения в его постоянном месте," ,"ошибка свяанная с правами доступа при перемещении файла в" . "{$upload_filename}");
////через mysqli
//$insert_sql = "INSERT INTO users (first_name, last_name, email, bio, vkontakte_url, twitter_handle) " . "VALUES ('{$first_name}', '{$last_name}', '{$email}', '{$bio}' " .
// "'{$vkontakte_url}', '{$twitter_handle}');";
//
//Добавить пользователя в базу данных
//mysqli_query($mysql,$insert_sql) or die(mysqli_error($mysql));
//Вставка данных через PDO
$STH = $DBH->prepare("INSERT INTO users ( first_name, last_name,email, bio, vkontakte_url, twitter_handle) values ( '{$first_name}', '{$last_name}', '{$email}', '{$bio}', '{$vkontakte_url}', '{$twitter_handle}' )");
$STH->execute();
//Вставка изображения в таблицу images
$image = $_FILES[$image_fieldname];
$image_filename = $image['name'];
$image_info = getimagesize($image['tmp_name']);
$image_mime_type = $image_info['mime'];
$image_size = $image['size'];
$image_data = file_get_contents($image['tmp_name']);
$STH = $DBH->prepare("INSERT INTO images ( filename, mime_type, file_size, image_data) values ( '{DBH->quote($image_filename)}', '{DBH->quote($image_mime_type)}', '{DBH->quote($image_size)}', '{DBH->quote($image_data)}')");
$STH->execute();
//Отправляем пользователя на свой профиль
header("Location: show_user.php?user_id=" . $DBH->lastInsertId());
我收到这个错误
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters' in /home/c/ch33404/testsite/public_html/test/scripts/create_user.php:80 Stack trace: #0 /home/c/ch33404/testsite/public_html/test/scripts/create_user.php(80): PDOStatement->execute() #1 {main} thrown in /home/c/ch33404/testsite/public_html/test/scripts/create_user.php on line 80
我试过像这样不加引号来写(第 80 行)
$STH = $DBH->prepare("INSERT INTO images ( filename, mime_type, file_size, image_data) values ( '{DBH->quote($image_filename)}', '{$image_mime_type}', '{$image_size}', '{$image_data}')");
$STH->execute();
但是错误是一模一样的,告诉我哪里错了?
下午好,弄清楚数据库,我决定使用它更合乎逻辑pdo
,我想将我的简单授权表单从转移mysqli
到pdo
mysqli
联系 :
require 'app_config.php';
//$mysql=mysqli_connect(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD) or die("<p>Ошибка к подключению БД :" .
// mysqli_error($mysql) . "</p>");
//mysqli_select_db($mysql, DATABASE_NAME) or die("<p>Ошибка при выборе БД</p>" . mysqli_error($mysql) );
//Через pdo DATABASE HANDLE
//$DBH = new PDO("mysql:host=DATABASE_HOST;dbname=DATABASE_USERNAME", DATABASE_NAME,DATABASE_PASSWORD);
$DBH = new PDO('mysql:dbname=ch33404_testdb;host=localhost', 'DATABASE_USERNAME', 'DATABASE_PASSWORD');
$DBH - > setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
这就是它给出更多错误的方式,我不明白为什么:
//$DBH = new PDO("mysql:host=DATABASE_HOST;dbname=DATABASE_USERNAME", DATABASE_NAME,DATABASE_PASSWORD);
本质:有一个带有字段的简单 stml 表单,create_user.php 脚本应该可以工作并将用户写入数据库,现在单击“登录”后会发生这样的错误
致命错误:在 /home/c/ch33404/testsite/public_html/test/ 中未捕获异常“PDOException”,消息为“SQLSTATE[HY000] [1045] 拒绝用户'DATABASE_USERNAME'@'localhost'(使用密码:YES)'的访问scripts/database_connection.php:15 堆栈跟踪:#0 /home/c/ch33404/testsite/public_html/test/scripts/database_connection.php(15): PDO->__construct('mysql:dbname=ch...', 'DATABASE_USERNA...', 'DATABASE_PASSWO...') #1 /home/c/ch33404/testsite/public_html/test/scripts/create_user.php(3): require('/home/c/ch33404... ') #2 {main} 在第 15 行的 /home/c/ch33404/testsite/public_html/test/scripts/database_connection.php 中抛出
这是 create_user.php 脚本本身:
<?php require'database_connection.php';
$first_name=trim($_REQUEST['first_name']);
$last_name=trim($_REQUEST['last_name']);
$email=trim($_REQUEST['email']);
$bio=trim($_REQUEST['bio']);
$vkontakte_url=str_replace("vk.com",
"vkontakte.com",
trim($_REQUEST['vkontakte_url']));
$position=strpos($vkontakte_url,
"vk.com");
if ($position===false) {
$vkontakte_url="http://www.vk.com/" . $vkontakte_url;
}
$twitter_handle=trim($_REQUEST['twitter_handle']);
$twitter_url="http://www.twitter.com/";
$position=strpos($twitter_handle,
"@");
if ($position===false) {
$twitter_url=$twitter_url . $twitter_handle;
}
else {
$twitter_url=$twitter_url . substr($twitter_handle, $position + 1);
}
////через mysqli
//$insert_sql = "INSERT INTO users (first_name, last_name, email, bio, vkontakte_url, twitter_handle) " . "VALUES ('{$first_name}', '{$last_name}', '{$email}', '{$bio}' " .
// "'{$vkontakte_url}', '{$twitter_handle}');";
//
//Добавить пользователя в базу данных
//mysqli_query($mysql,$insert_sql) or die(mysqli_error($mysql));
//Вставка данных через PDO
$STH=$DBH->prepare("INSERT INTO users ( first_name, last_name,email, bio, vkontakte_url, twitter_handle) values ( '{$first_name}', '{$last_name}', '{$email}', '{$bio}', '{$vkontakte_url}', '{$twitter_handle}' )");
$STH->execute();
//Отправляем пользователя на свой профиль
//header("Location: show_user.php?user_id=" . mysqli_insert_id($mysql));
第 10 行 connection.php 是:
$DBH = new PDO('mysql:dbname=ch33404_testdb;host=localhost', 'DATABASE_USERNAME', 'DATABASE_PASSWORD');
我写在mysql桌面控制台
mysqldump -uadmin -p9047scw mysql > mysqldump.sql;
产生:
ERROR 1064 (42000): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“mysqldump -uadmin -p9047scw 用户> mysqldump.sql”附近使用的正确语法
一切似乎都符合语法
mysqldump -u [username] -p [password] [database] > [dump_name.sql]
我不明白怎么了?)
有2个json
{
"orderID": 773,
"shopperName": "Трегубенко Егор",
"shopperEmail": "sinecura92@mail.ru",
"contents": [
{
"productID": 34,
"productName": "Холодильник, indesit 423jd2",
"quantity": 1
},
{
"productID": 56,
"productName": "Наушники, Philips",
"quantity": 3
}
],
"orderCompleted": true
}
因此**第二**
{
"orderID": 773,
"shopperName": "Трегубенко Егор",
"shopperEmail": "sinecura92@mail.ru",
"contents": [
{
"productID": 31,
"productName": "Стиральная машина bosch",
"quantity": 2
},
{
"productID": 56,
"productName": "Наушники, Philips",
"quantity": 3
}
],
"orderCompleted": true
}
问:如何只显示差异?尝试使用 array_dif 但我得到一个空数组
ps 表示 php