Seite 3 von 4

Verfasst: 09.08.2005 16:12
von shwepsi
ich habe den Fehler auch schon gefunden...

du benutzt die Schleife INNERHALB einer Whileschleife...

Problem:
er ist immer beim letzten Bild, weil er je Eintrag den er ausliest das dann speichert und in die Schleife schickt
hier ist das ganze ganz anders zu lösen, es gibt die Möglichkeiten:
  1. innerhalb der while schleife - ohne for schleifen mit einem zusätzlichen Zähler
  2. ausserhalb der While-Schleife mit einem zusätzlichem Array
Vorteil an a)
er zeigt bis zu einem eventuell auftretendem auslese Fehler alles an
Vorteil bei b)
Falls beim auslesen ein Fehler auftritt kann man leichter abbrechen und die Ausgabe verhindern und durch eine Fehlermeldung ersetzen

b ist vermutlich um längen einfacher, bei a stoße ich schon bei der Theorie auf viele Probleme die teilweise umständlich zu umschiffen sind.

Verfasst: 09.08.2005 17:01
von d23
gut, wenn b einfacher ist, dann wär b wohl besser ? :D

das problem ist, wie richte ich den array dann so ein, dass er auch richtig funktioniert ?

Verfasst: 10.08.2005 10:43
von shwepsi
vor der while schleife erstellst du ein leeres Array
$array = array();

und in der whileschleife speicherst du die Sachen dann halt in dieser

while ... {
$array[]['wie du das 1. Feld nennen willst'] = Wert den du ausliest;
$x = count($array) - 1;
$array[$x]['wie du dsa 2., 3., ... Feld nennen willst'] = Wert den du ausliest;
}

das [] bedeutet er legt ein neues Feld am Ende an
das count -1 schaut wie weit wir schon sind und
das $array[$x] sagt dann das die Werte zusammen gehören

in meiner Schleife musst du dann halt [$x] wieder verwenden wenn du die Variablen ans Template übergibst.

Schaffst du das oder ist noch etwas unklar?

Verfasst: 10.08.2005 12:55
von d23

Code: Alles auswählen

$bildarray = array();


$alb_sql = 'SELECT * FROM `gallery_pix` WHERE `album_id` = ' . $gal_id . ' ORDER BY `id` ASC LIMIT ' . $start . ', 24';
if(!$alb_result = $db->sql_query($alb_sql)) {
        message_die(GENERAL_ERROR, 'Fehler beim Auslesen der Album-Informationen', '', __LINE__, __FILE__, $alb_sql);
}

while($alb_row = $db->sql_fetchrow($alb_result)) {



$cnt_alb = mysql_query("SELECT * FROM `gallery_pix` WHERE `album_id` = '" . $alb_row['album_id'] . "'");
$cnt_alb = mysql_num_rows($cnt_alb);

$cnt_cmt = mysql_query("SELECT * FROM `gallery_comments` WHERE `pic_id` = '" . $alb_row['id'] . "'");
$cnt_cmt = mysql_num_rows($cnt_cmt);

$akt_ptid = $alb_row['id'];

$albpl_sql = mysql_query('SELECT * FROM `gallery_albums` WHERE `id` = ' . $gal_id);
$gal_ord = mysql_fetch_row($albpl_sql);

$rd_datum = $gal_ord['3'];

$day = date("w", $rd_datum);
$days = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$date = date("j", $rd_datum);
$month = date("n", $rd_datum);

$months = array(1=>"Januar", 2=>"Februar", 3=>"März", 4=>"April", 5=>"Mai", 6=>"Juni", 7=>"Juli", 8=>"August", 9=>"September", 10=>"Oktober", 11=>"November", 12=>"Dezember");

$year = date("Y", $rd_datum);
$clc_datum = $days[$day] . ", " . $date . ". " . $months[$month] . "   " . $year;


$template->assign_vars(array(
                'ALBID' => $gal_ord['0'],
                'ALBTITLE' => $gal_ord['1'],
                'ALBAUTHOR' => $gal_ord['2'],
                'ALBADD_DATE' => $clc_datum
                 ));



$bildarray[]['index'] = $alb_row['id'];
$x = count($bildarray) - 1;
$bildarray[$x]['feldx'] = "<a href=gallery_pic.php?pic_id=" . $akt_ptid . "><img src=\"gallery/" . $alb_row['ordner'] . "/_thm/" . $alb_row['dateiname'] . "\"></a><br>";


$zeilen = count($cnt_alb);

$end = $x + 4;
for ($x = 1; $x <= $zeilen; $x++)
{
        $template->assign_block_vars('zeile', array(
        ));

        $start = $x;

        for ($y = $start; $y <= $end; $y++)
        {
              $template->assign_block_vars('zeile.bild', array(
                  'THMIMG' => $bildarray[$x]['feldx'],
                  'CNT_CMTS' => $cnt_cmt
               ));

          $x++;

         if(!isset($cnt_alb[$x])){
$template->assign_block_vars('zeile.bild', array(
'ABBRUCH' => '<!-- Abbruch -->'
));
break;
}
        else {
        $template->assign_block_vars('zeile.bild', array(
'ABBRUCH' => '<!-- ok, zählt hoch -->'
));
}

        }

}



}


so ?

hat zum ergebnis, das im array selber 6 bilder statt der 3 vorhandenen geladen werden (print_r) und ausgegeben wird nur ein bild zweimal

was habe ich falsch gemacht ?

Verfasst: 10.08.2005 16:16
von shwepsi
bitte strukturier das mal ein wenig (also einrücken und so)
das ist nämlich leicht undurchsichtig... mich wundert gerade das scheinbar alles in der while schleife abläuft, das ist falsch....
da sollen nur die Werte in arrays gespeichert werden.

Die Ausgabe selber ist AUSSERhalb der While Schleife
gesteuert durch die for's...

Verfasst: 16.08.2005 12:51
von d23
so, sorry, ich habs total verpennt, scheinbar funktioniert die mail benachrichtigung hier nicht so wie sie sollte ;)

Code: Alles auswählen

<?php
//Benötigte Dateien und Variablen von phpBB
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

$start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0;
$gal_id = ( isset($HTTP_GET_VARS['gal_id']) ) ? intval($HTTP_GET_VARS['gal_id']) : 0;

//Session auslesen und Benutzer-Informationen laden
$userdata = session_pagestart($user_ip, PAGE_GALLERY);
init_userprefs($userdata);
$page_title = 'Gallery';
 include($phpbb_root_path . 'includes/page_header.'.$phpEx);

$template->set_filenames(array(
    'gallery_album' => 'gallery_album.tpl',
));



/*
if ( $userdata['session_logged_in'] )
{
    // Code, wenn ein Benutzer angemeldet ist
}
else
{
    // Code, wenn kein Benutzer angemeldet ist
}

// User die zugriff haben: es sind gruppen_ids, gruppennamen und user_ids  erlaubt wobei bei den gruppen namen und ids ein g am anfang angehängt werden muss.
$allowed_u = array();
$allowed_u[] = 'g3'; //gruppe

$access_allowed = false;
if( in_array($userdata['user_id'],$allowed_u))
{
        $access_allowed = true;
}

else
{
        $sql = "SELECT g.group_id, g.group_name
                FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
                WHERE ug.user_id = '" . $userdata['user_id'] . "'
                        AND g.group_id = ug.group_id";
        if ( !($result = $db->sql_query($sql)) )
        {
                message_die(GENERAL_ERROR, 'Could not get user group.', '', __LINE__, __FILE__, $sql);
        }
        $access_allowed = false;
        while( list($group_id, $group_name) = $db->sql_fetchrow($result) )
        {
                if( in_array('g' . $group_id[group_id],$allowed_u ))
                {
                         $access_allowed = true;
                         break;
                }
                if( in_array('g' . $group_name[group_name],$allowed_u))
                {
                         $access_allowed = true;
                         break;
                }
        }
        if( !$access_allowed )
        {
                message_die(GENERAL_MESSAGE, 'Sie haben keinen Zugriff auf diese Seite.');
        }
}

*/


$bildarray = array();


$alb_sql = 'SELECT * FROM `gallery_pix` WHERE `album_id` = ' . $gal_id . ' ORDER BY `id` ASC LIMIT ' . $start . ', 24';
if(!$alb_result = $db->sql_query($alb_sql)) {
        message_die(GENERAL_ERROR, 'Fehler beim Auslesen der Album-Informationen', '', __LINE__, __FILE__, $alb_sql);
}

while($alb_row = $db->sql_fetchrow($alb_result))

{           /* beginn while */



$cnt_alb = mysql_query("SELECT * FROM `gallery_pix` WHERE `album_id` = '" . $alb_row['album_id'] . "'");
$cnt_alb = mysql_num_rows($cnt_alb);

$cnt_cmt = mysql_query("SELECT * FROM `gallery_comments` WHERE `pic_id` = '" . $alb_row['id'] . "'");
$cnt_cmt = mysql_num_rows($cnt_cmt);

$akt_ptid = $alb_row['id'];

$albpl_sql = mysql_query('SELECT * FROM `gallery_albums` WHERE `id` = ' . $gal_id);
$gal_ord = mysql_fetch_row($albpl_sql);

$rd_datum = $gal_ord['3'];

$day = date("w", $rd_datum);
$days = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$date = date("j", $rd_datum);
$month = date("n", $rd_datum);

$months = array(1=>"Januar", 2=>"Februar", 3=>"März", 4=>"April", 5=>"Mai", 6=>"Juni", 7=>"Juli", 8=>"August", 9=>"September", 10=>"Oktober", 11=>"November", 12=>"Dezember");

$year = date("Y", $rd_datum);
$clc_datum = $days[$day] . ", " . $date . ". " . $months[$month] . "   " . $year;


$template->assign_vars(array(
                'ALBID' => $gal_ord['0'],
                'ALBTITLE' => $gal_ord['1'],
                'ALBAUTHOR' => $gal_ord['2'],
                'ALBADD_DATE' => $clc_datum
                 ));



$bildarray[]['index'] = $alb_row['id'];
$x = count($bildarray) - 1;
$bildarray[$x]['feldx'] = "<a href=gallery_pic.php?pic_id=" . $akt_ptid . "><img src=\"gallery/" . $alb_row['ordner'] . "/_thm/" . $alb_row['dateiname'] . "\"></a><br>";


$zeilen = count($cnt_alb);

$end = $x + 4;

for ($x = 1; $x <= $zeilen; $x++)
{       /* start for1 */
        $template->assign_block_vars('zeile', array(
        ));

        $start = $x;

        for ($y = $start; $y <= $end; $y++)
        {                     /* start for2 */
              $template->assign_block_vars('zeile.bild', array(
                  'THMIMG' => $bildarray[$x]['feldx'],
                  'CNT_CMTS' => $cnt_cmt
               ));

          $x++;

           if(!isset($cnt_alb[$x]))
           {
           $template->assign_block_vars('zeile.bild', array('ABBRUCH' => '<!-- Abbruch -->'));
           break;
           }

           else
           {
           $template->assign_block_vars('zeile.bild', array('ABBRUCH' => '<!-- ok, zählt hoch -->'));
           }

        }                    /* ende for2 */

}        /* ende for1 */



}        /* ende der while schleife */


/* start pagination, keine schleife mehr offen  */

$board_config['topics_per_page'] = 24;

if ( $board_config['topics_per_page'] > 10 )
{
        $sql = "SELECT count(*) AS total
                FROM gallery_albums";
        $result = $db->sql_query($sql);

                if ( $total = $db->sql_fetchrow($result) )
        {
                $total_members = $total['total'];

                $pagination = generate_pagination("gallery_dir.$phpEx?gal_id=" . $gal_id . "", $total_members, $board_config['topics_per_page'], $start). '&nbsp;';
        }
        $db->sql_freeresult($result);
}
else
{
        $pagination = '&nbsp;';
        $total_members = 24;
}

$template->assign_vars(array(
        'PAGINATION' => $pagination,
        'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / $board_config['topics_per_page'] ) + 1 ), ceil( $total_members / $board_config['topics_per_page'] )),

        'L_GOTO_PAGE' => $lang['Goto_page'])
);

/* end pagination */

$template->pparse('gallery_album');

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>
der code ist jetzt ein bißchen mehr strukturiert, ich habe auch durch kommentare kenntlich gemacht, von wo bis wo eine schleife geht.

Verfasst: 16.08.2005 15:30
von shwepsi
suche:

Code: Alles auswählen

while($alb_row = $db->sql_fetchrow($alb_result)) 

{
einfügen, davor:

Code: Alles auswählen

$x = 0;
suche:

Code: Alles auswählen

$cnt_alb = mysql_num_rows($cnt_alb);
ersetze:

Code: Alles auswählen

$cnt_alb[$x] = mysql_num_rows($cnt_alb);
suche:

Code: Alles auswählen

$cnt_cmt = mysql_num_rows($cnt_cmt);
ersetze:

Code: Alles auswählen

$cnt_cmt[$x] = mysql_num_rows($cnt_cmt);
suche:

Code: Alles auswählen

$akt_ptid = $alb_row['id'];
ersetze:

Code: Alles auswählen

$akt_ptid = $alb_row['id'];
Versuch und alternativänderung hat geschrieben:!!Versuch!!suche:

Code: Alles auswählen

$day = date("w", $rd_datum); 
$days = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"); 
$date = date("j", $rd_datum); 
$month = date("n", $rd_datum); 

$months = array(1=>"Januar", 2=>"Februar", 3=>"März", 4=>"April", 5=>"Mai", 6=>"Juni", 7=>"Juli", 8=>"August", 9=>"September", 10=>"Oktober", 11=>"November", 12=>"Dezember"); 

$year = date("Y", $rd_datum); 
$clc_datum = $days[$day] . ", " . $date . ". " . $months[$month] . "   " . $year;
!!probiere!!, ersetze:

Code: Alles auswählen

$clc_datum[$x] = date('l, j. F Y', $rd_datum);
$alb_id[$x] = $gal_ord['0'];
$alb_title[$x] = $gal_ord['1'];
$alb_author = $gal_ord['2'];
Wenn Versuch gescheitert, und nur dann (sieht man erst nach allen codechanges!!
suche:

Code: Alles auswählen

$clc_datum = $days[$day] . ", " . $date . ". " . $months[$month] . "   " . $year;
ersetze

Code: Alles auswählen

$clc_datum[$x] = $days[$day] . ", " . $date . ". " . $months[$month] . "   " . $year;
$alb_id[$x] = $gal_ord['0'];
$alb_title[$x] = $gal_ord['1'];
$alb_author = $gal_ord['2'];
Das muss wieder immer gemacht werden !!!
lösche:

Code: Alles auswählen

$template->assign_vars(array( 
                'ALBID' => $gal_ord['0'], 
                'ALBTITLE' => $gal_ord['1'], 
                'ALBAUTHOR' => $gal_ord['2'], 
                'ALBADD_DATE' => $clc_datum 
                 )); 
suche:

Code: Alles auswählen

$zeilen = count($cnt_alb);
....
}        /* ende for1 */ 
verschiebe nach

Code: Alles auswählen

}        /* ende der while schleife */
suche:

Code: Alles auswählen

$start = $x; 
füge danach ein:

Code: Alles auswählen

$end = $x + 4;
suche:

Code: Alles auswählen

$template->assign_block_vars('zeile.bild', array(
füge ein, danach:

Code: Alles auswählen

                'ALBID' => $alb_id[$x],
                'ALTITLE' => $alb_title[$x],
                'ALAUTHOR' => $alb_author[$x],
                'ALBADD_DATE' => $clc_datum[$x],

Soo, das sollte reichen... falls noch was schiefläuft sag einfach bescheid

Verfasst: 16.08.2005 15:58
von d23

Code: Alles auswählen

$cnt_alb = mysql_query("SELECT * FROM `gallery_pix` WHERE `album_id` = '" . $alb_row['album_id'] . "'");
$cnt_alb[$x] = mysql_num_rows($cnt_alb);

$cnt_cmt = mysql_query("SELECT * FROM `gallery_comments` WHERE `pic_id` = '" . $alb_row['id'] . "'");
$cnt_cmt[$x] = mysql_num_rows($cnt_cmt);
die beiden verursachen einen fehler:

Code: Alles auswählen

Warning: Cannot use a scalar value as an array in gallery_album.php on line 93

Warning: Cannot use a scalar value as an array in gallery_album.php on line 96

Warning: Cannot use a scalar value as an array in gallery_album.php on line 93

Warning: Cannot use a scalar value as an array in gallery_album.php on line 96

Warning: Cannot use a scalar value as an array in gallery_album.php on line 93

Warning: Cannot use a scalar value as an array in gallery_album.php on line 96
Gallery
ansonsten sieht es aus, als würde es gehen. bekomm zwar im moment nur ein bild ausgegeben, liegt aber wohl am fehler

Verfasst: 16.08.2005 20:41
von shwepsi
dann benenne sie in andere Variablen, also die mit dem [$x], das $x muss aber auch dort wieder vorkommen
$cnt_alb[$x] zum Beispiel in $pic_alb[$x]
und
$cnt_cmt[$x] in $pic_cmt[$x]

ACHTUNG!! das muss dann auch bei dem $template->assign_block_vars geändert werden

Verfasst: 18.08.2005 15:30
von d23
hab das dementsprechend geändert, komme aber nicht wirklich weiter -.-

ich habe dir per pn mal einen demolink geschickt, zum einsatzort des scriptes.

ansonsten hier mal wieder der aktuelle source:

Code: Alles auswählen

<?php
//Benötigte Dateien und Variablen von phpBB
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

$start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0;
$gal_id = ( isset($HTTP_GET_VARS['gal_id']) ) ? intval($HTTP_GET_VARS['gal_id']) : 0;

//Session auslesen und Benutzer-Informationen laden
$userdata = session_pagestart($user_ip, PAGE_GALLERY);
init_userprefs($userdata);
$page_title = 'Gallery';
 include($phpbb_root_path . 'includes/page_header.'.$phpEx);

$template->set_filenames(array(
    'gallery_album' => 'gallery_album.tpl',
));



/*
if ( $userdata['session_logged_in'] )
{
    // Code, wenn ein Benutzer angemeldet ist
}
else
{
    // Code, wenn kein Benutzer angemeldet ist
}

// User die zugriff haben: es sind gruppen_ids, gruppennamen und user_ids  erlaubt wobei bei den gruppen namen und ids ein g am anfang angehängt werden muss.
$allowed_u = array();
$allowed_u[] = 'g3'; //gruppe

$access_allowed = false;
if( in_array($userdata['user_id'],$allowed_u))
{
        $access_allowed = true;
}

else
{
        $sql = "SELECT g.group_id, g.group_name
                FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
                WHERE ug.user_id = '" . $userdata['user_id'] . "'
                        AND g.group_id = ug.group_id";
        if ( !($result = $db->sql_query($sql)) )
        {
                message_die(GENERAL_ERROR, 'Could not get user group.', '', __LINE__, __FILE__, $sql);
        }
        $access_allowed = false;
        while( list($group_id, $group_name) = $db->sql_fetchrow($result) )
        {
                if( in_array('g' . $group_id[group_id],$allowed_u ))
                {
                         $access_allowed = true;
                         break;
                }
                if( in_array('g' . $group_name[group_name],$allowed_u))
                {
                         $access_allowed = true;
                         break;
                }
        }
        if( !$access_allowed )
        {
                message_die(GENERAL_MESSAGE, 'Sie haben keinen Zugriff auf diese Seite.');
        }
}

*/


$bildarray = array();


$alb_sql = 'SELECT * FROM `gallery_pix` WHERE `album_id` = ' . $gal_id . ' ORDER BY `id` ASC LIMIT ' . $start . ', 24';
if(!$alb_result = $db->sql_query($alb_sql)) {
        message_die(GENERAL_ERROR, 'Fehler beim Auslesen der Album-Informationen', '', __LINE__, __FILE__, $alb_sql);
}

$x = 0;

while($alb_row = $db->sql_fetchrow($alb_result))

{           /* beginn while */



$cnt_alb = mysql_query("SELECT * FROM `gallery_pix` WHERE `album_id` = '" . $alb_row['album_id'] . "'");
$pic_alb[$x] = mysql_num_rows($cnt_alb);

$cnt_cmt = mysql_query("SELECT * FROM `gallery_comments` WHERE `pic_id` = '" . $alb_row['id'] . "'");
$pic_cmt[$x] = mysql_num_rows($cnt_cmt);

$akt_ptid[$x] = $alb_row['id'];

$albpl_sql = mysql_query('SELECT * FROM `gallery_albums` WHERE `id` = ' . $gal_id);
$gal_ord = mysql_fetch_row($albpl_sql);

$rd_datum = $gal_ord['3'];

$clc_datum = date('l, j. F Y', $rd_datum);
$alb_id = $gal_ord['0'];
$alb_title = $gal_ord['1'];
$alb_author = $gal_ord['2'];



$bildarray[]['index'] = $alb_row['id'];
$x = count($bildarray) - 1;
$bildarray[$x]['feldx'] = "<a href=gallery_pic.php?pic_id=" . $akt_ptid[$x] . "><img src=\"gallery/" . $alb_row['ordner'] . "/_thm/" . $alb_row['dateiname'] . "\"></a><br>";



}        /* ende der while schleife */

$zeilen = count($pic_alb);

$end = $x + 4;

for ($x = 1; $x <= $zeilen; $x++)
{       /* start for1 */
        $template->assign_block_vars('zeile', array(
        ));

        $start = $x;
        $end = $x + 4;

        for ($y = $start; $y <= $end; $y++)
        {                     /* start for2 */
              $template->assign_block_vars('zeile.bild', array(
                  'THMIMG' => $bildarray[$x]['feldx'],
                  'ALBID' => $alb_id,
                'ALTITLE' => $alb_title,
                'ALAUTHOR' => $alb_author,
                'ALBADD_DATE' => $clc_datum,
                  'CNT_CMTS' => $pic_cmt[$x]
               ));

          $x++;

           if(!isset($pic_alb[$x]))
           {
           $template->assign_block_vars('zeile.bild', array('ABBRUCH' => '<!-- Abbruch -->'));
           break;
           }

           else
           {
           $template->assign_block_vars('zeile.bild', array('ABBRUCH' => '<!-- ok, zählt hoch -->'));
           }

        }                    /* ende for2 */

}        /* ende for 1 */

/* start pagination, keine schleife mehr offen  */

$board_config['topics_per_page'] = 24;

if ( $board_config['topics_per_page'] > 10 )
{
        $sql = "SELECT count(*) AS total
                FROM gallery_albums";
        $result = $db->sql_query($sql);

                if ( $total = $db->sql_fetchrow($result) )
        {
                $total_members = $total['total'];

                $pagination = generate_pagination("gallery_dir.$phpEx?gal_id=" . $gal_id . "", $total_members, $board_config['topics_per_page'], $start). '&nbsp;';
        }
        $db->sql_freeresult($result);
}
else
{
        $pagination = '&nbsp;';
        $total_members = 24;
}

$template->assign_vars(array(
        'PAGINATION' => $pagination,
        'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / $board_config['topics_per_page'] ) + 1 ), ceil( $total_members / $board_config['topics_per_page'] )),

        'L_GOTO_PAGE' => $lang['Goto_page'])
);

/* end pagination */

$template->pparse('gallery_album');

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>
lg