Brauche mal bitte Hilfe beim Klammersetzen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
lamurio
Mitglied
Beiträge: 10
Registriert: 20.04.2008 10:08

Brauche mal bitte Hilfe beim Klammersetzen

Beitrag von lamurio »

Hi, also ich komme irgendwie mit If und Else If nicht klar. Laut mehreren nachlesens müsste es stimmen.

Code: Alles auswählen

<?php
include_once("../next-lvl/web/statusphp.html");
#$guilds = $guilds-1;
echo "<br>";
echo "Server: $name<br>\n";
echo "NPC: $npcs<br>\n";
echo "Items: $items<br>\n";
echo "Gilden: $guilds<br>\n";
echo "Clients: $clients<br>\n";
echo "Speicher: $speicher<br>\n";
echo "Letztes Update: $update<br>\n";
echo "Version: $version<br>\n";
echo "<br>";




echo "<strong><left>Next-Level Status</left></strong><br><br>";
echo '<table width="400" border="1" cellspacing="5" cellpadding="2">';
echo '<tr><td>Name</td><td>Titel</td><td>Region</td><td>Gilde</td>';
for ($i=0; $i < count($sp_namen); $i++)

if($sp_region[$i] == "Wrong Level 3")
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Staffbereich</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
echo '</table></td></td>';
}
ELSE IF ($sp_region[$i] == "Destard Entrance" || $sp_region[$i] == "Destard Level 1" || $sp_region[$i] == "Destard Level 2" || $sp_region[$i] == "Destard Level 3" || $sp_region[$i] == "Despise Entrance" || $sp_region[$i] == "Despice Level 1" || $sp_region[$i] == "Despice Level 3" || $sp_region[$i] == "Icedungeon Level 1"  || $sp_region[$i] == "Icedungeon Level 2" || $sp_region[$i] == "Icedungeon Level 3")                                                         
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Dungeon</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
}
ELSE IF ($sp_region[$i] == "$sp_region[$i] == "Despice Level 2") 
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Newbie Dungeon</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
}
ELSE IF ($sp_region[$i] == "$sp_region[$i] == "Green Access") 
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Arena/Strafgarten</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
}
ELSE IF ($sp_region[$i] == "$sp_region[$i] == "Minoc Mine 1") 
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Mine</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
}
ELSE IF ($sp_region[$i] == "$sp_region[$i] == "Cove Orc Camp") 
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Dungeon</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
}

else
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>$sp_region[$i]</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
echo '</table></td></td>';


?>
Benutzeravatar
gsxfan
Mitglied
Beiträge: 562
Registriert: 29.11.2007 11:43
Wohnort: Mittelhessen

Beitrag von gsxfan »

Nach meinem Verständnis müsste die Anweisung im else-Block (Die allerletzte) ebenfalls in geschweifte Klammern gesetzt werden.

Code: Alles auswählen

else
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>$sp_region[$i]</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
echo '</table></td></td>';
}
?>
Enduros putzen ist wie Bücher verbrennen.
Das GSX1100G-Forum
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Warum postest du unter phpBB 2.0: Administration und Benutzung und nicht unter Coding und Technik?
Wieso includest du eine HTML-Datei?
Warum muss es eine if elseif elsif.... else Konstruktion sein?
Kennst du switch mit den case Anweisungen?
Weist du warum man Code einrücken soll?
ICH SCHREIBE AUCH NICHT groß und klein abWECHSELND
Entscheide dich für ' oder " und wechsle dich nicht immer ab.
Wo genau kommst du nicht klar?
Kennst du foreach?

Wenn es daran liegt das du durch fehlende Codeeinrückung keine Übersicht hast, solltest du den Code einrücken, Stück für Stück. Sollte es daran liegen das du durch die Riesigen if Bedingungen nicht durchblickst -> Schau dir switch an.

Das wären meine Gründe warum ich deinen Code nicht verstehe.

Erkläre doch mal wann diese Bedingung wahr ist:

Code: Alles auswählen

($sp_region[$i] == "$sp_region[$i] == "Minoc Mine 1") 
@gsxafan
So wie du das geschrieben hast fehlt dir bei einigen (nicht allen) Möglichkeiten das Ende von der HTML-Tabelle.
Hast du die for-Schleife gesehen :D
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
gsxfan
Mitglied
Beiträge: 562
Registriert: 29.11.2007 11:43
Wohnort: Mittelhessen

Beitrag von gsxfan »

Du hast recht, Boecki, auf das FOR hab ich tatsächlich nicht geachtet. :roll: Nur auf das ELSE geguckt und das als eine Anweisung gesehen. Allerdings ist die FOR-Anweisung syntaktisch auch nicht richtig. Irgendwie ziemlich durcheinander, das Ganze.
Wäre es nicht sinnvoller, den HTML-Tabellenaufbau losgelöst vom Schleifenkonstrukt zu bauen, mal abgesehen von den anderen Punkten, die Du angesprochen hast?
Enduros putzen ist wie Bücher verbrennen.
Das GSX1100G-Forum
lamurio
Mitglied
Beiträge: 10
Registriert: 20.04.2008 10:08

Beitrag von lamurio »

Das ganze ist von einem Spiel. Die werte sollen ja nur abgefangen werden und dann neu ausgegeben werden.

Minoc Mine 1 ist eine Region, wenn diese ausgegebe werden sollte, soll er sie abfangen und umändern in Mine.

Laut der Forenbeschreibung hat das ganze hierher gepasst und nicht nach Codeschnippsel.

Nein, switch und case sagt mir nix. Muss ich mir anschauen. " und ` habe ich durch getestet und es funktioniert so in der Reihenfolge, sonst hatte ich fehler bei der Ausgabe.

Wenn ich es bis If laufen lasse, stimmt alles, komme ich zum Else If sagt er mir das er Fehler in den Zeilen hat. :) Daher bekomme ich keine Ausgabe so wie ich es gern hätte.
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Dann schaue dir

Code: Alles auswählen

($sp_region[$i] == "$sp_region[$i] == "Minoc Mine 1") 
Noch mal an:

Nehmen wir mal an $sp_region[$i] == "Minoc Mine 1"
("Minoc Mine 1"== "Minoc Mine 1 == "Minoc Mine 1")
Würdest du das Error-Reportinglevel auf E_ALL setzen würde das raus kommen:

Unexpecting M expecting ) on line x

Teste mal das:

Code: Alles auswählen

($sp_region[$i] == "Minoc Mine 1") 
Nun rück aber erstmal den Code schön ein...

@gsxfan
Der Code ist chaotisch, die for habe ich nur wegen dem $i gesucht und gefunden :D
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
lamurio
Mitglied
Beiträge: 10
Registriert: 20.04.2008 10:08

Beitrag von lamurio »

Also das ist kompletter blödsinn. ($sp_region[$i] == "$sp_region[$i] == "Minoc Mine 1")

Richtig ist das.

if($sp_region[$i] == "Minoc Mine 1")

ich werde es nochmal überarbeiten und dann neu einfügen.
lamurio
Mitglied
Beiträge: 10
Registriert: 20.04.2008 10:08

Beitrag von lamurio »

Code: Alles auswählen

<?php
include_once("../next-lvl/web/statusphp.html");
#$guilds = $guilds-1;
echo "<br>";
echo "Server: $name<br>\n";
echo "NPC: $npcs<br>\n";
echo "Items: $items<br>\n";
echo "Gilden: $guilds<br>\n";
echo "Clients: $clients<br>\n";
echo "Speicher: $speicher<br>\n";
echo "Letztes Update: $update<br>\n";
echo "Version: $version<br>\n";
echo "<br>";




echo "<strong><left>Next-Level Status</left></strong><br><br>";
echo '<table width="400" border="1" cellspacing="5" cellpadding="2">';
echo '<tr><td>Name</td><td>Titel</td><td>Region</td><td>Gilde</td>';
for ($i=0; $i < count($sp_namen); $i++)

if($sp_region[$i] == "Wrong Level 3")
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Staffbereich</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
#echo '</table></td></td>';
}
ELSE IF ($sp_region[$i] == "Destard Entrance" || $sp_region[$i] == "Destard Level 1" || $sp_region[$i] == "Destard Level 2" || $sp_region[$i] == "Destard Level 3" $sp_region[$i] == "Despise Entrance" || $sp_region[$i] == "Despise Level 1" || $sp_region[$i] == "Despise Level 3" || $sp_region[$i] == "Ice Dungeon Level 1" || $sp_region[$i] == "Ice 'Dungeon Level 2" || $sp_region[$i] == "Ice Dungeon Level 3" || $sp_region[$i] == "Covetours Level 1" || $sp_region[$i] == "Covetours Level 2" || $sp_region[$i] == "Covetours Level 3"  ) 
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Dungeon</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
}
ELSE IF ($sp_region[$i] == "Despice Level 2") 
{
#echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Newbie Dungeon</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
}
ELSE IF ($sp_region[$i] == "Minoc Mine 1" || $sp_region[$i] == "Covetours Mine") 
{
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Mine</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
}
else
echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>$sp_region[$i]</td><td>$sp_gildenkuerzel[$i]</td></tr>\n";
echo '</table></td></td>';


?>
In der Datei sieht das ganze etwas anders aus, dort ist es nicht so Zeilenversetzt. Er hat einen Fehler in Zeile 28 das ist die erste Else If anwendung.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Zeileneinrückungen machen den Text deutlich besser lesbar...
Du hast vergessen, den ganzen for-Block in geschweifte Klammern zu schließen und gleiches für den abschließenden Else-Teil.
Wenn er eine Fehlermeldung ausgibt: welche?

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Bitte lese folgende Kapitel:

http://tut.php-quake.net/switch.html
http://tut.php-quake.net/einruecken.html
http://tut.php-quake.net/error.html

so wie dein Code jetzt ist Blickt da keiner durch ganz viel if elseif, else und richtig viel oder.
Dann wurde auch noch eine kräftige priese HTML mit rein gemurkst.

Code: Alles auswählen

switch($sp_region[$i])
{
    case: 'Irgendwas':
       create_row($sp_namen[$i], $sp_titel[$i], 'Newbie Dungeon', $sp_gildenkuerzel[$i])
    break;

    case: 'Mache':
    case: 'dies':
    case: 'und':
    case: 'das':
       create_row($sp_namen[$i], $sp_titel[$i], 'Mine', $sp_gildenkuerzel[$i])
    break;
}
Dann baust du noch eine Funktion create_row(), die das macht was momentan diese Zeile macht:

Code: Alles auswählen

echo "<tr><td>$sp_namen[$i]</td><td>$sp_titel[$i]</td><td>Mine</td><td>$sp_gildenkuerzel[$i]</td></tr>\n"; 

Code: Alles auswählen

function create_row($name, $title,  $rank, $gk)
{
    echo "
<tr>
  <td>$name</td>
  <td>$titel</td>
  <td>$rank</td>
  <td>$gk</td>
</tr>"; 
    return true;
}
Der Vorteil von Funktionen ist das du einmal schreiben musst was gemacht werden soll und das ganze dann hinterher abkürzen kannst indem du nur noch Funktion($werte) schreibst. Außerdem ist es leichter den Code zu verstehen, wenn man einmal weiß "Funktion xy() macht das" muss man nicht erst zig Zeilen durchlesen nach dem Motto "Ist das wirklich das gleiche wie oben, kann ja nicht sein, sonst hätte er es in eine Funktion gepackt."
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Antworten

Zurück zu „Coding & Technik“