Steven Binder: Enum Werte auslesen

Hallo,

ich hab mal wieder eine Frage.

Wahrscheinlich ist sie ganz leicht aber ich kriegs irgendwie nicht gebacken aus einer "enum" Spalte die Werte auszulesen die enum zu lassen würde...

z.b.

enum('ja','nein')

ich hätte gerne jetzt ein array:

$enum[0] // mit dem Wert "ja"
und
$enum[1] // mit dem Wert "nein"

Ich bekomms einfach nicht hin.... und aus dem phpMyAdmin was rauszufinden wie die das gemacht haben ist glaub ich noch schwerer ;)...

Also thx schon mal ;))

Gruß Steven

  1. Hallo,

    Wahrscheinlich ist sie ganz leicht aber ich kriegs irgendwie nicht gebacken aus einer "enum" Spalte die Werte auszulesen die enum zu lassen würde...

    hier hab ich jetzt erstmal lange gebraucht um rauszufinden, dass Du den Datenbanktyp enum meinst...ich kann ja nicht wissen, dass es den in PHP gar nicht gibt (ich hab zuviel C-Syntax im Kopf)

    z.b.

    enum('ja','nein')

    ich hätte gerne jetzt ein array:

    $enum[0] // mit dem Wert "ja"
    und
    $enum[1] // mit dem Wert "nein"

    Du kannst nicht einfach das array an den Datentyp dranhängen

    Ich bekomms einfach nicht hin.... und aus dem phpMyAdmin was rauszufinden wie die das gemacht haben ist glaub ich noch schwerer ;)...

    warum, poste mal was die gemacht haben, ich denke ein assoziatives Array
    wie zum Beispiel $erg["namedesfeldes"][1], wobei $erg deine Variable ist, der du den fetch_array -Befehl zuweist
    wenns das nicht ist, poste bitte was in phpMyAdmin steht, okay

    ciao romy

    Also thx schon mal ;))

    Gruß Steven

    1. Hi Romy!

      Einmal mit Milch bitte! Aber, ich trink ihn auch schwarz zur Not. ;-)

      Bis denne...
      MarkX.

      1. Hi Romy!

        Guten Morgen Mark (ähh oder so)

        Einmal mit Milch bitte! Aber, ich trink ihn auch schwarz zur Not. ;-)

        okay Milch ist zwar gerade gefroren aber ich schaff das noch bis nachher *g*
        wenn nicht gibt es eben Softeis mit Sahne
        ist das ein Angebot?

        Bis denne...

        Du Henne

        MarkX.

        romx

        *SNCR*

        1. okay Milch ist zwar gerade gefroren aber ich schaff das noch bis nachher *g*
          wenn nicht gibt es eben Softeis mit Sahne
          ist das ein Angebot?

          Oh ja! Ich mag Vanille! Oh muß jetzt mal schnell weiter arbeiten!

          Bis denne..
          MarkX.

          1. Hey

            thx für die schnelle antwort und sorry wenn ich mich nicht ganz deutlich ausgedrückt habe...

            also wenn noch nen Cafe da ist nehm ich auch noch einen ;o)) ..

            ne im ernst im phpMyAdmin steht folgendes:

            }
            else if (strstr($row_table_def['True_Type'], 'enum')) {
            $enum        = str_replace('enum(', '', $row_table_def['Type']);
            $enum        = ereg_replace('\)$', '', $enum);
            $enum        = explode('','', substr($enum, 1, -1));
            $enum_cnt    = count($enum);
                    ?>
                    <td bgcolor="<?php echo $bgcolor; ?>">
                        <input type="hidden" name="fields[<?php echo urlencode($field); ?>]" value="$enum$" tabindex="<?php echo $i+1; ?>" />
                    <?php
                    echo "\n" . '            ' . $backup_field;

            // show dropdown or radio depend on length
                    if (strlen($row_table_def['Type']) > 20) {
                        echo "\n";
                        ?>
                        <select name="field_<?php echo md5($field); ?>[]" <?php echo $chg_evt_handler; ?>="return unNullify('<?php echo urlencode($field); ?>')" tabindex="<?php echo $i+1; ?>">
                            <option value=""></option>
                        <?php
                        echo "\n";

            for ($j = 0; $j < $enum_cnt; $j++) {
                            // Removes automatic MySQL escape format
                            $enum_atom = str_replace('''', ''', str_replace('\\', '\', $enum[$j]));
                            echo '                ';
                            echo '<option value="' . urlencode($enum_atom) . '"';
                            if ($data == $enum_atom
                                || ($data == '' && (!isset($primary_key) || $row_table_def['Null'] != 'YES')
                                    && isset($row_table_def['Default']) && $enum_atom == $row_table_def['Default'])) {
                                echo ' selected="selected"';
                            }
                            echo '>' . htmlspecialchars($enum_atom) . '</option>' . "\n";
                        } // end for

            ?>
                        </select>
                        <?php
                    } // end if
                    else {
                        echo "\n";
                        for ($j = 0; $j < $enum_cnt; $j++) {
                            // Removes automatic MySQL escape format
                            $enum_atom = str_replace('''', ''', str_replace('\\', '\', $enum[$j]));
                            echo '            ';
                            echo '<input type="radio" name="field_' . md5($field) . '[]" value="' . urlencode($enum_atom) . '" id="radio_field_' . md5($field) . '_' . urlencode($enum_atom) . '" onclick="if (typeof(document.forms['insertForm'].elements['fields_null[' . urlencode($field) . ']']) != 'undefined') {document.forms['insertForm'].elements['fields_null[' . urlencode($field) .']'].checked = false}"';
                            if ($data == $enum_atom
                                || ($data == '' && (!isset($primary_key) || $row_table_def['Null'] != 'YES')
                                    && isset($row_table_def['Default']) && $enum_atom == $row_table_def['Default'])) {
                                echo ' checked="checked"';
                            }
                            echo 'tabindex="' . $i . '" />' . "\n";
                            echo '            <label for="radio_field_' . md5($field) . '_' . urlencode($enum_atom) . '">' . htmlspecialchars($enum_atom) . '</label>' . "\n";
                        } // end for

            lach ... des einzige was ich dabei kapiere ist das wenn es kurz genug ist macht er radio button ansonsten pull down menue .. und das wars auch wieder ...

            des mit dem array war auch nur so gemeint das ich zum schluß eben nur dieses "ja" und "nein" haben möchte bzw brauche ;o)

            So .. ich bedanke mich gleich für die nächste Antwort ;)

            Steven

            1. Hey

              thx für die schnelle antwort und sorry wenn ich mich nicht ganz deutlich ausgedrückt habe...

              also wenn noch nen Cafe da ist nehm ich auch noch einen ;o)) ..

              okay, klar

              ne im ernst im phpMyAdmin steht folgendes:

              }
              else if (strstr($row_table_def['True_Type'], 'enum')) {

              // wenn eine Reihe vom typ enum existiert

              $enum        = str_replace('enum(', '', $row_table_def['Type']);

              //ersetze Kommata mit Leerzeichen

              $enum        = ereg_replace('\)$', '', $enum);

              //ersetze  alle \ ) $ mit Leerzeichen

              $enum        = explode('','', substr($enum, 1, -1));

              // trenne bei leerzeichen die worte und weise sie nacheinander $enum zu

              $enum_cnt    = count($enum);

              zähle wie viele es sind

              so ich glaube an der Stelle kannst Du es schon für dich nutzen
              nämlich mit $enum[0] und $enum[1] , der Rest war ja nicht relevant oder
              zählen musst Du naürlich auch nicht
              hoffe das klappt jetzt, wenn nicht rückmelden mit Fehlermeldung okay
              bis denne

              lach ... des einzige was ich dabei kapiere ist das wenn es kurz genug ist macht er radio button ansonsten pull down menue .. und das wars auch wieder ...

              des mit dem array war auch nur so gemeint das ich zum schluß eben nur dieses "ja" und "nein" haben möchte bzw brauche ;o)

              So .. ich bedanke mich gleich für die nächste Antwort ;)

              Steven

              ciao romy

              --
              DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
              1. Hey Danke ..

                so hab ich mir das ungefähr gedacht .. nur bekomm ich nen fehler:
                Parse error: parse error in /home/schoellkopf/public_html/webstruktur/admin/insert.php on line 93

                ( Zeile 93 ist die bei mir gekennzeichnte (93))

                case enum:

                $sql = "SHOW FIELDS FROM Gbook";
                 $result = mysql_query($sql,$conn);
                 $row_table_def   = mysql_fetch_array($result);

                (93) strstr($row_table_def['True_Type'], 'enum')) {
                 $enum  = str_replace('enum(', '', $row_table_def['Type']);
                 $enum  = ereg_replace('\)$', '', $enum);
                 $enum  = explode('','', substr($enum, 1, -1));
                 $enum_cnt  = count($enum);

                echo "<select name="$value">";

                while($enum_cnt <= $i){

                echo "<option value="$enum[0]">$enum[0]</option>";
                      $i++;
                    }

                echo "</select>";
                break;

                hmm ich hab des aufjedenfall mal so abgeändert... und bestimmt was kaput gemacht....

                würd mich auf eine Antwort von euch freuen...

                Gruß Steven

                1. Hey Danke ..

                  so hab ich mir das ungefähr gedacht .. nur bekomm ich nen fehler:
                  Parse error: parse error in /home/schoellkopf/public_html/webstruktur/admin/insert.php on line 93

                  ( Zeile 93 ist die bei mir gekennzeichnte (93))

                  case enum:

                  $sql = "SHOW FIELDS FROM Gbook";
                  $result = mysql_query($sql,$conn);
                  $row_table_def   = mysql_fetch_array($result);

                  (93) if(strstr($row_table_def['True_Type'], 'enum')) {

                  vielleicht lässt du die zeile mit der if-abfrage weg, da du ja weisst, das du ein enum-feld hast, ansonsten fehlt hier das if( und unter deinem ganzen script die schliessende }

                  $enum  = str_replace('enum(', '', $row_table_def['Type']);
                  $enum  = ereg_replace('\)$', '', $enum);
                  $enum  = explode('','', substr($enum, 1, -1));
                  $enum_cnt  = count($enum);

                  echo "<select name="$value">";

                  was machst du hier, woher nimmst du $i
                  sollte es nicht heissen
                  $i=0;
                  while($i < $enum_cnt) {

                  while($enum_cnt <= $i){

                  echo "<option value="$enum[0]">$enum[0]</option>";
                        $i++;
                      }

                  echo "</select>";
                  break;

                  hmm ich hab des aufjedenfall mal so abgeändert... und bestimmt was kaput gemacht....

                  würd mich auf eine Antwort von euch freuen...

                  Gruß Steven

                  --
                  DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
                  1. Hey Romy,

                    danke erst mal und respekt von meiner seite ;))  ...

                    ich hab das jetzt so angepasst und funktioniert auch super SOLANGE nur eine "enum" spalte in der Tabelle ist.

                    ansonsten listet er mir jedes mal alle enum werte aus allen spalten auf... ( keine ahnung wie ich des anderst erklären soll *srry*)

                    case enum:

                    $sql_show = "SHOW FIELDS FROM $value";
                    $result_show = mysql_query($sql_show,$conn);

                    while($row_table_def = mysql_fetch_array($result_show)){

                    $enum = explode('(',$row_table_def['Type']);

                    if($enum[0] == 'enum'){

                    $enum  = str_replace('enum(', '', $row_table_def['Type']);
                      $enum  = ereg_replace('\)$', '', $enum);               $enum  = explode('','', substr($enum, 1, -1));
                      $enum_cnt = count($enum); //zähle wie viele es sind

                    echo "<select name="$auswahl">\n";

                    $j = 0; // wie oft er die Schleife durchlaufen soll
                      $k = 0; // Damit er array[1] als zweites nimmt und nicht nur [0]

                    while($j < $enum_cnt){

                    if($elem == $enum[$k]){ $selected  = "selected"; } else { $selected = ""; }

                    echo "<option $selected value="$enum[$k]">$enum[$k]</option>\n";
                       $j++;
                       $k++;
                      }

                    echo "</select>\n";
                     }
                    }
                    break;

                    Gibtz da ne möglichkeit das er das nur einmal tut und danach aufhört.. ich hab da schon alles probiert mit if usw .. aber bin wohl  zu blöd für ...

                    Gruß Steven

                    1. Hey Romy,

                      danke erst mal und respekt von meiner seite ;))  ...

                      ich hab das jetzt so angepasst und funktioniert auch super SOLANGE nur eine "enum" spalte in der Tabelle ist.

                      ansonsten listet er mir jedes mal alle enum werte aus allen spalten auf... ( keine ahnung wie ich des anderst erklären soll *srry*)

                      versteh schon, ist ja klar, schätzungsweise haben aber deine Spalten trotzdem sie vom typ enum sicherlich noch einen Namen
                      also wenn eine spalte vom type enum gefunden ist, soll er dann noch schauen ob der spaltenname gleich dem ist, den Du wünschst und nur von dem auslesen

                      es muss also nicht if($enum="enum") heissen sondern
                      $name = explode('(',$row_table_def['name']),
                      while($enum[$i] = "enum" &&  $name[$i]== "deinName") {
                       //deine anweisungen...
                       $i++;
                      }

                      oder so ähnlich, wenn ich jetzt das Kriterium nachdem du die "enum" spalten aussuchst missverstanden habe, sag nochmal was
                      oder sollst du nur die erste auftretende enum-Spalte beherzigen?
                      dann müsstest du einfach die whileschleife unterbrechen sobald er was gefunden hat
                      bin mir noch nicht ganz sicher was du meinst??
                      hilf mir

                      Gruß Steven

                      --
                      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
                      1. Hey,

                        ne mit überprüfen des Namens ises blöde weil ich möchte eine total dynamische Adminconsole ( cms ) machen ( like phpMyAdmin) und dan ises blöd den namen abzufragen...

                        ich müste eher irgendwie dem sagen nach dem du die erste enumspalte gemacht hast gehe weiter und lass beim nächste mal die erste enumspalte aus ...

                        Thx schonmal....

                        Gruß Steven...

                        P.S. ich spendier auch 2 Kaffee dafür ;)

                        1. Hey,

                          ich müste eher irgendwie dem sagen nach dem du die erste enumspalte gemacht hast gehe weiter und lass beim nächste mal die erste enumspalte aus ...

                          bin noch nicht wirklich vorwärts gekommen, beantworte mir mal noch diese Frage und dann hab ichs glaub ich bald...*g*
                          case "enum":

                          $sql_show = "SHOW FIELDS FROM $value";
                          $result_show = mysql_query($sql_show,$conn);

                          while($row_table_def = mysql_fetch_array($result_show)){
                          //das heisst, solange es spaltennamen gibt? was genau steht in dieser schleife?
                          //die ist der Schlüssel

                          $enum = explode('(',$row_table_def['Type']);

                          if($enum == "enum"){

                          $enum  = str_replace('enum(', '', $row_table_def['Type']);
                             $enum  = ereg_replace('\)$', '', $enum);
                             $enum  = explode('','', substr($enum, 1, -1));
                             $enum_cnt = count($enum); //zähle wie viele es sind

                          echo "<select name="$auswahl">\n";

                          $j = 0; // wie oft er die Schleife durchlaufen soll
                             $k = 0; // Damit er array[1] als zweites nimmt und nicht nur [0]

                          while($j < $enum_cnt){

                          if($elem == $enum[$k]){ $selected  = "selected"; } else { $selected = ""; }
                              echo "<option $selected value="$enum[$k]">$enum[$k]</option>\n";
                              $j++;
                              $k++;
                             }

                          echo "</select>\n";
                            }
                           }
                           break;

                          Gruß Steven...

                          P.S. ich spendier auch 2 Kaffee dafür ;)

                          darauf komme ich zurück *g*

                          --
                          DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
                          1. while($row_table_def = mysql_fetch_array($result_show)){
                            //das heisst, solange es spaltennamen gibt? was genau steht in dieser schleife?
                            //die ist der Schlüssel

                            hmm versteh jetzt deine Frage nicht ganz... in der Schleife stehen die Befehle oder meinst du jetzt das ergebnis ?? ..

                            zum schluß soll das einfach so aussehen:

                            Name = 1.Pulldown menue ( mit den werten eben aus der enum spalte )
                            Beruf = 2.Pull down Menue ( mit den werten eben aus der enum spalte )

                            aber er gibt mir folgendes aus:

                            Name = 1.Pulldown menue UND 2.Pulldownmenue
                            Beruf = 1.Pulldown menue UND 2.Pulldownmenue

                            Ich hoffe das jetzt deutlich genug erklärt zu haben ;)) ...

                            P.S. ich spendier auch 2 Kaffee dafür ;)
                            darauf komme ich zurück *g*

                            Ok gerne woher bisten ??

                            Gruß Steven

                            1. while($row_table_def = mysql_fetch_array($result_show)){
                              //das heisst, solange es spaltennamen gibt? was genau steht in dieser schleife?
                              //die ist der Schlüssel

                              hmm versteh jetzt deine Frage nicht ganz... in der Schleife stehen die Befehle oder meinst du jetzt das ergebnis ?? ..

                              ich nehme immer postgresql, (was ja eigentlich ählich ist) deswegen musst du ir einige sachen erklären, zB,ob diese schleife nur einmal oder mehrmals durchlaufen wird?was steht alles in dem array $row_table_def

                              vielleicht gehts ja auch schon so, musst mal schauen

                              case enum:

                              $sql_show = "SHOW FIELDS FROM $value";
                               $result_show = mysql_query($sql_show,$conn);

                              while($row_table_def = mysql_fetch_array($result_show)){

                              $enum = explode('(',$row_table_def['Type']);

                              $i = 0;
                              ^^^^^^^^^^^
                                while(($enum == "enum") && ($i<=1)) {
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

                              $enum  = str_replace('enum(', '', $row_table_def['Type']);
                                 $enum  = ereg_replace('\)$', '', $enum);
                                 $enum  = explode('','', substr($enum, 1, -1));
                                 $enum_cnt = count($enum); //zähle wie viele es sind

                              echo "<select name="$auswahl">\n";

                              $j = 0; // wie oft er die Schleife durchlaufen soll
                                 $k = 0; // Damit er array[1] als zweites nimmt und nicht nur [0]

                              while($j < $enum_cnt){

                              if($elem == $enum[$k]){ $selected  = "selected"; } else { $selected = ""; }

                              echo "<option $selected value="$enum[$k]">$enum[$k]</option>\n";
                                  $j++;
                                  $k++;
                                 }
                                  echo "</select>\n";

                              $i++;
                              ^^^^^^^^^^^^^
                                }
                               }
                               break;

                              Ich hoffe das jetzt deutlich genug erklärt zu haben ;)) ...

                              naja *g*, ich weiss was du willst..aber wo kommt zB $auswahl her?

                              P.S. ich spendier auch 2 Kaffee dafür ;)
                              darauf komme ich zurück *g*

                              Ok gerne woher bisten ??

                              Leipzsch, siehe Signatur L.an der P.

                              Gruß Steven

                              --
                              DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    2. Hallo,

      ich mach mal hier weiter
      ciao und Tschüss
      bis morgen ich geh erstmal in Rente
      winke winke
      romy

      --
      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
  2. Hi,

    Wahrscheinlich ist sie ganz leicht aber ich kriegs irgendwie nicht gebacken aus einer "enum" Spalte die Werte auszulesen die enum zu lassen würde...

    z.b.

    enum('ja','nein')

    Du willst also nicht Daten aus der Tabelle, sondern Informationen über die Tabelle.

    Bei MySQL bekommt man die mit dem SHOW-Kommando.

    z.B.:

    SHOW COLUMNS FROM deineTabelle FROM deineDB;

    Da solltest Du mal gucken, wie die enums abgespeichert sind - ich hab keine Spalte in meinen 2 DBs, die enums benutzt...

    Dann halt entsprechend auslesen und in ein Array speichern.

    cu,
    Andreas