php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.06.2008, 19:24  
Benutzer
 
Registriert seit: 18.02.2006
Beiträge: 32
aherzog
Standard If-Abfrage mit mehrdimensionalen Arrays fehlerhaft

Hallo.

in einer Adressverwaltung erstelle ich den Ausdruck von Adressetiketten.
Dabei arbeite ich mit mehrdimensionalen Arrays.
Dank dem Forum funktioniert das erstellen der Arrays und abfragen "fast" perfekt.

Erklährung der Abfrage:
Auf der Seite soll eine Druckvorlage erstellt werden mit der dann die Klebe-Adressetiketten bedruckt werden.
Im ersten Teil werden alle Adressen (Mitglieder und Vorstand) in ein mehrdimensionales Array ($adresse) geschrieben.
Danach werden nur die Vorstandmitglieder in ein anderes Array ($vorstand) gespeichert.
Nun folgt die Ausgabe in einer Tabelle (jetzt noch sichtbar gemacht)
Dabei wird mit einen Zähler ($mitgl) jeweils bei jeder Adresse die Zeile erhöt.
Mit einer If - Anweisung soll kontrolliert werden ob das Array leer ist und dann soll gewechselt werden auf die Ausgabe der Vorstandsmitglieder.
Das alles funktioniert auch, aber nach der letzten Adresse ( Total 10) wird ein Adressfeld leer ausgegeben, und das bringe ich nicht weg...


In der Datenbank sind 10 Mitglieder-Adressen gespeichert (Array 0-9)
Ich habe mit dem print-r Befehl kontrolliert ob ein Array leer ist. Das ist nicht der Fall.

Warum wird mir am Schluss der Mitglieder-Adressen ein leeres Feld erstellt bevor Vorstand-Adressen ausgegeben werden??

Hier noch der Code:
Etwas verkürzt (Die If-Anweisung ist immer gleich)
PHP-Code:
    <?php
    
// Alle Adressen auslesen In Array $adresse[ZEILE][SPALTE]
    
$resultat "SELECT * FROM fvw WHERE druck=1 ORDER BY name,vorname DESC";
    
$query mysql_query($resultat);
    
$adresse = array();
    while (
$x=mysql_fetch_array($query))$adresse[]=$x;
    
// Nur Vorstandmitglieder auslesen in Array $vorstand [ZEILE][SPALTE]
    
$resultat2 "SELECT * FROM fvw WHERE druck=1 AND vorstand=1 ORDER BY name,vorname DESC";
    
$query2 mysql_query($resultat2);
    
$vorstand = array();
    while (
$x=mysql_fetch_array($query2))$vorstand[]=$x;
    
$vor=0;
    
$mitgl=0;
    
?>
        <table border="1" cellspacing="2" cellpadding="0">
            <tr>
                <td align="left" valign="top" width="190"></td>
                <td align="left" valign="top" width="190"></td>
                <td align="left" valign="top" width="190"></td>
            </tr>
            <tr height="100">
                <td align="left" valign="top" width="190" height="100"><?php
                
if ($adresse[$mitgl][1]=="")
                {
                echo 
$vorstand[$vor][1]."(V".$vor.")
"
.$vorstand[$vor][3]." ".$vorstand[$vor][2]."
"
.$vorstand[$vor][4]." ".$vorstand[$vor][5]."

[b]"
.$vorstand[$vor][6]." ".$vorstand[$vor][7]."[/b]";
                }
                else
                {
                
$mitgl=0;echo $adresse[$mitgl][1]."(M".$mitgl.")
"
.$adresse[$mitgl][3]." ".$adresse[$mitgl][2]."
"
.$adresse[$mitgl][4]." ".$adresse[$mitgl][5]."

[b]"
.$adresse[$mitgl][6]." ".$adresse[$mitgl][7]."[/b]";
                }
                
?></td>
                <td align="left" valign="top" width="190" height="100"><?php
                
if ($adresse[$mitgl][1]=="")
                {
                echo 
$vorstand[$vor][1]."(V".$vor.")
"
.$vorstand[$vor][3]." ".$vorstand[$vor][2]."
"
.$vorstand[$vor][4]." ".$vorstand[$vor][5]."

[b]"
.$vorstand[$vor][6]." ".$vorstand[$vor][7]."[/b]";
                }
                else
                {
                
$mitgl=$mitgl+1;echo $adresse[$mitgl][1]."(M".$mitgl.")
"
.$adresse[$mitgl][3]." ".$adresse[$mitgl][2]."
"
.$adresse[$mitgl][4]." ".$adresse[$mitgl][5]."

[b]"
.$adresse[$mitgl][6]." ".$adresse[$mitgl][7]."[/b]";
                }
                
?></td>
                <td align="left" valign="top" width="190" height="100"><?php
                
if ($adresse[$mitgl][1]=="")
                {
                echo 
$vorstand[$vor][1]."(V".$vor.")
"
.$vorstand[$vor][3]." ".$vorstand[$vor][2]."
"
.$vorstand[$vor][4]." ".$vorstand[$vor][5]."

[b]"
.$vorstand[$vor][6]." ".$vorstand[$vor][7]."[/b]";
                }
                else
                {
                
$mitgl=$mitgl+1;echo $adresse[$mitgl][1]."(M".$mitgl.")
"
.$adresse[$mitgl][3]." ".$adresse[$mitgl][2]."
"
.$adresse[$mitgl][4]." ".$adresse[$mitgl][5]."

[b]"
.$adresse[$mitgl][6]." ".$adresse[$mitgl][7]."[/b]";
                }
                
?></td>
            </tr>
            <tr height="100">
                <td align="left" valign="top" width="190" height="100"><?php
                
if ($adresse[$mitgl][1]=="")
                {
                echo 
$vorstand[$vor][1]."(V".$vor.")
"
.$vorstand[$vor][3]." ".$vorstand[$vor][2]."
"
.$vorstand[$vor][4]." ".$vorstand[$vor][5]."

[b]"
.$vorstand[$vor][6]." ".$vorstand[$vor][7]."[/b]";
                }
                else
                {
                
$mitgl=$mitgl+1;echo $adresse[$mitgl][1]."(M".$mitgl.")
"
.$adresse[$mitgl][3]." ".$adresse[$mitgl][2]."
"
.$adresse[$mitgl][4]." ".$adresse[$mitgl][5]."

[b]"
.$adresse[$mitgl][6]." ".$adresse[$mitgl][7]."[/b]";
                }
                
?></td>
                <td align="left" valign="top" width="190" height="100"><?php
                
if ($adresse[$mitgl][1]=="")
                {
                echo 
$vorstand[$vor][1]."(V".$vor.")
"
.$vorstand[$vor][3]." ".$vorstand[$vor][2]."
"
.$vorstand[$vor][4]." ".$vorstand[$vor][5]."

[b]"
.$vorstand[$vor][6]." ".$vorstand[$vor][7]."[/b]";
                }
                else
                {
                
$mitgl=$mitgl+1;echo $adresse[$mitgl][1]."(M".$mitgl.")
"
.$adresse[$mitgl][3]." ".$adresse[$mitgl][2]."
"
.$adresse[$mitgl][4]." ".$adresse[$mitgl][5]."

[b]"
.$adresse[$mitgl][6]." ".$adresse[$mitgl][7]."[/b]";
                }
                
?></td>
                <td align="left" valign="top" width="190" height="100"><?php
                
if ($adresse[$mitgl][1]=="")
                {
                echo 
$vorstand[$vor][1]."(V".$vor.")
"
.$vorstand[$vor][3]." ".$vorstand[$vor][2]."
"
.$vorstand[$vor][4]." ".$vorstand[$vor][5]."

[b]"
.$vorstand[$vor][6]." ".$vorstand[$vor][7]."[/b]";
                }
                else
                {
                
$mitgl=$mitgl+1;echo $adresse[$mitgl][1]."(M".$mitgl.")
"
.$adresse[$mitgl][3]." ".$adresse[$mitgl][2]."
"
.$adresse[$mitgl][4]." ".$adresse[$mitgl][5]."

[b]"
.$adresse[$mitgl][6]." ".$adresse[$mitgl][7]."[/b]";
                }
                
?></td>
            </tr>
        </table>
Vielen Dank für die Hilfe..
Gruss Andy
aherzog ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.06.2008, 19:59  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Wieso gibst du denn jede Zeile einzeln mit HTML aus? Wieso bastelst du dir da nicht eine Schleife draus? Ich verstehe den Sinn nicht dahinter alles per Hand einzutragen!

Außerdem wäre es doch viel einfacher wenn du EIN einziges Array hast, dort erst die Mitglieder einspeicherst und dahinter die Vorstände. Und dann kannst du ganz einfach per Schleife das Array durchgehen und dann abfragen ob es sich um ein Mitglied handelt oder um einen Vorstand. Und dann kannst du eben spezifische Sachen dazu anzeigen lassen.
Flor1an ist offline  
Alt 07.06.2008, 20:17  
Benutzer
 
Registriert seit: 18.02.2006
Beiträge: 32
aherzog
Standard

Hmm...
Ich arbeite doch mit Array's

Von Hand schreibe ich nicht's rein.

Die Arrays werden ja auch mit PHP ausgelesen
aherzog ist offline  
Alt 07.06.2008, 20:24  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Aber du hast doch die komplette Tabelle per Hand geschrieben, also jede Spalte und jede Zeile bzw. jedes Feld in der Tabelle. Das kannst du ebenfalls dynamisch generieren lassen!
Flor1an ist offline  
Alt 07.06.2008, 20:33  
Benutzer
 
Registriert seit: 18.02.2006
Beiträge: 32
aherzog
Standard

Ja richtig.
Das habe ich ja nur 1x geschrieben und dann kopiert.
Vieleicht ist es so etwas komplizierter, da ich aber das erste mal mit Arrays arbeite habe ich so ein BSP. auf dem Internet gefunden und danach das Layout aufgebaut. Aber damit habe ich kein Problem. Ist ja nur eine reine Kopierarbeit...

Ich habs absichtlich in jeder Spalte einzeln reingeschrieben damit ich die tabelle einfacher dem Etiketten anpassen kann.
aherzog ist offline  
Alt 07.06.2008, 21:06  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Wenn du es dynamisch machst ist es wesentlich einfacher die Tabelle anzupassen, weil du dann genau ein Feld bearbeitest und alle anderen werden genau so. Kopieren, da geht immer irgendwas schief! Denn wenn du nur eine einzige Änderung machen musst, musst du es in JEDER Kopie machen! Außerdem ist es nicht der Sinn und Zweck. Für sowas sind ja Schleifen da.

Bau dein System ein bisschen um dann ist es auch einfacher einen Fehler zu finden.
Flor1an ist offline  
Alt 07.06.2008, 21:21  
Benutzer
 
Registriert seit: 18.02.2006
Beiträge: 32
aherzog
Standard

hmmm...da bin ich noch nicht soweit das ich das auch wirklich kann....

wie schon erwähnt ist das mein erster gehversuch mit arrays..

wenn du mir ev ein paar tips geben könntest wäre ich dir dankbar.
aherzog ist offline  
Alt 07.06.2008, 21:34  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Naja wenn du deine Daten in einem Array hast, kannst du das Array mit foreach durchgehen.

PHP-Code:
<?php
$adressen 
= array();
// hier die Mitglieder ins Array laden
while($row mysql_fetch_assoc($query)) $adressen[] = $row;
// hier die Vorstände ins Array laden
while($row mysql_fetch_assoc($query)) $adressen[] = $row;

/* hier der kopf der Tabelle also
<table ... >
<tr>
*/

// jetzt das Array durchgehen und ausgeben
$i 0// Zähler damit nach dem 3-ten Eintrag eine neue Zeile in der Tabelle kommt
foreach($adressen as $row) {

    echo 
'<td width="190" height="100">';

    
// Daten des Mitglieds/Vorstands ausgeben
    
if ($row['vorstand'] == 1) echo 'Vorstand'; else echo 'Mitglied';
    echo 
$row['name'].'
'
.$row['adresse'].'
'
// usw. halt die Daten

    
echo '</td>';

    
// hier eine neue Zeile einfügen wenn der 3te Eintrag in der Tabelle ist
   
if ($i 2) echo '</tr><tr>';

    
$i++;
}

/* hier kommt das Ende der Tabelle hin
</tr>
</table> */
So würde es im groben funktionieren. Nur damit du inetwa weißt wie so etwas aufgebaut wird.
Flor1an ist offline  
Alt 07.06.2008, 21:44  
Benutzer
 
Registriert seit: 18.02.2006
Beiträge: 32
aherzog
Standard

wow... soooo viel tips habe ich gerade nicht erwartet..
das nehme ich sehr gerne an und probiere es aus...

Eine Frage habe ich noch..
Wenn ich das ganze richtig verstanden habe wird die Tabelle solang fortgesetzt bis alle adressen durch sind....
Ist das soweit richtig??

Da meine Adress-Vorlagen ja max. 7 Adressen in der Höhe hat brauche ich ja eine begrenzung..
Aber das schaffe ich noch mit einem Zähler..
aherzog ist offline  
Alt 07.06.2008, 23:29  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Genau du kannst das mit nem Zähler machen.

PHP-Code:
<?php
$i 
0;
foreach(
$adressen as $row) {

    if (
$i 3*7) break;


    
// alles wie gehabt
}
Ein kleiner Fehler war bei mir noch drin. Es heißt nicht
if ($i % 2)
sondern
if ($i % 2 == 0)
Flor1an ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage von einer Abfrage Datenbanken 5 27.01.2011 23:31
Größe des Arrays oder der MySQL-Abfrage in Bytes? Gumfuzi PHP Tipps 2006 10 03.10.2006 16:48
mysql abfrage in Schleife havok PHP Tipps 2006 6 09.05.2006 08:39
in_array() funktioniert nicht bei mehrdimensionalen Arrays? PHP Tipps 2005-2 6 12.10.2005 13:54
array_search in Mehrdimensionalen Arrays. solitaer PHP Tipps 2005-2 5 23.09.2005 14:24
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
Abfrage über values eines Arrays seven-12 PHP Tipps 2005-2 1 14.07.2005 15:26
Abfrage in array? BartTheDevil89 Datenbanken 5 10.05.2005 14:21
[Erledigt] IF() abfrage in variable packen PHP Tipps 2005 14 01.04.2005 17:23
Abfrage von Char-Feldern Datenbanken 9 04.02.2005 14:06
[Erledigt] SQL Abfrage funzt nicht Datenbanken 2 04.02.2005 11:09
[Erledigt] Mysql Abfrage Problem! PHP-Fortgeschrittene 5 27.11.2004 10:22
Abfrage funktioniert zwar, aber nicht korrekt Datenbanken 2 16.08.2004 09:10
2 arrays in abhängigkeit ??? PHP Tipps 2004 2 11.08.2004 21:19
Abfrage aus DB noch mal ausgeben und Abfrage aus mehrern Tab PHP Tipps 2004 4 12.07.2004 15:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
if im mehrdimensionalen array, http://www.php.de/php-tipps-2008/45997-if-abfrage-mit-mehrdimensionalen-arrays-fehlerhaft.html, mysql_fetch_array erster eintrag verschwunden nach if abfrage, mehrdimensionale arrays if schleife, php mysql abfrageergebnis in array kopieren, mehrdimensionales array abfragem php, if abfrage mehrdimensionales array, abfrage mehrdimensionales array php, php alle elemente eines mehrdimensionalen array löschen, php array if bedingung zwei spalten, abfrage von mehrdimensionalen arrays, php abfrag array leer, php array in if abfragen ausgeben, if abfrage array php, php array if-bedingung, mehrdimensionales array php abfragen of leer, mehrdimensionales array auslesen abragen ob es leer ist, php array zum etikettendruck benutzen, php. if-abfrage aus array, php in array mit if abfrage

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:24 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.