Einzelnen Beitrag anzeigen
  #7  
Alt 02.05.2006, 22:52:49
Benutzerbild von Serp
Serp Serp ist offline
Member
 
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
AW: Wert einer Variable ändern und die Änderung auf die Variable ablegen.

Ich muss sagen, ich begrüße es, dass bei euch PHP unterrichtet wird. Ist auf jeden Fall sinnvoller als das unsägliche Pascal, das man sonst überall im Informatikunterricht antrifft... Nicht begrüßen kann ich allerdings, wie das anscheinend unterrichtet wird. Denn wenn man vernünftig an die Sache rangeht, würde man das einmal so aufbauen, dass solche Fragen wie deine gar nicht aufkommen können, und daneben nicht als erstes Projekt eine Art Browsergame wählen...

Wenn dich PHP wirklich interessiert (oder du ne gute Note haben willst ;)) empfehle ich dir, das Ganze selbst in die Hand zu nehmen. Nimm dir die Zeit, und arbeite dieses Tutorial durch, da lernst du dann ne ganze Menge. Und, was wichtig ist: Du lernst vor allem, wies richtig geht.


Aber um dir dann noch mal bei deinem Problem zu helfen: So, wie du das aufgeschrieben hast, funktioniert das nicht. Prinzipiell könnte man den value-Teil zwar durch nen Funktionsaufruf füllen, dieser müsste dann aber zumindest von runden Klammern abgeschlossen werden. Was jedoch nicht geht (und ich vermute, dass du dir das so vorgestellt hättest) ist, dass dann beim Abschicken automatisch die Funktion aufgerufen wird, die bei value drinsteht. Theoretisch möglich ist so was natürlich schon, aber nicht so. Ich zeig dir mal, wie es ginge:

PHP-Code:
<form action="input_radio.php" method="get">
  <
p>Angriff:</p>
  <
p>
    <
input type="radio" name="angriff" value="1"Angriff 1<br>
    <
input type="radio" name="angriff" value="2"Angriff 2<br
    <
input type="radio" name="angriff" value="3"Angriff 3<br>
... 
Du siehst hier drei Dinge:
1. Alle Radiobuttons haben nun den gleichen Namen. Das ist ganz normal so, denn durch den Namen wird ausgedrückt, dass die in der gleichen Gruppe stehen. Dadurch kann dann immer nur ein Angriff ausgewählt werden.
2. Es wurde kein PHP-Code eingefügt. Das ist einfach noch nicht notwendig. Der ganze PHP-Kram steht erst in der Datei input_radio.php, die ich mal entsprechend umbenannt hab, das man auch erkennt, dass es ne php-Datei sein soll.
3. Ich hab beim Formular noch angefügt, auf welche Art die Daten übermittelt werden sollen. GET bedeutet hierbei, dass sie an die URL angehängt werden. (Einfach mit ?variablenname=wert, hast du sicher schon mal gesehen)

Interessant wird dann die input_radio.php:

PHP-Code:
<?php
function angriff1() {...} 
function 
angriff2() {...} 
function 
angriff3() {...} 
// weitere mögliche Angriffe

// Hier wird jetzt die entsprechende Angriffsfunktion aufgerufen
angriff{$_GET['angriff']}();
?>
Interessant ist hierbei die letzte Zeile. $_GET ist ein assoziatives Array, das alle Inhalte enthält, die per GET an die Seite übertragen worden sind. Als Schlüssel (Der Teil in den eckigen Klammern) dient dabei bei Formularen praktischerweise der Name des Formularelements. (Im Klartext: Beim Abschicken des Formulars wird automatisch als Wert für 'angriff' der übertragen, der im value-Attribut des ausgewählten Radiobuttons besteht.)
Der dadurch ermittelte Wert wird dann an 'angriff' angehängt und eine Funktion mit passendem Namen gesucht. (Dass man so was schreiben kann ist übrigens überhaupt nicht selbstverständlich - in den meisten Programmiersprachen wär so was absolut undenkbar!)

Was fällt jedoch daran auf? Erst mal brauchst du für jeden Angriff ne eigene Funktion, auch wenn die meisten Abläufe vielleicht gleich sind. Dann ist das Ganze relativ unübersichtlich und auf den ersten Blick auch nicht verständlich. Darum würd ich das eher mit einer Funktion lösen, die als Parameter die Nummer des Angriffs übermittelt kriegt und danach entscheidet, was sie tut. Sähe dann in etwa so aus:

PHP-Code:
<?php
function angriff($angriffsnummer) {
  
// Sachen, die für alle Angriffe gleich sind
  
...
  
// Angriffsspezifisches Zeug
  
switch($angriffsnummer) {
    case 
1:
      
// Was machen wir bei Angriff 1?
      
break;
    case 
2:
      
// Was machen wir bei Angriff 2?
      
break;
    case 
3:
      
// Was machen wir bei Angriff 3?
      
break;
  }
}

// Angriffsfunktion aufrufen
if(isset($_GET['angriff'])) angriff($_GET['angriff']);
Dieses seltsame switch-Konstrukt macht folgendes: Es wird geschaut, welchen Wert die Variable hat. Je nach Wert wird dann alles nach dem entsprechenden case-Fall abgearbeitet. Mit alles meine ich dabei auch wirklich alles, wäre die Variable beispielsweise 1, würden erst mal auch alle Anweisungen nach case 2 und case 3 ausgeführt. Da dies hier nicht gewollt ist, sorgt der Befehl break dafür, dass die Abarbeitung gestoppt wird.
Die letzte Zeile ruft die Funktion mit dem entsprechenden Parameter auf. Die if-Abfrage dient dazu, dass die Funktion nur aufgerufen wird, wenn wirklich ein Angriff stattfinden soll. Könnte ja sein, dass gar nicht ausgewählt worden ist.


Ich hoff einfach mal, ich konnt dir mit diesem doch etwas länglicheren Text n bisschen weiterhelfen...
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')

Für 100% sauberen Code.

Geändert von Serp (02.05.2006 um 22:53:54 Uhr)
Mit Zitat antworten