PHP/MySQL....switch...case - dickes Prob!

stephandziurla

Erfahrenes Mitglied
Hallo! Ich habe mal eine Frage bzgl. die Verwendung von switch...case in PHP.
Ich möchte Inhalte aus einer Datenbank auslesen lassen und diese mittels PHP darstellen. Dabei gibt es verschiedene Möglichkeiten der Darstellung dieser Inhalte, so dass ich mit einem switch...case diese Fallunterscheidung treffen wollte - ganz klassisch also.

Nun zu meinem Problem:
PHP:
$inhalte = mysql_query("SELECT * FROM content WHERE id='".$DieSeite["id"]."' ORDER BY rang ASC");

echo "<hr width='98%'><p><p>";
while ($row2 = mysql_fetch_object($inhalte))
{ 
  switch($row2["modul"])
  {  
    case 'A':
	    ausgabeeins();
	    break;
	    
	  
	  default:
	   {
	    echo "Modul nicht vergeben!\n";
                    echo "Bitte noch einmal versuchen!<p>";
	    break;
	   }
  }
}
echo "</table>";
mysql_free_result($inhalte);
mysql_close();

Da bekomm ich eine falsche Ausgabe (s. Anhang) - ich könnte an die Decke gehen, weil ich den Fehler einfach nicht finde :confused: :confused:
Die Funktion habe ich natürlich auch deklariert - aber nicht mitgepostet, weil die ja nicht wichtig ist!

Wer kann mir helfen? *schluchz*
 

Anhänge

  • anhang1.gif
    anhang1.gif
    4 KB · Aufrufe: 87
Lalalala :p
PHP:
$row = mysql_fetch_object();
echo $row->Wert;

$row = mysql_fetch_assoc();
echo $row['Wert'];

$row = mysql_fetch_array();
echo $row['Wert'].' oder '.$row[12];

$row = mysql_fetch_row();
echo $row[12];
 
@elrazor: dient doch nur zur Veranschaulichung

@_voodoo: *heul* Was willst du mir damit sagen! Soll, bzw. muss ich statt
PHP:
mysql_fetch_object
PHP:
mysql_fetch_assoc

nehmen
 
Du hast folgendes:
PHP:
while ($row2 = mysql_fetch_object($inhalte))
{
  switch($row2["modul"])
Dann schaust du nochmal kurz auf meinen Post ubnd zählst eins und eins zusammen :)
 
Das ist ja tierisch gemein - das lässt mich doch sehr direkt spüren, was für ein Anfänger ich in PHP zu sein scheine :(

In der DB gibt es die Spalte "modul". Diese enthält einen char-Typen... A, B, C oder D. Diese möchte ich per switch...case unterscheiden lassen und habe mich halt deshalb dafür entschieden. - Fakt ist, es scheint nicht zu funktionieren.

Btw: Was ist ein assoziatives Array, bzw. ein assoziativer Index. Unter php.net habe ich die Erklärung von mysql_fetch_assoc() nicht verstanden.
 
Assoziatives Array heißt du kannst die Elemente des Arrays nur mit ihrem Namen
ansprechen, in deinem Fall "modul". Bei nummerischen Arrays geht es nur mit der
entsprechenden Zahl. [PHPF]mysql_fetch_assoc[/PHPF] erzeugt ein nur-assotiatives Array,
während [PHPF]mysql_fetch_row[/PHPF] ein nur-nummerisches erzeugt und [PHPF]mysql_fetch_array[/PHPF]
erzeugt einen Array auf den man sowohl numerisch als auch assoziativ zugreifen
kann.

Bzgl. des Problems: Du hast die Lösung doch schon genannt:
stephandziurla hat gesagt.:
@_voodoo: *heul* Was willst du mir damit sagen! Soll, bzw. muss ich statt
PHP:
mysql_fetch_object
PHP:
mysql_fetch_assoc
nehmen
 
PHP:
function dbopen($server,$user,$pass,$database)
    {

    @$conn = mysql_connect($server, $user, $pass);
    if($conn)
        {
        //echo "... Verbindung zum Datenbankserver...OK<br>";
        $select = mysql_select_db($database,$conn);
        if($select)
            {
            //echo "... Verbindung zur Datenbank...OK<br>";
            return $select;
            }
            else
               {
               echo "Achtung! Es konnte keine Verbindung zur Datenbank hergestellt werden!<br>";
               echo "Bitte kontaktieren Sie den zuständigen Administrator:<br>";
               echo "Mailto:<a href='mailto:admin@server.xx'> Datenbankadmnistrator </a><br>";
               }

        }
        else
           {
           echo "Achtung! Es konnte keine Verbindung zum Datenbankserver hergestellt werden!<br>";
           echo "Bitte kontaktieren Sie den zuständigen Administrator:<br>";
           echo "Mailto:<a href='mailto:admin@server.xx'> Datenbankadmnistrator </a><br>";
           }


    }


dbopen($server,$user,$pass,$database);    

$queryString ="SELECT * FROM content ORDER BY rang ASC";
$result = mysql_query($queryString);

while ($res = mysql_fetch_array($result,MYSQL_ASSOC))
{
  switch($res['modul'])
  {  
    case 'A':
        echo "A";
        echo "<br>";
        break;
        
      
      default:
       {
        echo "Modul nicht vergeben!\n";
                    echo "Bitte noch einmal versuchen!<p>";
                    
        echo "<br>";
        break;
       }
  }
}

?>

Habe hier mal die WHERE Komponente weggelassen.
Man sollte Felder mit der Bezeichnung 'id' eigentlich auf autoincrement und unique setzen.
Aber vielleicht habe ich Dich falsch verstanden und Du willst nur einen Datensatz aus
der Datenbank abfragen (wozu dann das ORDER BY?)

Gruß der Deffel
 
Zuletzt bearbeitet:
Hmmmmm........also, wenn ich anstelle von mysql_fetch_object() mysql_fetch_assoc() benutze, funktioniert nix - es werden keine Inhalte ausgelesen - es stehen aber Inhalte in der DB!

Die Funktion, die in dem case-Fall aufgerufen werden soll, ist meiner Meinung nach richtig geschrieben. Zur Not aber trotzdem nochmal die Funktion:

PHP:
function ausgabeeins()
{
//Lesen der Sprungmarken
$inhalte = mysql_query("SELECT * FROM content WHERE id='".$DieSeite["id"]."' ORDER BY rang ASC");
      $link = $row2->sprungmarke_de;
	  $head_insert = $row2->headline_de;
	  if($head_insert=="")
	    {
		  $head_insert="";
		}
 	  else
	    {
		  $head_insert="<DIV class='headline'>'$head_insert'</DIV>";
		}
	  $text = $row2->text_de;
	  echo "<tr>";
	  echo "<td bgcolor='#fdffe7'> <a href='#top' onFocus='blur();'>"
	  ."<img src='dot.gif' align='right'></a><br><a name='$link'>$head_insert</A> <p> $text<p></td>";
	  echo "</tr>";
	  
//Lesen der Inhalte
$anker = mysql_query("SELECT * FROM content WHERE id='".$id."'");
echo "<table width='100%' cellpadding='0' cellspacing='0' border='0'>";
echo "<tr>";
echo "<td bgcolor='#CCCC33'><div align='center'>".$DieSeite['titel_de']."</DIV></td>";
echo "</tr>";

while ($row = mysql_fetch_object($anker)) 
{
  $link = $row->sprungmarke_de;
  echo "<tr>";
  echo "<p><td bgcolor='#fdffe7'><a href='#$link' onFocus='blur();'><img src='dotunder.gif'><b>$link</b></td>";
  echo "</tr>";
}
echo "</table>";
}

Sieht da jemand einen Fehler?!
 
@deffel: ups, hab dich überlesen :-(
Naja, ich habe in der DB mitunter eine Spalte namens modul. Diese Spalte kennzeichnet die Anordnung des Textes, der aus der DB ausgelesen werden soll.

Je nach Modul werden also die Texte unterschiedlich dargestellt (mal rechtsbündig, linksbündig, zentriert etc.)
Mittels switch...case (der "klassische" Fall einer sog. Fallunterscheidung) möchte ich zwischen den unterschiedlichen Modulen auswählen und jeweils eine vorher deklarierte Funktion aufrufen.

Leider geht dat nich :mad:
 
Zurück