Variable in switch-Anweisung

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hauser
    replied
    Super danke für den Tipp !

    Ein tolles Programm.

    Hier nochmal das Skript:

    PHP Code:
    error_reporting(E_ALL); #zeig alle Fehler 
    ini_set('display_errors''1'); 
    require_once 
    'inc/login.inc.php';
    $verbindung = @mysqli_connect($server$benutzer$passwort);
    if (
    $verbindung){
     
    mysqli_select_db($verbindung$datenbank);
     
     if(
    mysqli_error($verbindung)){
      echo 
    'Fehler: ' mysqli_error($verbindung);
     
     } else {
     
      
    $sql "SELECT * from event order by datum DESC";
      
    $result mysqli_query($verbindung$sql);
     
      while(
    $event mysqli_fetch_assoc($result)) { 
     
       
    $or $event['ort'];
       
    $htmlCode '<img src="event/img_get.php?id=' $event['ID'] . '" width="50" height="50" alt="" />';
     
       switch (
    $or) {
     
       case 
    'al-Dente':
        
    $link 'al-dente-highlights.php';
        break;
       case 
    'Medleys':
        
    $link 'medleys-events.php';
        break;
       case 
    'Club-Lounge':
        
    $link 'club-lounge-events.php';
        break;
       case 
    'Sport-Center':
        
    $link 'sport-center-events.php';
        break;
     
       default:
        
    $link 'index.php';
     
       }
     
       echo 
    "<table border='0', width='140px'>";
     
       echo 
    nl2br ("<td><hr style border='1px dotted #FC6053 width: 15px'><b>" $event['datum'] . "\n</b> 
    <b>Ort: <a href='
    $link'><font color='#98c9ec'>" $event['ort'] . "\n</b>
    <b>" 
    $event['name'] . "\n</b></a><br><a href='$link'>$htmlCode\n</a>
    <br> </td></tr>"
    );
     
       echo 
    "</table>";
     
     
      }
     }
    }
    mysqli_close($verbindung);
    ?> 
    Also nochmals vielen Dank für alles.

    Gruß
    Hauser

    Leave a comment:


  • AmicaNoctis
    replied
    Ich habe Notepad++ mit dem TextFX-Plugin. Da gibt es die Funktion "Reindent C++ Code". Da PHP zu den C-basierten Sprachen gehört, funktioniert das prima.

    Leave a comment:


  • Hauser
    replied
    Hallo Amica,

    ich gebe zu, ich habe mich total verrant.

    Ich habe immer nur den Fehler in der switch Anweisung gesucht und dabei
    übersehen, dass der ganze Aufbau völliger Blödsinn ist. Du hast absolut Recht.
    Ich muss mir unbedingt ein besseres Arbeiten angewöhnen. Das ganze Skript
    sieht aus, wie bei Hempels unterm Sofa !!!!

    Ich stelle mich der Kretik und gelobe auch hier Besserung.

    Auto-Indent-Funktion
    Will ich auch haben. Mit welchem Editor schreibst du. Ich nutze DW aber
    eigentlich nur zum Layout. (CSS-Html)

    Für PHP nutze ich Eclipse for PHP Developers, kann der das auch.

    Habe schon etwas gesucht aber noch nix gefunden.

    Das Skript jedenfalls läuft jetzt einwandfrei und glaube mir ich habe verstanden !!!

    Vielen lieben Dank.

    Gruß
    Hauser.
    P.S : Wenn ich auch so ne Auto-Ident Funktion finde, schreibe ich den
    Code auch noch mal hier rein

    Leave a comment:


  • AmicaNoctis
    replied
    Du solltest dir einen vernünftigen Code-Style angewöhnen, wenn ich keine Auto-Indent-Funktion hätte, würde ich da nicht durchsehen!

    Dein Dilemma:

    du hast zwei While-Schleifen, die das Ergebnis derselben MySQL-Abfrage durchrattern. Das ist erstmal schon Blödsinn. In der ersten erzeugst du diese Links, die aber nie benutzt und jedesmal wieder überschrieben werden.

    In der zweiten Schleife, willst du diese Links benutzen, da sind sie aber nicht mehr da, weil sie nur in der ersten existierten, bzw. ist dann nur noch der letzte da.

    Die Lösung:
    nimm die Switch-Anweisung mit in die zweite Schleife rein und entferne dann die erste Schleife komplett.

    Ich vermute, dass du das Problem immer noch nicht verstehst, aber ich weiß nicht, wo ich anfangen soll, dir zu erklären, dass das Verhalten absolut logisch ist und dein Code sich dieser Logik entgegenstellt.

    Gruß,

    Amica

    Leave a comment:


  • Hauser
    replied
    Ja gerne, im Grunde wie #3.
    Last edited by Hauser; 08-04-2010, 14:51.

    Leave a comment:


  • AmicaNoctis
    replied
    Kannst du bitte deinen aktuellen Code als Anhang hinzufügen? Der "Ausgangszustand" kann alles mögliche sein. Nur damit wir wissen, wovon du sprichst.

    Leave a comment:


  • Hauser
    replied
    Hallo und danke auch an wahsaga für die Beteiligung.

    Der Code hat sich bis dato noch nicht verändert, ich habe einiges
    Versucht, habe es dann immer wieder über den Haufen geschmissen
    und bin zum Ursprung zurückgekehrt.

    Also was macht PHP und warum landen alle auf club-lounge.

    Ich habe mir das mal so gedacht, weil du(Amica) ja davon sprachst.

    Ich nehme mal die Variablen 1,2,3 und als zuordnung A,B,C,D.

    Das Script nimmt sich den ersten Wert, also 1 und sucht nach der
    Übereinstimmung Case und trifft A. Dann sieht es ja, huch ich hab
    ja noch 2, und findet B. Dann das Gleiche noch mal mit 3 auf C.

    So gut so schön, doch leider gibt es dabei ein Problem, und zwar folgendes:

    Er trifft 1 auf A und fängt wieder von vorne an, sieht er hat noch ein
    zweites und läuft wieder von vorne los. Aber anstatt 1 festzuhalten,
    löscht er die Zuordnung und trifft 2 auf B, das ganze wieder von vorn und
    alle landen zum Schluß auf dem letzten Wert und der ist 3 und C.

    Ich muss es also mit dem Script schaffen, dass wenn er 1 und A zu-
    geordnet hat, er nur noch mit 2 und 3 weitermacht und wenn er 2 und B
    zugeordnet hat nur noch die Schleife mit 3 durchläuft.

    Ich hoffe ich habe das so richtig erklährt, denn das ist für mich der Grund,
    warum am Ende alle auf dem letzten Wert landen.

    Langsam muss der Groschen aber fallen, wahrscheinlich lachen sich alle
    über mich schon kapput.

    Kann if und ifelse mir vielleicht weiterhelfen?

    Gruß
    Hauser

    Leave a comment:


  • AmicaNoctis
    replied
    Originally posted by wahsaga View Post
    Aktuellen Schleifendurchlauf abbrechen und mit dem nächsten weitermachen geht mit break.
    PHP: break - Manual
    Die Erklärung klingt eher nach continue, break bricht die ganze Schleife endgültig ab.

    @Hauser: Wie sieht denn dein Code jetzt aus? Warum solltest du die Schleife abbrechen wollen? Wenn das Result Set abgearbeitet ist, hört sie alleine auf, genau wie vorher deine for-Schleife bei num_rows aufgehört hat.

    Gruß,

    Amica

    Leave a comment:


  • wahsaga
    replied
    Aktuellen Schleifendurchlauf abbrechen und mit dem nächsten weitermachen geht mit break.
    PHP: break - Manual

    Leave a comment:


  • Hauser
    replied
    ...aber bisher keinen Effekt hatte, weil alles innnerhalb der Schleife bleibt.
    Nun pobiere ich schon seit einiger Zeit herum, leider drehe ich mich, wie der Code in der Schleife .

    Wie kann ich denn aus dieser Schleife heraus kommen, wenn ein Treffer gelandet ist, und dann wieder
    die Suche nach dem nächsten Wert (Varialbel aus dem Array) aufnehmen, usw.

    Irgendwie fehlt mir da eine exit und return Strategie in php gesprochen...

    Gruß und danke
    Hauser

    Leave a comment:


  • Hauser
    replied
    Ja, vielleicht sollte ich mal kurz erklähren was da eigentlich mit bezweckt
    werden soll. Auf einer Seite wird ein Bereich angezeigt, der verschiedene
    Events enthält, die den jeweiligen Orten zugeordnet werden sollen. D.h.
    wenn der Besucher sich die verschiedenen Events anschaut und auf einen
    bestimmten klickt, soll er auf die Eventseite des jeweiligen Ortes weiter-
    geleitet werden.

    Vorher hatte ich ein anderes Script geschieben was einwandfrei funktionierte:

    PHP Code:
    require_once 'inc/connect.inc.php';
     
     
    $res mysql_db_query("treffpunkt","select * from event ORDER BY ID");
    $num mysql_num_rows($res);
     
     
    // Tabellenbeginn
    echo "<table border='0', width='140px'>";
     
    for (
    $i=0$i<$num$i++)
    {
    $id mysql_result($res$i"ID");
    $or mysql_result($res$i"ort");
    $na mysql_result($res$i"name");
    $da mysql_result($res$i"datum");
    $be mysql_result($res$i"beschreibung");
    $htmlCode '<img src="event/img_get.php?id='.$id.'" width="50" 
    height="50" border="0" alt="" align="right"/>'
    ;
     
    switch (
    $or){
    case 
    'al-Dente':
    $link 'al-dente-highlights.php';
    break;
    case 
    'Medleys':
    $link 'medleys-events.php';
    break;
     
    default:
    $link 'index.php';
    }  
    echo 
    nl2br ("<td><hr style border='1px dotted #FC6053 width:
    15px'><b>Datum: 
    $da\n</b> <b>Ort: <a href='$link'><font
    color='#98c9ec'>
    $or\n</b> <b>$na\n</b></a><br>
    <a href='
    $link'>$htmlCode\n</a><br> </td></tr>"); 
    Aufgrund der veralterten Befehle habe ich das wie bereits gezeigt
    geändert.

    $link soll ja insofern flexibel bleiben, dass er sich je nach Ort den
    dementsprechenden Hyperlink auf den Event zuweist.

    So, dass nur kurz zu der Erklärung.

    Ich werde mich aber deinen Vorschlägen annehmen und an
    der Lösung arbeiten.

    Leave a comment:


  • AmicaNoctis
    replied
    Überleg doch mal, was mit $link passiert. Das wird jedemal überschrieben. Mit "mach was mit $link" meinte ich keinesfalls, dass du noch mehr Zuweisungen durchführen sollst, sondern den Wert weiterverarbeiten. Wie du das tun musst, kann ich dir auch nicht sagen, weil ich nur diesen kleinen Teil deines Skripts kenne.

    Stell dir vor, du wärst PHP, nimm dir einen Zettel und mach eine Tabelle (Name und Wert). Dann gehst du deinen Code durch und "speicherst" die Variableninhalte auf dem Zettel, so wie deine Befehle es dir auftragen. Bei Änderungen streichst du die alte Zeile durch und fügst eine neue mit dem neuen Wert ein. Vielleicht verstehst du dann, warum das totaler Blödsinn ist und was dein Code eigentlich macht.

    [COLOR="Red"]Edit[/COLOR]: Nimm einfach den Code von vorher (den solltest du übrigens einrücken) und füge vor die letzte } ein echo($link) ein. Vielleicht verstehst du dann, dass dein Code zwar grundlegend funktioniert, aber bisher keinen Effekt hatte, weil alles innnerhalb der Schleife bleibt.

    Gruß,

    Amica
    Last edited by AmicaNoctis; 28-01-2010, 14:57.

    Leave a comment:


  • Hauser
    replied
    Hm..alles mit jedem hieße für mich so:

    PHP Code:
    switch ($or) {
        
     case 
    'al-Dente':
     
    $link 'al-dente-highlights.php';
     
    $link 'medleys-events.php';
     
    $link 'club-lounge-events.php';
     
    $link 'sport-center-events.php';
     break;
     case 
    'Medleys':
     
    $link 'al-dente-highlights.php';
     
    $link 'medleys-events.php';
     
    $link 'club-lounge-events.php';
     
    $link 'sport-center-events.php';
     break;
     case 
    'Club-Lounge':
     
    $link 'al-dente-highlights.php';
     
    $link 'medleys-events.php';
     
    $link 'club-lounge-events.php';
     
    $link 'sport-center-events.php';
     break;
     case 
    'Sport-Center':
     
    $link 'al-dente-highlights.php';
     
    $link 'medleys-events.php';
     
    $link 'club-lounge-events.php';
     
    $link 'sport-center-events.php';
     break;
      
        default:
        
    $link 'index.php'
    Er bleibt aber aus sport-center-events.php hängen. Ein break zwischen
    jedem $link nützt auch nix. Vermutlich ist es auch das nicht, was du
    meinst.

    Gruß
    Hauser

    Leave a comment:


  • Hauser
    replied
    Ja, ich habe so eine Ahnung was du meinst, kann es momentan nicht umsetzen.

    Ich gehe jetzt erstmal zum Sport, vielleicht ist mein Kopf danach etwas
    freier und der Funke sprinkt über.

    Danke erstmal soweit.

    Bis denne,
    Hauser

    Leave a comment:


  • AmicaNoctis
    replied
    Ich sage ja auch nicht, dass du die Schleife nicht benutzen sollst - im Gegenteil! Nur musst du innerhalb der Schleife alles mit jedem Datensatz machen, was du brauchst und darfst nicht immer in dieselbe Variable schreiben.

    Konkret heißt das: Mach was mit $link und zwar innerhalb der Schleife, sonst ist es beim nächsten Durchlauf weg.

    Leave a comment:

Working...
X