Author Topic: count() in search_modext.php  (Read 610 times)

Offline jacobi22

  • Posts: 5865
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
count() in search_modext.php
« on: December 19, 2018, 11:41:08 AM »
Quote
[E_WARNING] /search/search_modext.php:[104] from /modules/guestbook/search.php:[68] print_excerpt2 "count(): Parameter must be an array or an object that implements Countable"

Stackoverflow meint: vorher abfragen, ob $excerpt_array auch ein Array ist (is_array()), wenn nicht, auf 1 setzen - 1 muß es ja sein, weil er sonst nicht in die while-Schleife geht

bitte mal checken und wenn bestätigt, ins Projekt aufnehmen
Wer nicht will, findet Gründe, wer will, findet Wege.

Offline jacobi22

  • Posts: 5865
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: count() in search_modext.php
« Reply #1 on: December 19, 2018, 12:02:23 PM »
noch ergänzend dazu: sollte nach meinem Verständnis auftreten, wenn nur ein Treffer in der Suche generiert wird. In diesem Fall kommt der Treffer aus dem Gästebuch, das im speziellen Fall als Frage-Antwort-Modul dient. Das Problem sollte aber m.E. in jeder Suche mit nur einem Treffer ab PHP > 7.2 auftreten, unabhängig vom Modul-Typ, da count() nur Array's verarbeitet, ein Einzeltreffer aber kein Array ist.

Bitte auch mich korrigieren, wenn ich da falsch liege - Danke
Wer nicht will, findet Gründe, wer will, findet Wege.

Offline hgs

  • Betatester
  • **
  • Posts: 1116
    • EFG MG
Re: count() in search_modext.php
« Reply #2 on: December 19, 2018, 01:25:44 PM »
Hab mal eine Suche auf einer Seite mit nur einem Treffer erzeugt, der ErrorLog bleibt leer.
Oder wie kann ich den Fehler "erzeugen"?
PHP-Version: 7.2.11
WebsiteBaker-Version: 2.12.1 -r188
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

Offline jacobi22

  • Posts: 5865
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: count() in search_modext.php
« Reply #3 on: December 19, 2018, 02:11:31 PM »
muß ich selber erst probieren, bekam das auch nur gemeldet
das count()-Problem als solches ist aber bekannt ab PHP 7.2.x
Wer nicht will, findet Gründe, wer will, findet Wege.

Offline paulchen

  • Posts: 142
  • Gender: Male
    • PV-Steuer-Shop
Re: count() in search_modext.php
« Reply #4 on: December 19, 2018, 02:55:57 PM »
Der Fehler trat auf meiner Webseite auf. Konfiguration: WB 2.12.1 -r188 , PHP 7.2.13

Ein eben durchgeführter Suchtest mit nur einer Trefferstelle gab bei mir ebenfalls keine Fehlermeldung aus.
Leider kann ich nicht nachvollziehen, wie / wodurch die zitierte Fehlermeldung entstanden ist, weil die auslösende Suche nicht von mir kam.

Offline jacobi22

  • Posts: 5865
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: count() in search_modext.php
« Reply #5 on: December 19, 2018, 02:58:09 PM »
macht ja nix  ;-)
Dietmar weiß sicher Bescheid, wenn er "count()" liest  - nur wissen muß er es
Wer nicht will, findet Gründe, wer will, findet Wege.

Offline Luisehahne

  • WebsiteBaker Org e.V.
  • **
  • Posts: 4366
  • Gender: Male
    • Webdesign und Entwicklung WebsiteBaker
Re: count() in search_modext.php
« Reply #6 on: December 20, 2018, 10:58:54 AM »
Quote
[E_WARNING] /search/search_modext.php:[104] from /modules/guestbook/search.php:[68] print_excerpt2 "count(): Parameter must be an array or an object that implements Countable"

Stackoverflow meint: vorher abfragen, ob $excerpt_array auch ein Array ist (is_array()), wenn nicht, auf 1 setzen - 1 muß es ja sein, weil er sonst nicht in die while-Schleife geht

bitte mal checken und wenn bestätigt, ins Projekt aufnehmen

Ursache liegt an einer falschen Deklaration. Werde es für die 2.12.2 fixen. Meldung wird sein
Quote
bug fixed wrong array declaration in function get_excerpts line 82 in file  /search/search_modext.php

das FALSE ändern in [], das sollte es gewesen sein. Bitte mal vorab testen und Bescheid geben, dann übernehme ich es ins Project

Dietmar
Immer nur von der Zukunft reden, die Gegenwart vergessen und auf die Vergangenheit schimpfen
Neues Unwort: Schnappatmung

Offline jacobi22

  • Posts: 5865
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: count() in search_modext.php
« Reply #7 on: December 20, 2018, 12:09:41 PM »
bin noch dabei, die Bedingungen zu analysieren, unter denen der o.g. Fehler auftritt.
Die Lösung ist für dich und mich wohl verständlich, aber ich hätte den Fehler gern vorher einmal provoziert

Wie gesagt, kommt die Meldung aus der Benutzung der Suche auch im Gästebuch. Die Suche dort generiert aus den Beiträgen u.a. den Content und alle Daten, die im Gästebuch genutzt werden, eben auch Name, EMail

Daraus erhalte ich minimum einen Treffer, sonst wäre $result == false (in der search.php des Moduls) und die search_modext.php springt garnicht erst an.
Diese search_modext.php soll nun in der get_excerpts() die Treffer suchen, den Suchbegriff markieren, doppelte aussortieren usw. aber auch Treffer mit einer Mailadresse drin wieder ausfiltern (Zeile 102ff)

Code: [Select]
if(!preg_match('/\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\./', $match)) // skip excerpts with email-addresses
            $excerpt_array[] = trim($match);

Das bedeutet (für mich): wenn mein Treffer ($match) eine EMail-Adresse enthält, fliegt der raus und damit wäre $except_array immer noch false (aus Zeile 82) und in Zeile 104 beim count() kein Array, weil  ja nicht als solcher deklariert, was deine Korrektur dann ändern würde.

So rein theoretisch braucht es auch kein Gästebuch dazu, ein Wysiwyg mit Mailadresse im Treffersatz sollte reichen, um den Fehler ohne Korrektur zu provozieren, oder?

Wer nicht will, findet Gründe, wer will, findet Wege.

Offline Luisehahne

  • WebsiteBaker Org e.V.
  • **
  • Posts: 4366
  • Gender: Male
    • Webdesign und Entwicklung WebsiteBaker
Re: count() in search_modext.php
« Reply #8 on: December 20, 2018, 01:26:59 PM »
Das Problem ist eben halt, dass php7 immer stricter wird. Da fallen irgendwann mal alle Module durchs Raster. Demnächst sind alle Variablen vor Benutzung type mäßig zu deklarien. Ist vorbei, einer Variable verschieden Typen zu zuweisen, wie das bisher möglich war. Da kommt doch richtig Freude auf.  :|

Ganz zu schweigen von MySql, CSP und mehr. Habe einen großenTeil für die kommende 2.13.x bereits umgesetzt, und musste danach erstmal unsere eigene Plugins im CKeditor wieder lauffähig bekommen.

Da passierne Ding, da bekommst du Alpträume  :-P

Dietmar
Immer nur von der Zukunft reden, die Gegenwart vergessen und auf die Vergangenheit schimpfen
Neues Unwort: Schnappatmung

Offline jacobi22

  • Posts: 5865
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: count() in search_modext.php
« Reply #9 on: December 20, 2018, 02:25:18 PM »
Für Harald zum Nachstellen und testen:

wie oben angenommen, reicht ein einfacher Text mit einer korrekten EMail-Adresse und einem Suchwort, das eher selten auf den Seiten zu finden ist. Damit es funktioniert, wären zwei Sectionen nicht verkehrt. Einmal mit, einmal ohne Mailadresse
als Beispiel zwei Wysiwyg's
1. Section - Text:  Automobil mail@mail.com
2. Section - Text:  Automobil

Suchbegriff: Automobil

die erste Section wird wg der Mailadresse raus gefiltert, die zweite bringt den Treffer

mit Originalcode in der Datei search/search_modext.php - Zeile 82 
Code: [Select]
$excerpt_array =false;bekommst du die Fehlermeldung

Mit Dietmar's Fix
Code: [Select]
$excerpt_array = [];nicht mehr
Wer nicht will, findet Gründe, wer will, findet Wege.

Offline hgs

  • Betatester
  • **
  • Posts: 1116
    • EFG MG
Re: count() in search_modext.php
« Reply #10 on: December 20, 2018, 08:21:03 PM »
Werde es morgen früh mal nachbauen und berichten
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

Offline hgs

  • Betatester
  • **
  • Posts: 1116
    • EFG MG
Re: count() in search_modext.php
« Reply #11 on: December 20, 2018, 08:57:29 PM »
Gerade durchgetestet
in der aktuellen Version 2.12.1 gibt es diese Meldung im ErrorlOg
Thu, 20 Dec 2018 19:53:37 +0000 [E_WARNING] /search/search_modext.php:[104] from /modules/wysiwyg/search.php:[55] print_excerpt2 "count(): Parameter must be an array or an object that implements Countable"
Thu, 20 Dec 2018 19:53:38 +0000 [E_DEPRECATED] /modules/imagegallery/search.php:[73] from /framework/frontend.functions.php:[240] require "Function create_function() is deprecated"
Thu, 20 Dec 2018 19:53:38 +0000 [E_DEPRECATED] /modules/imagegallery/search.php:[74] from /framework/frontend.functions.php:[240] require "Function create_function() is deprecated""

Auf dem 1:1 Clone der Seite mit 2.12.2 bleibt der ErrorLog leer
« Last Edit: December 20, 2018, 09:06:34 PM by hgs »
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)