Seite 1 von 1

Probleme mit Termin-Modul

Verfasst: Di 3. Okt 2006, 17:25
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...!

Verfasst: Mi 4. Okt 2006, 09:19
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

print_r - Ergebnis...?!

Verfasst: Do 5. Okt 2006, 13:35
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.

Verfasst: Do 5. Okt 2006, 13:53
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.

Verfasst: Do 5. Okt 2006, 14:08
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*

Verfasst: Do 5. Okt 2006, 14:22
von Dodger77
Setzt du dieses Modul mehrfach auf einer Seite ein?

Array Multisort

Verfasst: Do 5. Okt 2006, 14:25
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

Re: print_r - Ergebnis...?!

Verfasst: Do 5. Okt 2006, 14:27
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

SQL Debug

Verfasst: Do 5. Okt 2006, 14:43
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...

Re: SQL Debug

Verfasst: Do 5. Okt 2006, 14:59
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

Re: SQL Debug

Verfasst: Mo 16. Okt 2006, 12:20
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...

Terminmodul: Warning: array_multisort()

Verfasst: Mo 16. Okt 2006, 17:13
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 !