2013-06-01 4 views
0

У меня есть более старый сайт с использованием phorm. Когда форма отправлена, я получаю эту ошибку:strlen() ожидает, что параметр 1 является строкой, массив задан

Предупреждение: STRLEN() ожидает параметр 1, чтобы быть строка, массив приведен в /home/user/public_html/form/phorm.php на линии 2015

Я знаю, это из-за обновления до php 5.3, есть ли простой способ исправить эту строку кода, чтобы мои формы снова работали?

if (strlen($PHORM_ALERTTO) && !strlen($PHORM_TO) && !$PHORM_INFONLY && !$ph_GotData) { 
    $PHORM_TO = $PHORM_ALERTTO; //THIS IS LINE 2015 





Read the mail template file(s) and mail it (them) to the user */ 
    $ph_section = "user template"; 
    if (strlen($PHORM_ALERTTO) && !strlen($PHORM_TO) && !$PHORM_INFONLY && !$ph_GotData) { 
    $PHORM_TO = $PHORM_ALERTTO; //THIS IS LINE 2015 
    settype($PHORM_TO, "array"); 
    } 
    if (isset($PHORM_TMPL) && isset($PHORM_TO) && !$ph_Abort) { 
    if ($ph_debug2) echo "<B>JS:</B> Mail Template(s)<BR>"; 

    if (count($PHORM_TMPL) > $ph_MaxTMPL) $ph_Alerts['120'] = ph_Message("A120"); 

    list(,$fPHORM_TO)  = each($PHORM_TO); 
    list(,$fPHORM_SUBJECT) = each($PHORM_SUBJECT); 

    while ($ph_MaxTMPL-- && list($ph_key, $lPHORM_TMPL) = each($PHORM_TMPL)) { 
     if ($lPHORM_TMPL == ph_GENERIC) $lPHORM_TMPL = "$ph_root/files/generic.txt"; 
     else       $lPHORM_TMPL = "$ph_tpd/$lPHORM_TMPL"; 

     $ph_Message = ""; 
     $ph_Headers = ""; 
     $ph_NonHeader = ""; 

     $lPHORM_TO  = ""; 
     $lPHORM_FROM = ""; 
     $lPHORM_SUBJECT = ""; 
     $lPHORM_HEADERS = ""; 

     $ph_TemplateHeaders = false; 
     if (ereg("(.+) +\+h$", $lPHORM_TMPL, $ph_regs)) { 
     $lPHORM_TMPL = trim($ph_regs[1]); 
     $ph_TemplateHeaders = true; 
     } 

     if ($ph_debug8) echo "Mail Template <B>$lPHORM_TMPL</B><BR>"; 

     if (!$ph_Template = @implode("", file($lPHORM_TMPL))) { 
     $ph_Alerts['005'] = ph_Message("A005"); 
     if ($php_errormsg) $ph_Alerts['005P'] = "%%%: $php_errormsg"; 
     continue; 
     } 
+0

Это потому, что вы можете использовать его только для подсчета строк, если вы хотите считать массив использованием 'count()' – samayo

+0

все сказано в предупреждении ... – user544262772

+0

любой совет, что мне нужно изменить в этой строке кода? –

ответ

3

Это происходит потому, что ваш используете strlen() считать массив в то время как предполагается использовать, когда нужно считать строки. Ваша ошибка понятна.

Если вам нужно подсчитать массив или более, используйте только count или sizeof функции.

+0

Ошибка @PeterEastwood означает, что вы используете функцию 'strlen' для массива, так что $ PHORM_ALERTTO и/или $ PHORM_TO являются массивами, попробуйте изменить на' if (count ($ PHORM_ALERTTO) &&! Count ($ PHORM_TO) &&! $ PHORM_INFONLY &&! $ Ph_GotData) {$ PHORM_TO = $ PHORM_ALERTTO; ' – Fabio

+0

Большое спасибо @Fabio, который работает –

+0

@PeterEastwood, что вы можете! – Fabio