php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.11.2010, 12:45  
Neuer Benutzer
 
Registriert seit: 30.06.2010
Beiträge: 25
PHP-Kenntnisse:
Anfänger
Nicole ist zur Zeit noch ein unbeschriebenes Blatt
Standard Formular: Ein select mit optgroup

Hallo!

Ich steh grad wieder auf dem Schlauch und find auch nichts... Darum frag ich nun schnell mal - sorry, wenn ich nicht richtig gesucht habe >.<

Situation
Ich habe eine Buchliste mit den Titeln (genannt "Reihen"). Diese sollen nun in einer Select-Box ausgegeben werden. Hierfür habe ich nun diesen Code:
PHP-Code:
<?php
//Datenausgabe
$datensatzausgabe_sql_befehl "SELECT
                    `t_reihe`.`reihe_id`,
                    `t_reihe`.`reihe_name`,
                    `t_mangaliste`.`liste_id`,
                    `t_mangaliste`.`id_reihe`,
                    `t_mangaliste`.`liste_nummer`,
                    `t_mangaliste`.`liste_titel`,
                    `t_mangaliste`.`id_verlag`,
                    `t_mangaliste`.`liste_inhaltsangabe`,
                    `t_mangaliste`.`liste_bild`,
                    `t_mangaliste`.`liste_datum`
               FROM `t_mangaliste`
               Inner Join `t_reihe` ON `t_reihe`.`reihe_id` = `t_mangaliste`.`id_reihe`
               ORDER BY `t_reihe`.`reihe_name`,
                           `t_mangaliste`.`liste_nummer`
               "
;
$datensatzausgabe_ergebnis mysql_query($datensatzausgabe_sql_befehl);


//Ausgeben            
    
<?php
    
echo('<select name="Reihe" id="reihe">');
    while (
$dropdownmanga_datensatz mysql_fetch_array($dropdownmanga_ergebnis))
        {
        echo(
'<option value="' $dropdownmanga_datensatz["reihe_id"] . '">' $dropdownmanga_datensatz["reihe_name"] . '</option>');
        }
    echo(
'</select"><br />');
    
?>

}
?>
Problem
Ich bekomme auch eine Ausgabe wie ihr sie im Anhang sehen könnt. Jedoch möchte ich das ganze etwas übersichtlicher haben und eine Unterteilung wie auf dem zweiten Bild haben.
Dort habe ich mit Optgroups gearbeitet:
Code:
    <select name="Autor">
        <option value="" selected="selected">Autor wählen</option>
        <optgroup label="A-Autoren">
            <option value="aki">Aki, Katsu</option>
            <option value="aoki">Aoki, Ai</option>
            <option value="ayukawa">Ayukawa, Mio</option>
        </optgroup>
</select>
Frage
Wie bearbeite ich meinen PHP-Code nun so, dass er mir die Ausgabe in den Anfangsbuchstaben unterteilt?

Ich danke euch schoneinmal für die Hilfe!

Grüße
Nicole
Miniaturansicht angehängter Grafiken
formular-ein-select-mit-optgroup-select_php.jpg  formular-ein-select-mit-optgroup-select_optgroup.jpg  

Geändert von Nicole (09.11.2010 um 12:49 Uhr). Grund: Anhänge vergessen
Nicole ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 09.11.2010, 12:57  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Gruppenbruch
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline  
Alt 12.11.2010, 16:20  
Neuer Benutzer
 
Registriert seit: 30.06.2010
Beiträge: 25
PHP-Kenntnisse:
Anfänger
Nicole ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für den Link, Chriz, aber irgendwie komme ich damit noch nicht so richtig klar...

Ich habe ja nun kein einfaches Array, wie in dem Beispiel... Da gibt es ja - ich glaub es sind 10 - 10 Datenfelder für einen Datensatz und ich weiß nun nicht, wie ich es mit dem Feld aus der Autor-Tabelle vergleichen kann...

Außerdem versteh ich in dem Beispiel nicht, wie das Script nun NUR den ersten Buchstaben her bekommt... oO"

Wäre super, wenn mir da noch jemand helfen könnte...

Grüße
Nicole
Nicole ist offline  
Alt 12.11.2010, 16:26  
Erfahrener Benutzer
 
Registriert seit: 19.05.2008
Beiträge: 612
PHP-Kenntnisse:
Fortgeschritten
Young Jedi befindet sich auf einem aufstrebenden Ast
Standard

Speicher in deiner while-Schleife doch immer einfach den ersten Buchstabe des Autors. Damit kannst du überprüfen ob der Buchstabe des aktuellen Autors mit dem des letzten Autors, der in der Schleife durchlaufen wurde, übereinstimmt. Wenn das nicht der Fall ist, dann füge eine neue opt-group hinzu (mit den Anfangsbuchstaben des neuen Autors)
__________________
http://tippsgegenlangeweile.de

Young Jedi ist offline  
Alt 12.11.2010, 16:41  
Erfahrener Benutzer
 
Benutzerbild von Nullraff
 
Registriert seit: 27.10.2010
Beiträge: 183
PHP-Kenntnisse:
Fortgeschritten
Nullraff befindet sich auf einem aufstrebenden Ast
Standard

Das link von Chriz ist doch perfekt für deine Anforderung. Einfach durch OPTGROUP und SELECT austauschen und fertig.
Zitat:
NUR den ersten Buchstaben her
$entry[0] liefert dir den 1. Buchstaben von $entry.
__________________
Kaum macht man's richtig, schon geht's
Nullraff ist offline  
Alt 12.11.2010, 18:49  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Wir sind doch ein Entwicklerforum - oder doch nur nen Haufen Nerds der die Arbeit fremder erledigt? Ich bitte dich Beiträge, die wir verlinken auch zu lesen und versuchen zu verstehen. Ein Grundverständnis Programmierung und PHP muss halt da sein ^^ Ansonsten bist du entgegen landläufiger Meinung falsch hier!

PHP-Code:
<?php
$groups 
= array();
while (
$dropdownmanga_datensatz mysql_fetch_array($dropdownmanga_ergebnis))
{
  
$label $dropdownmanga_datensatz["reihe_name"];
  
$firstCharacter $label[0]; // ersten Buchstaben des Bezeichners nehmen, so ist nunmal die Syntax
  
if (!array_key_exists($firstCharacter$groups)) { // du kannst auch mit isset() testen
    
$groups[$firstCharacter] = array(); // für den gefundenen Buchstaben einen Eintrag in $groups anlegen
  
}
  
$id $dropdownmanga_datensatz["reihe_id"]; // die ID für die option
  
$groups[$firstCharacter][$id] = $label// Zuweisung
}
echo(
'<select name="Reihe" id="reihe">');
foreach (
$groups as $groupKey => $groupValues) { // Gruppen nach Buchstaben durchlaufen
  
echo '<optgroup label="' $groupKey '">';
  foreach (
$groupValues as $id => $label) {
    echo(
'<option value="' $id '">' $label '</option>');
  }
  echo 
'</optgroup>';
}
echo(
'</select">');
?>
Und genau das, wurde genau so, im Artikel beschrieben ("Abbildung einer Zwischenstruktur auf Arrays").

Deine nächste Frage: siehe range('A', 'Z'), array_fill(), array_combine() und array_merge() und ksort().
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline  
Alt 12.11.2010, 23:24  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich finde den Bezeichner im Wikiartikel eigentlich auch ausreichend aussagekräftig:
Zitat:
$character = $entry[0];
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 15.11.2010, 21:21  
Neuer Benutzer
 
Registriert seit: 30.06.2010
Beiträge: 25
PHP-Kenntnisse:
Anfänger
Nicole ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@Chriz
Wir sind hier im PHP-Einsteiger-Bereich. Und wenn ich mit dem Problem ins HTML-Forum ginge, wäre ich da falsch! Das ist schließlich eine PHP-Sache und mit Sicherheit eine Anfängerfrage.
Ich habe nach bestem Wissen und Gewissen nach einer Recherche zu meinem Problem deinen Forenbereich ausgewählt!

Und ich bemühe mich nach Leibeskräften, die Antworten zu verstehen, aber wenn ich sie nicht verstehe, dann wäre es noch dümmer so zu tun, als habe man sie verstanden und das Problem sei gelöst!

Meine Meinung...
Nicole ist offline  
Alt 15.11.2010, 22:37  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo Nicole,
gern geschehen, schön auch mal ein Danke zu hören. Es gibt ja Leute, die lieber übers meckern meckern, anstatt mal zuzuhören. Wie beim Wikiartikel, sehr hilfreich. Ja von oben (Wissensstand) leicht gesagt, aber die Alternative ist Einzelunterricht, Step by Step. Die wenigsten Helfer haben darauf Lust. Weil genau dieses Durchkauen dazu führt "es doch mal verständlich für alle" zu erklären, in einem Wikiartikel - für den sich dann doch wieder niemand interessiert.

Vielleicht drehen wir es um, damit der Wikiartikel entsprechend angepasst werden kann:
Was daran war unverständlich - nur die Ermittlung des ersten Buchstabens? Die Vorgehensweise?

Ich denke wenn die Grundlagen in PHP bekannt sind: Syntax, Schleifen, Funktionsaufrufe, unbekannte Funktionen im Handbuch nachschlagen ... dann sollte das doch mit dem Artikel nachvollziehbar sein ...
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline  
Alt 20.11.2010, 21:59  
Neuer Benutzer
 
Registriert seit: 30.06.2010
Beiträge: 25
PHP-Kenntnisse:
Anfänger
Nicole ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi!

Habe mich nun mal wieder mit dem Thema beschäftigt. Ich will ja nun wirklich keinen Code hier vorgelegt bekommen, aber ich will verstehen, was ich mache, denn mit Copy & Paste kommt man letztendlich ja auch nicht weiter...

Habe mir den Wiki-Code nun nochmal Zeile für Zeile angesehen und mir die ganzen Variabeln mal übersetzt hingeschrieben. Was mir bei dem Eintrag unklar war, ist natürlich schwerer zu sagen, wenn man den nun versteht, aber ich versuchs nochmal:
Zitat:
$last_character = null;
"null"... Ich schreibe immer "" - und wie in den KOmmentaren steht: "last character" heißt ja nun "letzter Buchstabe" und man denkt einfach, da sei der letzte Buchstabe des Wortes gemeint
Zitat:
foreach ($array as $entry) {
warum nun "$array as $entry"? Kann man nicht einfach mit "array" weiter arbeiten ohne eine neue Variabel einzuführen?
Zitat:
echo ' ' . $entry . '<br />';
glaub, das war mir suspekt, weil ich meinte, bei Arrays sollte noch eine Positionsangabe dabei sein... da kam dann die Frage auf "Ich denk entry ist ein Array..."
Zitat:
$last_character = $character;
ist nun total logisch, aber da war irgendwie wohl wieder die Frage "warum ist der letzte Buchstabe entsprechend dem ersten?"

Ich hatte den Code kopiert und wie gesagt nochmals durchgearbeitet...
PHP-Code:
            $array_reihen = array 
          (
          
'Alf' ,
          
'Bibi Blocksberg' ,
          
'Bibo' ,
          
'Biene Maja' ,
          
'Peter Pan' ,
          
'Urmel aus dem Eis' ,
          );
         
        
$letzteranfangsbuchstabe "";
         
        
//Für jedes Array-Element
        
foreach ($array_reihen as $eintraege) {
        
//Anfangsbuchstaben auslesen
        
$anfangsbuchstabe $eintraege[0];
        
//vergleichen, ob ein neuer Buchstabe begonnen wird
        
if ($letzteranfangsbuchstabe != $anfangsbuchstabe)
            {
            
//echo('</optgroup>');
            //echo('<optgroup label="' . $anfangsbuchstabe . '-Reihe">');
            
echo 'Buchstabe: ' $anfangsbuchstabe '<br />';
            }
        echo 
'  ' $eintraege '<br />';
        
//aktuellen Anfangsbuchstaben merken
        
$letzteranfangsbuchstabe $anfangsbuchstabe;
        } 
Funktioniert wie angegeben. Gut. Aber ich habe nun versucht, das in meine Namens-Ausgabe einzuarbeiten:
PHP-Code:
    echo('<select name="reihe" onchange="document.select_reihe.submit()">');
    echo(
'<option value="" selected="selected">Reihe wählen</option>'); 
    
$array_reihen = array();
    
$letzteranfangsbuchstabe "";
            while (
$dropdownmanga_datensatz mysql_fetch_array($dropdownmanga_ergebnis))
                {
                
//Array mit den Reihen-Namen füllen
                
$array_reihen[] = $dropdownmanga_datensatz["reihe_name"];
                
//array_push($array_reihen,'$dropdownmanga_datensatz["reihe_name"]');
                //Für jedes Array-Element
                
foreach ($array_reihen as $eintraege)
                    {
                    
//Anfangsbuchstaben auslesen
                    
$anfangsbuchstabe $eintraege[0];
                    
//vergleichen, ob ein neuer Buchstabe begonnen wird
                    
if ($letzteranfangsbuchstabe != $anfangsbuchstabe)
                        {
                        echo(
'</optgroup><optgroup label="' $anfangsbuchstabe '-Reihe">');
                        }
                    echo(
'<option value="' $dropdownmanga_datensatz["reihe_id"] . '">' $dropdownmanga_datensatz["reihe_name"] . '</option>');
                    
//aktuellen Anfangsbuchstaben merken
                    
$letzteranfangsbuchstabe $anfangsbuchstabe;
                    }
                }
    echo(
'</select>');?> 
Im Datenfeld "reihe_name" sind nun z.B. "100%", "Angel", "Aya" und "Blau". Die Ausgabe ist mit dem Code nun:
1-Reihe
100%
Angel
A-Reihe
Angel
1-Reihe
Aya
A-Reihe
Aya
Aya
1-Reihe
Blau
A-Reihe
Blau
Blau
B-Reihe
Blau
Ich kann dort bisher kein Muster erkennen und verstehe auch nicht, was daran falsch ist...

Klar, eigentlich müsste ich ohne Probleme den Fehler finden, da Chriz ja folgenden Code gepostet hat:
PHP-Code:
$groups = array();
while (
$dropdownmanga_datensatz mysql_fetch_array($dropdownmanga_ergebnis))
{
  
$label $dropdownmanga_datensatz["reihe_name"];
  
$firstCharacter $label[0]; // ersten Buchstaben des Bezeichners nehmen, so ist nunmal die Syntax
  
if (!array_key_exists($firstCharacter$groups)) { // du kannst auch mit isset() testen
    
$groups[$firstCharacter] = array(); // für den gefundenen Buchstaben einen Eintrag in $groups anlegen
  
}
  
$id $dropdownmanga_datensatz["reihe_id"]; // die ID für die option
  
$groups[$firstCharacter][$id] = $label// Zuweisung
}
echo(
'<select name="Reihe" id="reihe">');
foreach (
$groups as $groupKey => $groupValues) { // Gruppen nach Buchstaben durchlaufen
  
echo '<optgroup label="' $groupKey '">';
  foreach (
$groupValues as $id => $label) {
    echo(
'<option value="' $id '">' $label '</option>');
  } 
Da muss ich mich aber noch durchbeißen - das Array groups ist mir grad noch nicht klar und wie array_key_exists arbeitet - und warum die Reihen-ID gebraucht wird und die folgenden foreach-Anweisungen xD

Ich hab noch viel vor...

Grüße
Nicole
Nicole 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
[Erledigt] Intertabellarische Berechnungen, wie? dave303 Datenbanken 13 05.03.2010 11:58
Ausgabe erfolgt nicht Extremefall PHP Tipps 2009 17 17.12.2009 19:51
Brauche Hilfe bei Formular Singular PHP Tipps 2009 8 12.12.2009 22:34
Select WHERE Select J_Jara Datenbanken 4 01.12.2009 20:08
Formular "File Select - Durchsuchen" Button style taurus HTML, Usability und Barrierefreiheit 1 13.11.2009 20:26
[Erledigt] INSERT ... SELECT - nicht alle Spalten aus dem Select benutzen? kip Datenbanken 4 01.09.2009 13:06
werte aus formular select in db speichern ? hups Datenbanken 5 26.05.2009 11:18
[Erledigt] Select * where in (Select ...) Geschwindigkeitsproblem Wolla Datenbanken 14 20.05.2009 15:16
SQL select fehlerhafte Resultate. Ist PHP 64 Bit das Problem? peterw Server, Hosting und Workstations 6 21.04.2009 09:19
[JavaScript] Event Handler in form select - Syntax? winfo_cologne HTML, Usability und Barrierefreiheit 5 29.03.2006 16:47
SELECT Liste aus MySQL verarbeiten jensK PHP Tipps 2006 9 09.02.2006 16:08
[Erledigt] Formular in Formular HTML, Usability und Barrierefreiheit 4 19.10.2005 12:18
select <option> im Formular PHP Tipps 2005-2 4 20.09.2005 22:04
Update Funktion mit Formular Experte gesucht... Datenbanken 2 30.12.2004 12:04
Formular Select Problem PHP Tipps 2004 3 22.08.2004 17:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
optgroup php, php optgroup, select optgroup, select formular, optgroup selected, php select optgroup, select box from array optgroup, optgroup auswählen, select optgroup selected, optgroup select, select optgroup php a, select optgroup array, optgroup, optgroup html, optgroup mit php verarbeiten, optgroup mysql php, html php select optgroup formular, select optgroup php anfangsbuchstaben, html optgroup selected, javascript formular namensausgabe

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:47 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