php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #31 (permalink)  
Alt 31-12-2006, 00:37
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1. du fragst immer noch auf gleichheit mit einem falschen parameter ab.

2. die anzahl der leerzeichen ist direkt proportional zu $tiefe. bei dir ist sie konstant - das ist falsch.

3. wo steht denn bitte dein else? das einrücken solltest du besser machen. aber eigentlich brauchst du kein else in diesem fall.

4. du willst doch den kategorienamen ausgegeben haben? was machst du stattdessen? warum ist da kein zeilenumbruch o.ä. dahinter?
Mit Zitat antworten
  #32 (permalink)  
Alt 31-12-2006, 00:52
Tomcat Chriss
 Registrierter Benutzer
Links : Onlinestatus : Tomcat Chriss ist offline
Registriert seit: Aug 2003
Ort: Hamm, NRW
Beiträge: 235
Tomcat Chriss ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Okay, also dürfte es ja dann nur noch der andere eigentlich auch logischere Wert sein:

PHP-Code:
function output($cat_arr$pid$tiefe)
{
    foreach (
$cat_arr as $value)
    {
        
print_r($value);
        if (
$value["pid"] == $pid)
        {
        for (
$leer == $tiefe$leer 1$leer++)
        {
            print 
" ";
         } 
        print 
$value.<br>;
    }
    else
    {
        print 
$value;
  }

Wie gehts jetzt weiter?
Mit Zitat antworten
  #33 (permalink)  
Alt 31-12-2006, 00:55
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Wie gehts jetzt weiter?
du liest noch mal frage 3 und 4 vollständig.

zu 2: http://de2.php.net/manual/en/control-structures.for.php musst du lesen.
Mit Zitat antworten
  #34 (permalink)  
Alt 31-12-2006, 01:13
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

for ($leer == $tiefe, $leer = 1; $leer++)

Was soll'n das werden?
EDIT:
den Syntaxfehler 3 Zeilen später kompensiert es jedenfalls nicht

Geändert von onemorenerd (31-12-2006 um 01:15 Uhr)
Mit Zitat antworten
  #35 (permalink)  
Alt 31-12-2006, 01:13
Tomcat Chriss
 Registrierter Benutzer
Links : Onlinestatus : Tomcat Chriss ist offline
Registriert seit: Aug 2003
Ort: Hamm, NRW
Beiträge: 235
Tomcat Chriss ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sorry, bin schon ganz quer im Kopf. Denke so ist die for-Schleife richtig:

PHP-Code:
function output($cat_arr$pid$tiefe)
{
    foreach (
$cat_arr as $value)
    {
        
print_r($value);
        if (
$value["pid"] == $pid)
        {
        for (
$leer 1$leer == $tiefe$leer++)
        {
            print 
" ";
        } 
       print 
$value["kategorie"].<br>;
    }

Sorry, vom vielen Hin- und Herkopieren ist mir das else verrutscht. Bin ich jetzt auf dem richtigen Weg?

Muss doch dann noch die Funktion aufrufen und den Wert $pid und $tiefe mitgeben. Wie und woch mache ich das?

Gibt es für das ganze nicht eine einfachere Lösung?

Was hat es mit dem Tag <pre> auf sich?
Mit Zitat antworten
  #36 (permalink)  
Alt 31-12-2006, 01:18
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

das sieht doch schon besser aus, wenngleich die abbruchbedingung für die for-schleife falsch ist. es wird nur iteriert, wenn der wert true ist.

du beginnst mit 1 und tiefe ist (z.b.) 9. also wird die schleife kein einziges mal ausgeführt.

was du brauchst, ist "kleiner/gleich".


des weiteren stimmen die anführtungszeichen und geschweifte klammern nicht. korrigiere es.


Zitat:
Muss doch dann noch die Funktion aufrufen und den Wert $pid und $tiefe mitgeben. Wie und woch mache ich das?
genau wie im pseudo-code beschrieben.
Zitat:
Was hat es mit dem Tag <pre> auf sich?
Mit Zitat antworten
  #37 (permalink)  
Alt 31-12-2006, 01:19
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Da fehlt immer noch ein ', das dürfte dir mit Parse Error um die Ohren gehauen werden.

Ob der Code richtig ist, kann ich nicht sagen. Hab nicht gelesen, was du eigentlich machen willst. Erzählst du es nochmal oder wartest du, bis ich alles gelesen habe?
Mit Zitat antworten
  #38 (permalink)  
Alt 31-12-2006, 01:35
Tomcat Chriss
 Registrierter Benutzer
Links : Onlinestatus : Tomcat Chriss ist offline
Registriert seit: Aug 2003
Ort: Hamm, NRW
Beiträge: 235
Tomcat Chriss ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
function output($cat_arr$pid$tiefe)
{
    foreach (
$cat_arr as $value)
    {
        
print_r($value);
        if (
$value["pid"] == $pid)
        {
        for (
$leer 1$leer <= $tiefe$leer++)
        {
            print 
" ";
        } 
       print 
$value["kategorie"].'<br>';
     }
   }

Okay, soweit müsste die Funktion nun richtig sein.

@onemorenerd: Eigentlich habe ich vor, ein Pulldown mit Kategorien zu befüllen. Allerdings gibt es auch Unterkategorien, die unterhalb der Oberkategrorien eingerückt ausgegeben werden sollen. penizillin lässt mich ganz schön zappeln, aber wenn das Endergebnis stimmt, dann hat es auch etwas gebracht.

Werde das komplette Script, wenn es fertig ist, hier dann nochmal posten.

@penizillin:So sollte doch dann das Script aussehen, oder? Habe es noch nicht getestet. Wollte erstmal nachfragen, ob okay.

PHP-Code:
    $arr_count 0;
    
$cat_arr = array();
    
    
$sql "SELECT * FROM kategorien ORDER BY id, pid;";
    
$result mysql_query($sql) or die(mysql_error());
    while (
$row mysql_fetch_array($resultMYSQL_ASSOC))
    {
    
       
$id $row["id"];
       
$pid $row["pid"];
       
$kategorie $row["kategorie"];
    
       
$cat_arr[$arr_count] = array();
       
$cat_arr[$arr_count]['id'] = $id;
       
$cat_arr[$arr_count]['pid'] = $pid;
       
$cat_arr[$arr_count]['kategorie'] = $kategorie;
    
       
$arr_count $arr_count 1;
       
output($cat_arr,$pid,$tiefe+1);
    
    }
}

    
function 
output($cat_arr$pid$tiefe)
{
    foreach (
$cat_arr as $value)
    {
        
print_r($value);
        if (
$value["pid"] == $pid)
        {
        for (
$leer 1$leer <= $tiefe$leer++)
        {
            print 
" ";
        } 
       print 
$value["kategorie"].'<br>';
     }
   }

Du hattest auch noch einen Inital-Aufruf angegegeben. Wo muss ich den denn dann aufrufen? Wenn ich ihn über die while-Schleife setzet habe ich ja noch kein $cat_arr.
Mit Zitat antworten
  #39 (permalink)  
Alt 31-12-2006, 01:39
Tomcat Chriss
 Registrierter Benutzer
Links : Onlinestatus : Tomcat Chriss ist offline
Registriert seit: Aug 2003
Ort: Hamm, NRW
Beiträge: 235
Tomcat Chriss ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Habe das Script gerade mal aufgerufen. Bekomme folgende Ausgabe:

Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) STAMM
Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Handbücher
Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Handbücher
Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) Demo-Versionen
Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) GDATA
Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) GDATA
Array ( [id] => 5 [pid] => 3 [kategorie] => Microsoft ) Microsoft
Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) Array ( [id] => 5 [pid] => 3 [kategorie] => Microsoft ) Array ( [id] => 6 [pid] => 2 [kategorie] => PDF ) PDF

So kann das ja auch nicht richtig sein.
Mit Zitat antworten
  #40 (permalink)  
Alt 31-12-2006, 01:40
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Wenn ich ihn über die while-Schleife setzet habe ich ja noch kein $cat_arr.
drüber ist zu früh. drin ist sinnlos. was bleibt denn da noch übrig?

übrigens sind die parameter für den initialaufruf konstant, s. pseudocode.

und print_r kannst du rausnehmen.
Mit Zitat antworten
  #41 (permalink)  
Alt 31-12-2006, 01:49
Tomcat Chriss
 Registrierter Benutzer
Links : Onlinestatus : Tomcat Chriss ist offline
Registriert seit: Aug 2003
Ort: Hamm, NRW
Beiträge: 235
Tomcat Chriss ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Okay, hiermit sieht es schon besser aus:

PHP-Code:
    $arr_count 0;
    
$cat_arr = array();
    
    
$sql "SELECT * FROM kategorien ORDER BY id, pid;";
    
$result mysql_query($sql) or die(mysql_error());
    while (
$row mysql_fetch_array($resultMYSQL_ASSOC))
    {
    
       
$id $row["id"];
       
$pid $row["pid"];
       
$kategorie $row["kategorie"];
    
       
$cat_arr[$arr_count] = array();
       
$cat_arr[$arr_count]['id'] = $id;
       
$cat_arr[$arr_count]['pid'] = $pid;
       
$cat_arr[$arr_count]['kategorie'] = $kategorie;
    
       
$arr_count $arr_count 1;
       
output($cat_arr,$pid,$tiefe+1);
    
    }
    
    
output($cat_arr,0,0);
    
}

    
function 
output($cat_arr$pid$tiefe)
{
    foreach (
$cat_arr as $value)
    {
        if (
$value["pid"] == $pid)
        {
        for (
$leer 1$leer <= $tiefe$leer++)
        {
            print 
" ";
        } 
       print 
$value["kategorie"].'<br>';
    }
  }

Die letzte geschweifte Klammer über dem Funktions-Aufruf gehört noch zur Schließung der darübergehenden Funktion, deswegen da okay.

Die Ausgabe sieht nun wie folgt aus:

STAMM
Handbücher
Handbücher
Demo-Versionen
GDATA
GDATA
Microsoft
PDF
STAMM

Eigentlich müsste sie aber folgendermaßen aussehen. Irgendwas funktioneirt immer noch nicht:

STAMM
---Handbücher
------PDF
---Demo-Versionen
------GDATA
------Microsoft
Mit Zitat antworten
  #42 (permalink)  
Alt 31-12-2006, 01:52
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1. ich sehe immer noch output() in der while schleife.
2. dann ersetze dein leerzeichen durch das minus-zeichen.
Mit Zitat antworten
  #43 (permalink)  
Alt 31-12-2006, 02:12
Tomcat Chriss
 Registrierter Benutzer
Links : Onlinestatus : Tomcat Chriss ist offline
Registriert seit: Aug 2003
Ort: Hamm, NRW
Beiträge: 235
Tomcat Chriss ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nein, die Bindestriche habe ich nur hingesetzt, um es zu verdeutlichen. Will das schon mit Leerzeichen haben. Es stimmt die Ausgabe einfach nicht. Handbücher habe ich z.B. nur einmal in der DB. hier die Daten meiner DB:

id pid kategorie beschreibung
1 0 STAMM Werden keine Downloads abgelegt
2 1 Handbücher
3 1 Demo-Versionen
4 3 GDATA GDATA Demoversionen
5 3 Microsoft Microsoft Demoversionen
6 2 PDF PDF-Handbücher

In deinem Pseudo-Code kam das output() aber auch in der while-Schleife vor, oder?

Der Aufruf müsste also folgendermaßen sein:
output($cat_arr,0,3)

Was muss denn noch an die Stelle der 0? Die PID, oder? Die muss doch dann auch noch irgendwo definiert werden oder hochggezählt werden.
Mit Zitat antworten
  #44 (permalink)  
Alt 31-12-2006, 02:16
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Nein, die Bindestriche habe ich nur hingesetzt, um es zu verdeutlichen. Will das schon mit Leerzeichen haben. Es stimmt die Ausgabe einfach nicht.
im browser gibt es keine multiplen leerzeichen. dafür muss man dann "& nbsp ;" (ohne leerzeichen, als html-entity) nehmen.

Zitat:
In deinem Pseudo-Code kam das output() aber auch in der while-Schleife vor, oder?
entschuldige - natürlich.

nur mit anderen parametern.
Zitat:
Was muss denn noch an die Stelle der 0? Die PID, oder?
für den ersten aufruf? da muss die root-id rein, die ist i.d.r. 0 (bei dir auch).
Mit Zitat antworten
  #45 (permalink)  
Alt 31-12-2006, 02:25
Tomcat Chriss
 Registrierter Benutzer
Links : Onlinestatus : Tomcat Chriss ist offline
Registriert seit: Aug 2003
Ort: Hamm, NRW
Beiträge: 235
Tomcat Chriss ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich denke, ich bin jetzt der Lösung schon ziemlich nahe. Der Code sieht nun folgendermaßen aus:

PHP-Code:
    $arr_count 0;
    
$cat_arr = array();
    
    
$sql "SELECT * FROM kategorien ORDER BY id, pid;";
    
$result mysql_query($sql) or die(mysql_error());
    while (
$row mysql_fetch_array($resultMYSQL_ASSOC))
    {
    
       
$id $row["id"];
       
$pid $row["pid"];
       
$kategorie $row["kategorie"];
    
       
$cat_arr[$arr_count] = array();
       
$cat_arr[$arr_count]['id'] = $id;
       
$cat_arr[$arr_count]['pid'] = $pid;
       
$cat_arr[$arr_count]['kategorie'] = $kategorie;
    
       
$arr_count $arr_count 1;
       
//output($cat_arr,$pid,$tiefe+1);
    
    
}
    
    
output($cat_arr,0,3);
    
}
    
function 
output($cat_arr$pid$tiefe)
{
    foreach (
$cat_arr as $value)
    {
        if (
$value["pid"] == $pid)
        {
        for (
$leer 1$leer <= $tiefe$leer++)
        {
            print 
" ";
        } 
       print 
$value["kategorie"].'<br>';
    }
  }

Nun kann ich über den output()-Aufruf steuern, welche Unterkategroien aufgerufen werden sollen. Nehme ich anstelle der 0 die 1, dann bekomme ich Handbücher und Demo-Versionen. Mit der 2 erhalte ich PDF und mit der 3, GDATA und Microsoft.

Nun müsste ich doch eigentlich nochmal eine while-Schleife mit den Werten Result der Mysql-Abfrage machen und darüber $pid in output() ansteuern, das ganze in ein <select> reinbasteln und vor der Ausgabe dieser Unterkategorien noch die Überkategorien in <optionen> packen, oder?

Fehlt noch was?
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

jqPlot jQuery Plotting Plugin ansehen jqPlot jQuery Plotting Plugin

jqPlot ist ein plotting und charting plugin für das jQuery Javascript framework

06.11.2019 Berni | Kategorie: AJAX/ Framework
WYSIWYG Editor

WYSIWYG Editor zum Einbinden in PHP Scripte.

21.10.2019 Stephan_1972 | Kategorie: PHP/ WYSIWYG
Modelmanager

Der Modelmanager ist ein Webtool für Fotografen, kann als komplette Homepage oder als Webtool installiert werden.

10.10.2019 Stephan_1972 | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:49 Uhr.