Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 13. August 2011 21:29

AL-d82
Server-Pate
Ort: Heilbronn / Göppingen
Registriert: 18. Dezember 2010
Beiträge: 149
Webseite

[gelöst] Problem mit Modul Vehicle Listing mit PHP Version 5.3.6

Hi ich benutzte Vehicle Listing,

http://dev.cmsmadesimple.org/projects/auto

Bei der Suche nach Hersteller bekomme ich nun ne Fehlermeldung  mit PHP Version 5.3.6
http://www.damjanovic-omnibushandel.de/cms1/

Warning: trim() expects parameter 1 to be string, array given in /www/htdocs/xxx/cms-c/modules/autos/autos.module.php on line 1503

All-Inkl hat ein PHP Update durchgeführt von PHP Version 5.2.12 auf PHP Version 5.3.6 upgedatet.
Wenn ich auf PHP Version 5.2.12 kommt der Fehler nicht..
ist die Syntax für PHP 5.3.6 so anders?

Falls einer auf die Schnelle den Fehler sieht würde ich mich über ein Lösungsvorschlag freuen  monkey



das ist die Zeile
    if(substr($key,0,6) == "field_" && trim($value) != ""){




function getWhereFromParams($params, $htmlencoded=false){
        // used for query creation and frontend advanced search action
        // transforms parameters into $where - an array of criteria:
        // $where[] = array($fieldname, $searchvalue, $comparison_type)
        $db =& $this->GetDb();
        $where = array();
        foreach($params as $key=>$value){
            if(substr($key,0,6) == "field_" && trim($value) != ""){
                $key = substr($key,6);
                if(is_array($value) && count($value)==1)    $value = $value[0];
                $compare = isset($params["compare_".$key])?$params["compare_".$key]:0;
                if($value == "__date_field"){
                    if($compare != "NA"){
                        // The code is such that removing any part of the time input from the form will result in using the default value
                        $timeinputs = array("Hour"=>"H","Minute"=>"i","Second"=>"s","Month"=>"n","Day"=>"j","Year"=>"Y");
                        $parts = array();
                        foreach($timeinputs as $inputname=>$datepart){   
                            $parts[] = (isset($params["date_".$key."_".$inputname]))?$params["date_".$key."_".$inputname]:date($datepart);
                        }
                        $value = mktime($parts[0],$parts[1],$parts[2],$parts[3],$parts[4],$parts[5]);
                        $value = str_replace("\'","",$db->DBTimeStamp($value));
                       
                        if($compare == 5){
                            $parts = array();
                            foreach($timeinputs as $inputname=>$datepart){   
                                $parts[] = (isset($params["date_".$key."_part2_".$inputname]))?$params["date_".$key."_part2_".$inputname]:date($datepart);
                            }
                            $value2 = mktime($parts[0],$parts[1],$parts[2],$parts[3],$parts[4],$parts[5]);
                            $value2 = str_replace("\'","",$db->DBTimeStamp($value2));
                            $where[] = array($key, array($value,$value2), $compare);
                        }else{   
                            $where[] = array($key, $value, $compare);
                        }
                    }
                }else{
                    if(is_array($value)){
                        foreach($value as $onevalue)    $where[] = array($key, $onevalue, 1);
                    }elseif($compare == 1){
                        $keywords = $this->parsekeywords($value);
                        foreach($keywords as $value){
                            if($htmlencoded)    $value = html_entity_decode($value);
                            $value = addslashes($value);                           
                            $where[] = array($key, $value, $compare);
                        }
                    }else{
                        if($htmlencoded)    $value = html_entity_decode($value);
                        $value = addslashes($value);
                        $where[] = array($key, $value, $compare);
                    }
                }               
            }
        }       
        return $where;
    }

Beitrag geändert von AL-d82 (26. Mai 2012 05:30)

Offline

#2 13. August 2011 21:40

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [gelöst] Problem mit Modul Vehicle Listing mit PHP Version 5.3.6

Die einfachste Möglichkeit wäre, bei der von Dir rot markierten Zeile zusätzlich noch abzufragen, ob $value ein Array ist:

...
            if(!is_array($value) && substr($key,0,6) == "field_" && trim($value) != ""){
...

Verstehe aber nicht, warum dort ein Array übergeben wird. Wie genau funktioniert denn die Suche? Ist das eine Art Such-Formular? Welche Input-Felder gibt es denn da im HTML Quelltext? Und wo wird die Funktion getWhereFromParams() aufgerufen?


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 13. August 2011 21:41

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [gelöst] Problem mit Modul Vehicle Listing mit PHP Version 5.3.6

AL-d82 schrieb:

All-Inkl hat ein PHP Update durchgeführt von PHP Version 5.2.12 auf PHP Version 5.3.6 upgedatet.

Hmm, seltsam ... bei meinen all-inkl Accounts kann ich die PHP-Version auswählen. Evtl. ist da auch bei dir ein Downgrade möglich ...

Offline

#4 13. August 2011 21:54

AL-d82
Server-Pate
Ort: Heilbronn / Göppingen
Registriert: 18. Dezember 2010
Beiträge: 149
Webseite

Re: [gelöst] Problem mit Modul Vehicle Listing mit PHP Version 5.3.6

Also das Modul hat ne eigene Suchfunktion

Das ist nur bei der Suche nach Hersteller und Ausstattung -->
Also bei den 2 Sachen wo man mehrere Sachen auswählen kann-

search.jpg
<tr><td valign="top">{$make_label} <div class="sklein">Mehrfachauswahl die STRG-Taste gedr&uuml;ckt halten</div></td><td>{$make_input}</td></tr>
und
<tr><td valign="top">{$features_label}<div class="sklein">Mehrfachauswahl die STRG-Taste gedr&uuml;ckt halten</div></td><td>{$features_input}</td></tr>

[== search-template ==]
<table>
<tr><td class="s1" valign="top">{$year_label} </td><td>{$year_input} </td></tr>
<tr><td valign="top">{$make_label} <div class="sklein">Mehrfachauswahl die STRG-Taste gedr&uuml;ckt halten</div></td><td>{$make_input}</td></tr>
<tr><td valign="top">{$model_label}</td><td>{$model_input}</td></tr>
<tr><td valign="top">{$milage_label}</td><td>{$milage_input}</td></tr>
<!-- <tr><td>{$vehiclecondition_label}</td><td>{$vehiclecondition_input}</td></tr>-->
<!-- <tr><td>{$color_label}</td><td>{$color_input}</td></tr>-->
<tr><td valign="top">{$price_label}</td><td>{$price_input}</td></tr>
<tr><td valign="top">{$engine_label}</td><td>{$engine_input}</td></tr>
<tr><td valign="top">{$features_label}<div class="sklein">Mehrfachauswahl die STRG-Taste gedr&uuml;ckt halten</div></td><td>{$features_input}</td></tr>
<!-- <tr><td>{$description_label}</td><td>{$description_input}</td></tr>-->
<tr><td>Kategorie</td><td>{$parent_input}</td></tr>
<tr><td>{$name_label}</td><td>{$name_input}</td></tr>
<!-- <tr><td>{$date_modified_label}</td><td>{$date_modified_input}</td></tr>-->
</table>
<p>{$submit}</p>
[== action.search.php ==]


<?php
if(!isset($gCms)) exit;

$levelarray = $this->get_levelarray();
$finallevel = "vehicle";

$searchmode = (isset($params["searchmode"]) && in_array($params["searchmode"], array("simple","advanced")))?$params["searchmode"]:"advanced";

if(isset($params["submitsearch"])){
    // #####################################################################################
    // # SEARCH RESULTS
    $inline = (isset($params["inline"]) && $params["inline"])?true:false;
    $linkreturnid = (isset($params["detailpage"]))?$this->get_pageid($params["detailpage"]):false;
    if(!$linkreturnid)    $linkreturnid = $returnid;
    $what = $params["what"];
    $limit = isset($params["limit"])?$params["limit"]:0;
    if(isset($params["nbperpage"]) && $params["nbperpage"] > 0){
        $nbperpage = (int) $params["nbperpage"];
        $limit = (((isset($params["pageindex"])?$params["pageindex"]:1)-1) * $nbperpage).",".$nbperpage;
    }else{
        $nbperpage = false;
    }
    
    $emptytemplate = $this->GetPreference("emptytemplate","**");
    
    // we prepare the "do another search" link, keeping the search parameters
    $newparams = array("what"=>$what, "searchmode"=>$searchmode);
    if(isset($params["listtemplate"]))    $newparams["listtemplate"] = $params["listtemplate"];
    if(isset($params["limit"]))            $newparams["limit"] = $params["limit"];
    if(isset($params["inline"]))        $newparams["inline"] = $params["inline"];
    if(isset($params["orderby"]))        $newparams["orderby"] = $params["orderby"];
    if(isset($params["nbperpage"]))        $newparams["nbperpage"] = $params["nbperpage"];
    if(isset($params["detailpage"]))    $newparams["detailpage"] = $params["detailpage"];
    $backlink = $this->CreateLink($id, "search", $returnid, $this->Lang("searchagain"), $newparams, "", false, $inline, "", false, false);    
    $this->smarty->assign("backlink",$backlink);
    $this->smarty->assign("breadcrumbs",false);
    $this->smarty->assign("parentobj",false);
    
    $multiplelistfields = array("vehicle_features");
    
    if($searchmode == "advanced"){
        // ADVANCED SEARCH
        
        $db = $this->GetDb();
        
        // we parse the keywords
        $where = $this->getWhereFromParams($params, true);
        list($whereclause, $wherevalues) = $this->buildWhere($where, $what);
        
        $getfunction = "get_level_".$what;
        // we do the query
        $itemlist = $this->$getfunction(array(), false, "", "", isset($params["orderby"])?$params["orderby"]:0, $limit, $whereclause, $wherevalues);
        $this->smarty->assign("itemcount",count($itemlist));
        
        if(count($itemlist) > 0){
        
            $total = $nbperpage?$this->countsomething($what,"id",array(),$whereclause, $wherevalues):false;
            $this->paginate($what,$total,$id,$returnid,$params,"search");
            
            // we must build a detail link for each result element
            $newlist = array();
            foreach($itemlist as $item){
                $item = $this->addfrontendurls($item,$params,$id,$linkreturnid);
                $item->is_selected = false;
                array_push($newlist, $item);
            }

            $this->smarty->assign("itemlist",$newlist);
            $this->smarty->assign("leveltitle",$this->Lang($what."_plural"));
            
        }else{
            $this->paginate($what,0,$id,$returnid,$params,"search");
            $this->smarty->assign("itemlist",$newlist);
            $this->smarty->assign("error_msg",$this->Lang("error_noitemfound"));
        }
        
        // we retrieve the display template
        if(count($itemlist) == 0 && $emptytemplate != "**"){
            echo $this->ProcessTemplateFromDatabase($emptytemplate);
        }else{
            if(isset($params["listtemplate"]))        $template = $this->GetTemplate($params["listtemplate"], $this->GetName());
            if(!isset($template) || !$template){
                $templatename = $this->GetPreference("searchresultstemplate","**");
                if($templatename == "**")    $templatename = $this->GetPreference("listtemplate_".$what);
                $template = $this->GetTemplate($templatename, $this->GetName());
            }        
            echo $this->ProcessTemplateFromData($template);
        }
        
    }else{
        // SIMPLE SEARCH
        
        $template = false;
        $levels = ($what == "-all")?$levelarray:array($what);
        
        // we retrieve the display template
        // if the user has asked for a specific display template, we will use it for every category :
        if(isset($params["listtemplate"]))        $template = $this->GetTemplate($params["listtemplate"], $this->GetName());
        if(!isset($template) || !$template){
            $templatename = $this->GetPreference("searchresultstemplate","**");
            if($templatename == "**"){
                if(count($levels) == 1){
                    $templatename = $this->GetPreference("listtemplate_".$levels[0]);
                    $template = $this->GetTemplate($templatename, $this->GetName());
                }else{
                    $template = false;
                }
            }else{
                $template = $this->GetTemplate($templatename, $this->GetName());
            }
        }

        
        foreach($levels as $level){
            $whereclause = "";
            $fields = $this->get_levelsearchfields($level);
            $keywords = $this->parsekeywords(html_entity_decode($params["searchfield"]));
            foreach($fields as $field){
                foreach($keywords as $keyword){
                    $whereclause .= ($whereclause == ""?"":" OR ")."A.".$field." LIKE '%".addslashes($keyword)."%'";
                }
            }
            $whereclause = "A.active=1".($whereclause == ""?"":" AND (".$whereclause.")");
            $getfunction = "get_level_".$level;
            $itemlist = $this->$getfunction(array(), false, "", "", isset($params["orderby"])?$params["orderby"]:0, $limit, $whereclause);
            $this->smarty->assign("itemcount",count($itemlist));
            
            if(count($itemlist) > 0){

                $total = $nbperpage?$this->countsomething($level,"id",array(),$whereclause, array()):false;
                $this->paginate($what,$total,$id,$returnid,$params,"search");
                
                // we must build a detail link for each result element
                $newlist = array();
                foreach($itemlist as $item){
                    $item = $this->addfrontendurls($item,$params,$id,$linkreturnid);
                    $item->is_selected = false;
                    array_push($newlist, $item);
                }
                $this->smarty->assign("itemlist",$newlist);
                $this->smarty->assign("leveltitle",$this->Lang($level."_plural"));
                            
                if($template == FALSE){
                    echo $this->ProcessTemplate("search_generalresults.tpl");
                }else{
                    echo $this->ProcessTemplateFromData($template);                
                }
                
            }else{
                $this->paginate($what,0,$id,$returnid,$params,"search");
                $this->smarty->assign("itemlist",$itemlist);
                $this->smarty->assign("error_msg",$this->Lang("error_noitemfound"));
            }
            if(count($itemlist) == 0 && $emptytemplate != "**"){
                echo $this->ProcessTemplateFromDatabase($emptytemplate);                
            }elseif($template == FALSE){
                echo $this->ProcessTemplate("search_generalresults.tpl");
            }else{
                echo $this->ProcessTemplateFromData($template);
            }
        }
        
    }
    
    // # END SEARCH RESULTS
    // #####################################################################################

}else{
    
    // #####################################################################################
    // # SEARCH FORM    
    
    $what = (isset($params["what"]) && in_array($params["what"],$levelarray))?$params["what"]:"-all";
    if($searchmode == "advanced" && $what == "-all")        $what = $finallevel;

    echo $this->CreateFormStart($id, "search", $returnid);
    echo $this->CreateInputHidden($id, "what", $what);
    echo $this->CreateInputHidden($id, "searchmode", $searchmode);
    if(isset($params["listtemplate"]))    echo $this->CreateInputHidden($id, "listtemplate", $params["listtemplate"]);
    if(isset($params["limit"]))    echo $this->CreateInputHidden($id, "limit", $params["limit"]);
    if(isset($params["inline"]))    echo $this->CreateInputHidden($id, "inline", $params["inline"]);
    if(isset($params["orderby"]))    echo $this->CreateInputHidden($id, "orderby", $params["orderby"]);
    if(isset($params["nbperpage"]))        echo $this->CreateInputHidden($id, "nbperpage", $params["nbperpage"]);
    if(isset($params["detailpage"]))    echo $this->CreateInputHidden($id, "detailpage", $params["detailpage"]);
    $this->smarty->assign("searchtitle", $this->Lang("searchtitle"));
    $this->smarty->assign("what", ($what == "-all")?false:$this->Lang($what));
    $this->smarty->assign("submit", $this->CreateInputSubmit($id, "submitsearch", $this->Lang("searchbtn")));

    if($searchmode == "simple"){
        // WE ARE DOING A SIMPLE SEARCH
        $this->smarty->assign("searchfield", $this->CreateInputText($id,"searchfield","",50));
        echo $this->ProcessTemplate("search.tpl");
        
    }else{
        // WE ARE DOING AN ADVANCED SEARCH

        $this->createFieldForm($what, $id, true);

        echo $this->ProcessTemplate("search_".$what.".tpl");
        
    }
    
    echo $this->CreateFormEnd();
    
    // # END SEARCH FORM
    // #####################################################################################    
    
}
?>

@cyberman

ja das geht bei mir auch... aber sollte man nicht lieber die neuere Version benutzen?
so bin ich erst drauf gekommen, das der Fehler von der neueren PHP Version kommt..

Danke für eure Antworten smile

Offline

#5 14. August 2011 22:01

AL-d82
Server-Pate
Ort: Heilbronn / Göppingen
Registriert: 18. Dezember 2010
Beiträge: 149
Webseite

Re: [gelöst] Problem mit Modul Vehicle Listing mit PHP Version 5.3.6

NaN schrieb:

Die einfachste Möglichkeit wäre, bei der von Dir rot markierten Zeile zusätzlich noch abzufragen, ob $value ein Array ist:

...
            if(!is_array($value) && substr($key,0,6) == "field_" && trim($value) != ""){
...

Verstehe aber nicht, warum dort ein Array übergeben wird. Wie genau funktioniert denn die Suche? Ist das eine Art Such-Formular? Welche Input-Felder gibt es denn da im HTML Quelltext? Und wo wird die Funktion getWhereFromParams() aufgerufen?


wenn ich  if(!is_array($value) && substr($key,0,6) == "field_" && trim($value) != ""){

benutze funktioniert die Suche mit den Parametern Hersteller und Ausstattung nicht..

also er Filtert es dann nicht es werden alle angezeigt

Offline

#6 14. August 2011 22:07

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [gelöst] Problem mit Modul Vehicle Listing mit PHP Version 5.3.6

Aha. Okay. Die Arrays sind also wichtig.
Dann versuch es mal mit

...
if(substr($key,0,6) == "field_" && !empty($value)){
...

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#7 14. August 2011 22:12

AL-d82
Server-Pate
Ort: Heilbronn / Göppingen
Registriert: 18. Dezember 2010
Beiträge: 149
Webseite

Re: [gelöst] Problem mit Modul Vehicle Listing mit PHP Version 5.3.6

@NaN

supie 100x Danke... hat bestens funktioniert smile
Nun funktioniert die Suche wieder so wie sie soll..

NaN schrieb:

Aha. Okay. Die Arrays sind also wichtig.
Dann versuch es mal mit

...
if(substr($key,0,6) == "field_" && !empty($value)){
...

Offline

#8 14. August 2011 22:28

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [gelöst] Problem mit Modul Vehicle Listing mit PHP Version 5.3.6

Bugreport abgesetzt?

Offline

#9 14. August 2011 22:32

AL-d82
Server-Pate
Ort: Heilbronn / Göppingen
Registriert: 18. Dezember 2010
Beiträge: 149
Webseite

Re: [gelöst] Problem mit Modul Vehicle Listing mit PHP Version 5.3.6

Jup hab dem Autor eine PM im Forum geschickt..

Er hat mir beim letzten Bugreport geantwortet..
Aber glaub nicht, das er es berichtigt hat es bei dem letzten Bugreport auch nicht upgedatet

vielleicht sollte ich doch ein richtigen Bugreport erstellen und die Lösung von NaN mit dran hängen smile

Offline