Problem mit SQL Abfrage

Gesperrt
imuhcs
Beiträge: 27
Registriert: Do 30. Sep 2004, 07:59
Kontaktdaten:

Problem mit SQL Abfrage

Beitrag von imuhcs » Mo 20. Dez 2004, 14:48

Servus
mein Contenido will mich scheinbar zu verzweiflung bringen!!
ich kriege seit neustem mit dem module nav_mod 0.5a einen mysql fehler:

[20-Dec-2004 14:45:16] MySQL-Error: You have an error in your SQL syntax near 'AND CAT.idcat = CATLANG.idcat
AND CATLANG.idlang = 1' at line 9 (1064)


der source code des schuldigen moduls scheint aber in ordnung zu sein:

Code: Alles auswählen

<?php

/***********************************************
* OUTPUT
************************************************/

include_once($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");

// ****************************************************************************************************
// SECURITY-CHECKS
// ****************************************************************************************************

// SQL-Injection Überprüfungen und Work-Arounds

// lokale Variabeln initialisieren um Injections zu unterbinden
$db2       = "";
$catStart  = "";
$catPrev   = "";
$sTmpStr   = "";
$db2_sql   = "";
$catIds    = "";
$key       = "";
$val       = "";
$sql       = "";

// ****************************************************************************************************

// erstelle eine zweite DB-Klasseninstanz, da wir hier
// mit zwei Abfragen udn Resultsets arbeiten müssen
$db2 = new DB_Contenido;

/*
$eckkla_auf   = '::&nbsp;';
$eckkla_zu    = '';
$eckkla_trenn = '<br>';

$strBEGIN = '';
$strEND   = '';
*/

// Hole aus der Artikeldefinition die Ausgewählte Einstellungen
$catStart    = "CMS_VALUE[3200]";
$catPrev     = "CMS_VALUE[3201]";
$eckkla_auf      = "CMS_VALUE[3202]";
$eckkla_zu       = "CMS_VALUE[3203]";
$eckkla_trenn    = "CMS_VALUE[3204]";
$strBEGIN    = "CMS_VALUE[3205]";
$strEND      = "CMS_VALUE[3206]";
$cfg_chkchildid = "CMS_VALUE[3207]";
$cfg_css_link   = "CMS_VALUE[3208]";
$cfg_css_linkhl = "CMS_VALUE[3209]";



// * get catPrec Category and output CatName as [ BackTo ]  nav item


if ($catStart != "" && $catStart != "--kein--" ) {
  $sTmpStr = "";
   if ( $catPrev != "--kein--" ) {
        // Datenbankabfrage ( SQL QUERY ) aufbauen
        $sql = "   SELECT
                       CAT.idcat AS idcat,
                       name
                    FROM
                       ".$cfg["tab"]["cat"]." AS CAT,
                       ".$cfg["tab"]["cat_lang"]." AS CATLANG
             
                     WHERE   CAT.idcat = ".$catPrev."
                           AND CAT.idcat = CATLANG.idcat
                           AND CATLANG.idlang = ".$lang." ";
         echo $sql;          
        // Datenbankabfrage durchführen
        $db->query($sql);


        // die einzelnen Recordsets der Datenbankabfrage durchgehen
        while ( $db->next_record() ) {

      // überprüfung, ob schon ein Eintrag in der Ausgabevariabel ist
           if ( strlen($sTmpStr) == 0 ) {
               // ... Nein, dann die Formatierung für den ersten Eintrag verwenden
               // und den Eintrag der Ausgabevariabel hinzufügen
               $sTmpStr = $sTmpStr . $strBEGIN .  $eckkla_auf . '<a class="tbl_menu_quer" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;
           }
           else
           {
               // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
               // den Eintrag der Ausgabevariabel hinzufügen
               $sTmpStr = $sTmpStr . $eckkla_trenn . $eckkla_auf . '<a class="tbl_menu_quer" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;         
           }  // end if

        } // end while
   }
                       
   $db2_sql = "   SELECT
            *
         FROM ". $cfg["tab"]["cat"] ." AS A
      
         WHERE
         
           A.parentid = ". $catStart . "

                                                ORDER BY A.preid

                                                 ";

   // Abfrage ausführen
   $db2->query($db2_sql);

     // Ermittlung aller Kategorie IDs der ausgesuchten
     // Navigationsebene und speicherug in einem Array
   while ( $db2->next_record() ) {
             // $catIds[] = $db2->f("idcat");
      $test_1[$db2->f("preid")] = $db2->f("idcat");
   }
   
/*
PREID => IDCAT  ( $test_1 )
Array (
   [0]    => 50

   [26]    => 27
   [27]    => 28
   [28]    => 29
   [29]    => 30
   [30]    => 31
   [31]    => 32
   [32]    => 33
   [33]    => 38
   [34]    => 35
   [35]    => 36
   [36]    => 37
   [38]    => 34
   [50]    => 26
)
------------------------------------
*/

// ---------------------------------------------
// sort ids
$ar_anz = count($test_1);
$lpre = 0;
$test_3 = "";
$ires = "";

for ( $sli = 1 ; $sli <= $ar_anz ; $sli++ )
{
   $ires        = $test_1[$lpre];   
   $test_3[]    = $test_1[$lpre];   
   $lpre        = $ires;
}


// print_r($test_3); echo '<br><br>';
$catIds = $test_3;
// ---------------------------------------------

  // Überprüfung ob $catIds wirklich ein Array ist
  if ( is_array($catIds) ) {

    // die einzelnen IDs durchgegen
    foreach($catIds as $key=>$val) {

       
        // Datenbankabfrage ( SQL QUERY ) aufbauen
        $sql =    "   SELECT
                       CAT.idcat AS idcat,
                       name
                    FROM
                       ".$cfg["tab"]["cat"]." AS CAT,
                       ".$cfg["tab"]["cat_lang"]." AS CATLANG
             
                     WHERE   CAT.idcat = ".$val."
                           AND CAT.idcat = CATLANG.idcat
                           AND CATLANG.idlang = ".$lang." ";
echo $sql;
        // Datenbankabfrage durchführen
        $db->query($sql);


        // die einzelnen Recordsets der Datenbankabfrage durchgehen
        while ( $db->next_record() ) {
       
   if ( $cfg_chkchildid && sn_check_if_child ( $idcat, $catStart ))
   {
           // überprüfung, ob schon ein Eintrag in der Ausgabevariabel ist
              if ( strlen($sTmpStr) == 0 ) {
                     // ... Nein, dann die Formatierung für den ersten Eintrag verwenden
                     // und den Eintrag der Ausgabevariabel hinzufügen
                     $sTmpStr = $sTmpStr . $strBEGIN .  $eckkla_auf . '<a class="tbl_menu_quer" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;
              }
              else
              {
                     // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
                     // den Eintrag der Ausgabevariabel hinzufügen
                     $sTmpStr = $sTmpStr . $eckkla_trenn . $eckkla_auf . '<a class="tbl_menu_quer" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;         
              }  // end if
   }
   else
   {
           // überprüfung, ob schon ein Eintrag in der Ausgabevariabel ist
              if ( strlen($sTmpStr) == 0 ) {
                     // ... Nein, dann die Formatierung für den ersten Eintrag verwenden
                     // und den Eintrag der Ausgabevariabel hinzufügen
                     $sTmpStr = $sTmpStr . $strBEGIN .  $eckkla_auf . '<a class="tbl_menu_quer" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;
              }
              else
              {
                     // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
                     // den Eintrag der Ausgabevariabel hinzufügen
                     $sTmpStr = $sTmpStr . $eckkla_trenn . $eckkla_auf . '<a class="tbl_menu_quer" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;         
              }  // end if
   }
   


        } // end while
   
    }  // end foreach

    // END Zeichen $strEND anfügen
    $sTmpStr = $sTmpStr . $strEND;

    // Ausgabevariabel schreiben, da nun alle Einträge behandelt wurden.
    echo $sTmpStr;
  } // end if (is_array)


}


if ( $sn_navmod != "multiuse" ) {
$sn_navmod = "multiuse";


function sn_check_if_child ( $l_idcat, $l_paridcat )
{
   $bResult = false;
   $l_int   = $l_idcat;

   while ( $l_int != 0 && $l_int != $l_paridcat )
   {
      $l_int = get_parentid_from_idcat ( $l_int );

      if ( $l_int == $l_paridcat )
      {
         $bResult = true;
      } // end if
   } // end while
   
   return $bResult;
} // check_if_child

function get_parentid_from_idcat ( $l_idcat )
{
   $ldb = new DB_Contenido;
   $lsql= "SELECT *
      FROM    ".$cfg["tab"]["cat"]." AS CAT,
                    ".$cfg["tab"]["cat_lang"]." AS CATLANG
             
                WHERE   CAT.idcat = ".$l_idcat."
                        AND CAT.idcat = CATLANG.idcat
                        AND CATLANG.idlang = ".$lang." ";
echo $sql;
   $ldb->query($lsql);

   while ( $ldb->next_record() )
   {
      $l_parid = $ldb->f("parentid");
   }

   return $l_parid;

} // end function get_parentid_from_idcat

} // end MULTIUSE Funktions
?>

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 20. Dez 2004, 15:10

lass dir mal das komplette SQL-Statement ausgeben und füge dieses im phpMyAdmin ein

aber auf den ersten Blick sieht das Statement korrekt aus...

imuhcs
Beiträge: 27
Registriert: Do 30. Sep 2004, 07:59
Kontaktdaten:

Beitrag von imuhcs » Mo 10. Jan 2005, 09:51

statement ist auch korrekt. trotzdem dieser eintrag im error log!!!!
udn der geht net weg

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 10. Jan 2005, 10:51

ähm zuerst mal...alles was mit Modulen zu tun hat gehört nicht in Bugs (deshalb verschoben in Module 4.4)

dann fällt mir auf, daß in der Funktion function get_parentid_from_idcat ein global $cfg fehlt.

Hast du das Modul selbst geschrieben? Wenn du ein echo $lsql machst, müsste dir auffallen daß keine Tabellen eingetragen werden. Ein global $cfg in die Funktion rein und es müsste gehen.

Gesperrt