帮助我理解。
插头很久没有更新了_http://market.osclass.org/plugins/attributes/real-state-attributes_6
在过渡到 PHP 5.4 时出现错误。
帮助,处理错误:
警告:C:''OpenServer''domains''oc-classrus.loc''oc-content''plugins''realestate_attributes''conf.php 中的非法字符串偏移量"pk_i_id"在第 109 行
警告:C:''OpenServer''domains''oc-classrus.loc''oc-content''plugins''realestate_attributes''conf.php 第 109 行中的非法字符串偏移量"s_name"
警告:C:''OpenServer''domains''oc-classrus.loc''oc-content''plugins''realestate_attributes''conf.php 中的非法字符串偏移量"pk_i_id"在第 109 行
警告:C:''OpenServer''domains''oc-classrus.loc''oc-content''plugins''realestate_attributes''conf.php 第 109 行中的非法字符串偏移量"s_name"
109路
$data[$locale['pk_c_code']] = array('pk_i_id' => $c['pk_i_id'], 's_name' => $c['s_name']);
文件
<?php if (!defined('OC_ADMIN') || OC_ADMIN!==true) exit('Access is not allowed.');
/*
* OSCLass – software for creating and publishing online classified
* advertising platforms
*
* Copyright (C) 2010 OSCLASS
*
* This program is free software: you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
?>
<?php
if(Params::getParam('plugin_action')!='') {
if(Params::getParam('plugin_action')=="type_delete") {
if(Params::getParam('id')!="") {
ModelRealEstate::newInstance()->deletePropertyType( Params::getParam('id') ) ;
}
} else if(Params::getParam('plugin_action')=="type_add") {
$dataItem = array();
$request = Params::getParamsAsArray();
foreach ($request as $k => $v) {
if (preg_match('|(.+?)#(.+)|', $k, $m)) {
$dataItem[$m[1]][$m[2]] = $v;
}
}
// insert locales
$lastId = ModelRealEstate::newInstance()->getLastPropertyTypeId();
$lastId = $lastId['pk_i_id'] + 1 ;
foreach ($dataItem as $k => $_data) {
ModelRealEstate::newInstance()->insertPropertyType($lastId, $k, $_data['property_type']);
}
} else if(Params::getParam('plugin_action')=="type_edit") {
$property_type = Params::getParam('property_type');
foreach($property_type as $k => $v) {
foreach($v as $kj => $vj) {
ModelRealEstate::newInstance()->replacePropertyType($k, $kj, $vj);
}
}
}
}
?>
<div id="settings_form" style="border: 1px solid #ccc; background: #eee; ">
<div style="padding: 20px;">
<div style="float: left; width: 50%;">
<fieldset>
<legend><?php _e('Property types', 'realestate_attributes'); ?></legend>
<form name="propertys_form" id="propertys_form" action="<?php echo osc_admin_base_url(true);?>" method="GET" enctype="multipart/form-data" >
<input type="hidden" name="page" value="plugins" />
<input type="hidden" name="action" value="renderplugin" />
<input type="hidden" name="file" value="realestate_attributes/conf.php" />
<input type="hidden" name="section" value="types" />
<input type="hidden" name="plugin_action" value="type_edit" />
<div class="tabber">
<?php $locales = osc_get_locales();
$property_type = ModelRealEstate::newInstance()->getPropertyTypes(false) ;
$data = array();
foreach ($property_type as $c) {
$data[$c['fk_c_locale_code']][] = array('pk_i_id' => $c['pk_i_id'], 's_name' => $c['s_name']);
}
$default = current($data);
if(is_array($default)) {
foreach($default as $d) {
$data['new'][] = array('pk_i_id' => $d['pk_i_id'], 's_name' => '');
}}
?>
<?php foreach($locales as $locale) {?>
<div class="tabbertab">
<h2><?php echo $locale['s_name']; ?></h2>
<ul>
<?php
if(count($data)>0) {
foreach(isset($data[$locale['pk_c_code']])?$data[$locale['pk_c_code']]:$data['new'] as $property_type) { ?>
<li><input name="property_type[<?php echo $property_type['pk_i_id'];?>][<?php echo $locale['pk_c_code'];?>]" id="<?php echo $property_type['pk_i_id'];?>" type="text" value="<?php echo $property_type['s_name'];?>" /> <a href="<?php echo osc_admin_base_url(true);?>?page=plugins&action=renderplugin&file=realestate_attributes/conf.php?plugin_action=type_delete&id=<?php echo $property_type['pk_i_id'];?>" ><button><?php _e('Delete', 'realestate_attributes'); ?></button></a> </li>
<?php };
}; ?>
</ul>
</div>
<?php }; ?>
<button type="submit"><?php _e('Edit', 'realestate_attributes'); ?></button>
</form>
</div>
</fieldset>
</div>
<div style="float: left; width: 50%;">
<fieldset>
<legend><?php _e('Add new property types', 'realestate_attributes'); ?></legend>
<form name="propertys_form" id="propertys_form" action="<?php echo osc_admin_base_url(true); ?>" method="GET" enctype="multipart/form-data" >
<input type="hidden" name="page" value="plugins" />
<input type="hidden" name="action" value="renderplugin" />
<input type="hidden" name="file" value="realestate_attributes/conf.php" />
<input type="hidden" name="plugin_action" value="type_add" />
<div class="tabber">
<?php $locales = osc_get_locales();
$data = array();
foreach ($property_type as $c) {
$data[$locale['pk_c_code']] = array('pk_i_id' => $c['pk_i_id'], 's_name' => $c['s_name']);
}
?>
<?php foreach($locales as $locale) {?>
<div class="tabbertab">
<h2><?php echo $locale['s_name']; ?></h2>
<input name="<?php echo $locale['pk_c_code'];?>#property_type" id="property_type" type="text" value="" />
</div>
<?php }; ?>
</div>
<button type="submit" ><?php _e('Add new', 'realestate_attributes'); ?></button>
</form>
</fieldset>
</div>
<div style="clear: both;"></div>
</div>
</div>
<div id="settings_form" style="border: 1px solid #ccc; background: #eee; ">
<div style="padding: 20px;">
<div style="float: left; width: 100%;">
<fieldset style="border: 1px solid #ff0000;">
<legend><?php _e('Warning', 'realestate_attributes'); ?></legend>
<p>
<?php _e('Deleting property types may end in errors. Some of those property types could be attached to some actual items', 'realestate_attributes') ; ?>.
</p>
</fieldset>
</div>
<div style="clear: both;"></div>
</div>
</div>
你$c['pk_i_id']
的地方显然是$c
将是具有名为 pk_i_id
的索引的哈希表(数组)。然而,PHP 告诉你它实际上是一个字符串,并认为你正在尝试做$c[7]
从字符串中获取一个特定的字符——当然pk_i_id
不是一个数字。
那么什么是$c
?做一个var_dump($c);
,看看里面有什么。它是错误消息而不是属性吗?有什么变化?
可能是你在这里得到的对象不再好了:
$property_type = ModelRealEstate::newInstance()->getPropertyTypes(false) ;
检查整个数组的外观(使用另一个var_dump()
)
您发布的代码没有明显的问题,所以我不能建议任何特定的事情进行更改,但无论问题是什么,都在于这个方向的某个地方。