Probleme mit Termin-Modul

Gesperrt
conti79
Beiträge: 57
Registriert: Fr 31. Mär 2006, 10:09
Kontaktdaten:

Probleme mit Termin-Modul

Beitrag von conti79 »

Die Verwendung von array_multisort() führt bei mir zu folgender Fehlermeldung:


Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in /path/cms/front_content.php(923) : eval()'d code on line 1235



Und zwar beim Aufruf des u.a. Terminmoduls, das ich hier aus dem Forum habe:

Code: Alles auswählen


<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
* Terminübersicht
* Modulname   :     Terminmodul mit allen Terminen
* Author        :   agon
* Copyright   :     Contenido - four for business
* Created     :     22-08-2002
* Modified    :     Rezeptionist
* xhtml valide  :   apicalart 
************************************************/
cInclude('classes', 'contenido/class.client.php'); 
$gefunden=0; // um zu überprüfen, ob überhaupt Termine vorliegen
$date = date("Y-m-d");
 


$sql = "SELECT ARTLANG.idart, CONTENT.value, CONTENT.typeid, ARTLANG.idartlang
FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".$cfg["tab"]["art_lang"]." AS ARTLANG, ".$cfg["tab"]["cat"]." AS CAT, ".$cfg["tab"]["content"]." AS CONTENT
WHERE ARTLANG.idart = CATART.idart AND CATART.idcat = CAT.idcat AND ARTLANG.idartlang = CONTENT.idartlang
AND ARTLANG.idlang = '".$lang."' AND CAT.idcat = '78' AND CAT.idclient = '".$client."'
AND ARTLANG.online = '1' AND CATART.is_start='0'
ORDER BY ARTLANG.idart, CONTENT.typeid ASC"; // Alle Artikel der Kategorie einlesen, die nicht Startartikel (= Terminübersicht) sind
$db->query($sql);
$j=0; $anz=0;
if ($db->num_rows() != 0)
{
 $termin = array(array()); // Array erzeugen, in dem die Termine abgelegt werden;
 while ($j < $db->num_rows()) // alle Datensätze durchlaufen
 {
  $db->next_record();
  if ($db->f("idart") > $termin["idart"][$anz])
  {
   $anz++;
  }
  switch ($db->f("typeid")) {
   case 0: // Anfangstermin
    $termin["datum1"][$anz] = $db->f("value");
    $termin["jahr1"][$anz] = substr($db->f("value"),0,4);
    $termin["monat1"][$anz] = substr($db->f("value"),5,2);
    $termin["tag1"][$anz] = substr($db->f("value"),8,2);
    $termin["idart"][$anz] = $db->f("idart");
   break;
   case 1: // Anfangsuhrzeit
    $termin["zeit1"][$anz] = $db->f("value");
    $termin["datum1"][$anz] = $termin["datum1"][$anz]." ".$termin["zeit1"][$anz];
   break;
   case 2: // Endtermin
    $termin["datum2"][$anz] = $db->f("value");
    $termin["jahr2"][$anz] = substr($db->f("value"),0,0);
    $termin["monat2"][$anz] = substr($db->f("value"),0,0);
    $termin["tag2"][$anz] = substr($db->f("value"),8,2);
   break;
   case 3: // Enduhrzeit
    $termin["zeit2"][$anz] = $db->f("value");
    $termin["datum2"][$anz] = $termin["datum2"][$anz]." ".$termin["zeit2"][$anz];
   break;
   case 4: // Ort
    $termin["ort"][$anz] = $db->f("value");
   break;
   case 6: // Titel
    $termin["titel"][$anz] = $db->f("value");
   break;
  }
  $j++;
 }
 array_multisort ( $termin["datum1"], SORT_ASC, SORT_STRING, $termin["datum2"], SORT_ASC, SORT_STRING,
  $termin["jahr1"], $termin["monat1"], $termin["tag1"], $termin["zeit1"],
  $termin["jahr2"], $termin["monat2"], $termin["tag2"], $termin["zeit2"],
  $termin["idart"], $termin["ort"], $termin["titel"] ); // nach Datum sortieren
 for ($i=0; $i<=$anz; $i++)
 {
  if ( $termin["datum1"][$i] >= $date || $termin[$i]["datum1"] >= $date ) // nur Termine, die noch aktuell sind, aufnehmen
  {
   if ( $termin["monat1"][$i] !== $termin["monat1"][$i-1] || $gefunden == 0 ) // überprüfen, ob Monatsnahme einzufügen ist
   {
    /*
    echo ' <div class="monat">';
    switch ($termin["monat1"][$i]) {
     case 1: echo "Januar"; break;
     case 2: echo "Februar"; break;
     case 3: echo "März"; break;
     case 4: echo "April"; break;
     case 5: echo "Mai"; break;
     case 6: echo "Juni"; break;
     case 7: echo "Juli"; break;
     case 8: echo "August"; break;
     case 9: echo "September"; break;
     case 10: echo "Oktober"; break;
     case 11: echo "November"; break;
     case 12: echo "Dezember"; break; }
     echo ' '.$termin["jahr1"][$i];
   
    echo '</div>';
    */
   }
   $gefunden=1;
/*
   echo ' <div class="datum"><p>'.substr($termin["datum1"][$i],8,2).'.'.substr($termin["datum1"][$i],5,2).'.'.substr($termin["datum1"][$i],0,4); // Anfangsdatum ausgeben
   if ( strlen($termin["tag2"][$i]) < 2 && strlen($termin["zeit1"][$i]) >1 ) // falls kein Enddatum (Eintagestermin), aber Anfangszeit, diese ausgeben
   {
    echo '     '.$termin["zeit1"][$i].' Uhr';
   } elseif ( strlen($termin["tag2"][$i]) > 1 ) // falls Enddatum (Mehrtagestermin), dieses ausgeben
   {
    echo ' – '.substr($termin["datum2"][$i],8,2).'.'.substr($termin["datum2"][$i],5,2).'.'.substr($termin["datum2"][$i],0,4);
    if ( $termin["monat2"][$i] != $termin["monat1"][$i]) // falls Enddatum nicht im gleichem Monat
    {
     echo $termin["monat2"][$i].'';
     if ( $termin["jahr2"][$i] != $termin["jahr1"][$i]) // falls Enddatum nicht im gleichen Jahr
     {
      echo substr($termin["jahr2"][$i],0,0).'';
     }
    }
    echo '';
   } else
   {
    echo '';
   }
  */
   $navmod_link ="front_content.php?client=".$client."?=".$lang."&idcat=78&idart=".$termin["idart"][$i]."";
  
echo '
						 <TR>
                <TD>&nbsp;&nbsp;</TD>
                <TD valign=top><A 
                  href="'.$sess->url("$navmod_link").'" target="_self"><IMG 
                  height=11 alt="" 
                  src="img/pic_pfeil.gif" width=11 
                  border=0></A></TD>
                <TD valign=top width=9>&nbsp;</TD>
                  <TD width=147><A class=nav_1 
                  href="'.$sess->url("$navmod_link").'" target="_self">'.substr($termin["datum1"][$i],8,2).'.'.substr($termin["datum1"][$i],5,2).'.'.substr($termin["datum1"][$i],0,4).'<br>'.urldecode($termin["titel"][$i]).'</A></TD>
                <TD>&nbsp;&nbsp;</TD></TR>
              <TR>
                <TD colSpan=5><IMG height=8 alt="" 
                  src="img/trans.gif" width=1 
                border=0></TD></TR>';

 

/*  
   echo ' in 
  '.urldecode($termin["ort"][$i]).'</p></div>
  <p>'.urldecode($termin["titel"][$i]).'<br /><img src="img/pic_pfeil.gif" alt="Öffnet die Termindetails zu '.urldecode($termin["titel"][$i]).'" title="Infos zu '.urldecode($termin["titel"][$i]).'" /> <a class="nav_1" href="'.$sess->url("$navmod_link").'">weitere Informationen</a></p><br>';
  */
  }
 }
}
if ( $gefunden == 0 ) // falls kein aktueller Termin vorliegt
{

echo '
						 <TR>
                <TD>&nbsp;&nbsp;</TD>
                <TD valign=top><IMG 
                  height=11 alt="" 
                  src="img/pic_pfeil.gif" width=11 
                  border=0></TD>
                <TD valign=top width=9>&nbsp;</TD>
                  <TD width=147><a class=nav_1>Es liegen aktuell keine Termine vor!</a></TD>
                <TD>&nbsp;&nbsp;</TD></TR>
              <TR>
                <TD colSpan=5><IMG height=8 alt="" 
                  src="img/trans.gif" width=1 
                border=0></TD></TR>';

 //echo ' <div><p>Es liegen aktuell keine Termine oder Veranstaltungen vor!</p></div>';

}

?> 


Ich habe das Forum bereits durchsucht, aber keine der in den entsprechenden Freds angegebenen Lösungsvorschläge führt bei mir zur Lösung des Problems.

Könnte mir daher ggf nochmals jemand Hilfe leisten? Würde mich sehr freuen. Wenn weitere Infos benötigt werden, lasst es mich bitte wissen.

1000 Dank...!
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

Hallo conti79,

der Fehler wird wohl ausgelöst, weil ein an array_multisort übergebenes Argument falsche Werte hat.

Kenne mich mit dem Modul nicht aus, aber in der switch-Anweisung werden die In der DB abgelegten Inhalte ausgewertet (Anfangstermin, Anfangsuhrzeit, Endtermin, Enduhrzeit, Ort, Titel) und der Variablen $termin zugewiesen. Daher sollten die dazugehürigen Artikel 6 CMS-Variablen enthalten. Wenn nicht wird die Variable nicht korrekt mit Daten befüllt und an die Funktion array_multisort übergeben.
Mach mal einfach vor array_multisort ein Dump der Variable, z. B.

Code: Alles auswählen

 print "<pre>";print_r($termin); print "</pre>";
 array_multisort ( $termin["datum1"], SORT_ASC, SORT_STRING, $termin["datum2"], SORT_ASC, SORT_STRING, 
  $termin["jahr1"], $termin["monat1"], $termin["tag1"], $termin["zeit1"], 
  $termin["jahr2"], $termin["monat2"], $termin["tag2"], $termin["zeit2"], 
  $termin["idart"], $termin["ort"], $termin["titel"] ); // nach Datum sortieren 
um zu sehen, ob alle an die Funktion übergeben Parameter auch wiederum Arrays sind. Falls nicht, haben sehr wahrscheinlich die Artikel in der Kategorie nicht die richtigen CMS-Variablen. Da würde ich dir empfehlen, die Doku/Installationsanleitung zum Modul nochmal mit dem verwendeten Template für die Artikel zu vergleichen.

Grüße
xmurrix
conti79
Beiträge: 57
Registriert: Fr 31. Mär 2006, 10:09
Kontaktdaten:

print_r - Ergebnis...?!

Beitrag von conti79 »

Hallo,

also ich hab das Array mal ausgeben lassen: Es gibt mir folgende Werte zurück:

Array
(
[0] => Array
(
)

[zeit1] => Array
(
[1] => Aktuelle+Termine
[4] =>
[5] =>
[6] => 19:00
)

[datum1] => Array
(
[1] => Aktuelle+Termine
[4] => 2006-10-06 14:30
[5] => 2006-10-26
[6] => 2006-10-05 19:00
)

[datum2] => Array
(
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
)

[jahr2] => Array
(
[2] =>
[4] =>
[5] =>
[6] =>
)

[monat2] => Array
(
[2] =>
[4] =>
[5] =>
[6] =>
)

[tag2] => Array
(
[2] =>
[4] =>
[5] =>
[6] =>
)

[zeit2] => Array
(
[3] =>
[4] =>
[5] =>
[6] =>
)

[jahr1] => Array
(
[4] => 2006
[5] => 2006
[6] => 2006
)

[monat1] => Array
(
[4] => 10
[5] => 10
[6] => 10
)

[tag1] => Array
(
[4] => 06
[5] => 26
[6] => 05
)

[idart] => Array
(
[4] => 158
[5] => 164
[6] => 166
)

[ort] => Array
(
[4] => RWE Baustelle Blöcke F/G, Energiestraße, 41517 Grevenbroich
[5] => Konferenzraum B
[6] => Konferenzraum B
)

[titel] => Array
(
[4] => Kraftwerk-Besichtigung in Neurath
[5] => AK Religion & Ethik
[6] => Arbeitskreis Europa
)

)
Irgendwie kann ich darin aber keinen Fehler erkennen. Es wird auch keine PHP-Fehlermeldung bei der Ausgabe erzeugt. Hat jemand eine Idee was ich tun kann...?

Nochmals 1000 Dank für jd Hinweis.
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 »

Die einzelnen Arrays haben eine unterschiedliche Anzahl an Elementen. Daran stört sich halt die Funktion array_multisort().

Ändere mal:

Code: Alles auswählen

 $termin = array(array()); // Array erzeugen, in dem die Termine abgelegt werden; 
in:

Code: Alles auswählen

 $termin = array(); // Array erzeugen, in dem die Termine abgelegt werden; 
Vielleicht bringt das was.
conti79
Beiträge: 57
Registriert: Fr 31. Mär 2006, 10:09
Kontaktdaten:

Beitrag von conti79 »

Dodger77 hat geschrieben:Die einzelnen Arrays haben eine unterschiedliche Anzahl an Elementen. Daran stört sich halt die Funktion array_multisort().

Ändere mal:

Code: Alles auswählen

 $termin = array(array()); // Array erzeugen, in dem die Termine abgelegt werden; 
in:

Code: Alles auswählen

 $termin = array(); // Array erzeugen, in dem die Termine abgelegt werden; 
Vielleicht bringt das was.
Hallo,

das hat leider nix gebracht. Der Fehler bleibt.

Was äußerst merkwürdig ist: ich habe die Seite auf einem anderen Webserver mit PHP 4.3.8 am laufen gehabt - keinerlei Probleme.

Auf dem neuen Webserver ist PHP 5.0.3 installiert. In der changelog der noch neueren Versionen steht, dass in denen ein Fehler bzgl array_multisort() behoben wurde. Keine Ahnung, ob das hier mein Problem betrifft, aber es ist halt für mich nicht nachvollziehbar wie eine in einer vorherigen version funktionierender Code später nicht mehr funktioniert *BAHNHOF VERSTEH*

Vielleicht hilft das ja bei der Fehlersuche... *HOFF*
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 »

Setzt du dieses Modul mehrfach auf einer Seite ein?
media-konzept
Beiträge: 90
Registriert: So 20. Mär 2005, 13:24
Wohnort: CH-5430 Wettingen
Kontaktdaten:

Array Multisort

Beitrag von media-konzept »

Dodger77 hat geschrieben:Die einzelnen Arrays haben eine unterschiedliche Anzahl an Elementen. Daran stört sich halt die Funktion array_multisort().

Ändere mal:

Code: Alles auswählen

 $termin = array(array()); // Array erzeugen, in dem die Termine abgelegt werden; 
in:

Code: Alles auswählen

 $termin = array(); // Array erzeugen, in dem die Termine abgelegt werden; 
Vielleicht bringt das was.
Ich glaube das hängt stark mit der verwendeten Version von PHP zusammen. Der von Dodger77 empfohlene Versuch bringt nur was wenn PHP in der Version 4.x verwendet wird...ab Version 5 ist der ursprüngliche Code zwingend.
Gruss Felix
two beers or not two beers
schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Re: print_r - Ergebnis...?!

Beitrag von schlaucher »

conti79 hat geschrieben: Hat jemand eine Idee was ich tun kann...?

Nochmals 1000 Dank für jd Hinweis.
Hi conti79,

ich hatte mit einigen Installationen meiner Terminliste das gleiche Problem. Nach deiner Schilderung zu urteilen, sind für manche Termindatensätze in der con_content Tabelle doppelte Datensätze vorhanden. Frage mich aber nicht, wie das passieren kann. :(

Um das festzustellen kannst Du dir mein Debug Modul installieren. http://www.contenido.de/forum/viewtopic.php?t=13796
Einfach in das Template mit dem Terminmodul einbinden. (Nach dem Terminmodul).

Du erhältst als Ausgabe die ganze Liste aller benutzten Variablen und Werte. Am Ende hast Du die Möglichkeit einen SQL String zu übergeben.
Nimm hier den SQL Select aus dem Terminmodul (findest Du in der Variablenliste) und kopiere ihn in das Eingabefenster. Als Ergebnis wird Dir eine Liste der gefundenen Datensätze angezeigt. In etwa so:
Bild
Pro idart darf es immer nur einen eindeutigen typeid Eintrag geben.

Überprüfe das mal.

Gruß
schlaucher
conti79
Beiträge: 57
Registriert: Fr 31. Mär 2006, 10:09
Kontaktdaten:

SQL Debug

Beitrag von conti79 »

Hi Schlaucher,

schöne Idee - leider auch ohne Erfolg :-(

Es waren zwar doppelte typeid Einträge vorhanden, aber auch nach dem Entfernen des entsprechenden Termins kommt dieselbe Fehlermeldung.

Ich werd noch wahnsinnig. Welcher Verrückte hat sich was dabei gedacht die Funktion einer Funktion in einer späteren PHP-Version zu verändern...? *KOTZ*

Sorry, aber das musste jetzt mal raus!

Dennoch danke für alle Vorschläge bis dato...
schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Re: SQL Debug

Beitrag von schlaucher »

conti79 hat geschrieben:Ich werd noch wahnsinnig. Welcher Verrückte hat sich was dabei gedacht die Funktion einer Funktion in einer späteren PHP-Version zu verändern...? *KOTZ*

Sorry, aber das musste jetzt mal raus!
o.k., aufwischen und weiter. :lol:

1.) Setzte alle Termine offline. Was kommt dann?

2.) Einen Termin nach dem anderen online stellen. Wenn der Fehler kommt, Termin löschen.

3.) Welche Module hast Du im Template, in dem Du den Termin erstellst? Sind da noch HTML_HEAD oder HTML_TEXT Module? Wenn ja, nimm die mal raus.

Gruß
schlaucher
conti79
Beiträge: 57
Registriert: Fr 31. Mär 2006, 10:09
Kontaktdaten:

Re: SQL Debug

Beitrag von conti79 »

o.k., aufwischen und weiter. :lol:

1.) Setzte alle Termine offline. Was kommt dann?

2.) Einen Termin nach dem anderen online stellen. Wenn der Fehler kommt, Termin löschen.

3.) Welche Module hast Du im Template, in dem Du den Termin erstellst? Sind da noch HTML_HEAD oder HTML_TEXT Module? Wenn ja, nimm die mal raus.

Gruß
schlaucher[/quote]

1. Derselbe Fehler:
Warning: array_multisort() [function.array-multisort]: Argument #7 is expected to be an array or a sort flag in /path/cms/front_content.php(923) : eval()'d code on line 1236

2. Derselbe Fehler - siehe 1.

3. Hab alle übrigen Module rausgenommen. Fehler bleibt gleich.


Hat jemand vielleicht noch eine Idee...?


1000 Dank...
Seelauer
Beiträge: 186
Registriert: So 22. Jan 2006, 21:03
Wohnort: Mal da, mal da
Kontaktdaten:

Terminmodul: Warning: array_multisort()

Beitrag von Seelauer »

Servus Conti79,
aufgewischt ?
Hatte mal dieses Teil etwas verändert -aber problemfrei- am Laufen. Ich schicke Dir das Modul per pm.
Viel Erfolg !
Gesperrt