PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Wert einer Variable ändern und die Änderung auf die Variable ablegen. (http://www.selfphp.de/forum/showthread.php?t=13366)

Ichthys 28.04.2006 22:31:30

Wert einer Variable ändern und die Änderung auf die Variable ablegen.
 
Wie legt man eine Variable so an, dass der Wert einmal festgelegt wird und von anderen Variablen geändert werden kann?

Ich meine es so:
Es gibt zwei Variablen; $a=50 ; $b=30 .
Nun würde ich es gerne eine function erstellen, welche $b von $a abzieht. Dies ist ja nicht so schwer, allerdings gibt es noch $b1 und $b2.
Die function sollte so geschrieben sein, dass sie, wenn man über eine check-box z.B. $b2 auswählt, der Wert von $a durch den von $b2 vermindert wird.

Ich habe an so einer gedacht:

function division()
{
$a=$a-$divisor;
}

die würde natürlich nur dann funktionieren, wenn es die Variable $divisor gibt.
Nun suche ich nach einer Möglichkeit, die ausgewählte $b - Variable nur dann in $divisor umzubenennen, wenn sie über die Check-box ausgewählt wurde.
Dh. ich wähle $b1, eine Variable benennt sie in $divisor um, die Funktion division() subtrahiert $b1 von $a und legt sie wieder auf $a ab.

Serp 30.04.2006 15:37:51

AW: Wert einer Variable ändern und die Änderung auf die Variable ablegen.
 
Dir ist klar, dass du dann für jede einzelne Rechenoperation die Seite neu laden musst? Verwend für so was lieber JavaScript...

Ichthys 30.04.2006 20:20:01

AW: Wert einer Variable ändern und die Änderung auf die Variable ablegen.
 
Ja,
aber derzeitig habe ich in Inof halt PHP.
Da bleibt mir ja nichts anderes übrig...

feuervogel 01.05.2006 18:52:55

AW: Wert einer Variable ändern und die Änderung auf die Variable ablegen.
 
was du da machen willst ist subtraktion, nicht division.

Serp 01.05.2006 20:39:40

AW: Wert einer Variable ändern und die Änderung auf die Variable ablegen.
 
Wenn du aus irgend ner Liste auswählst und das Formular dann abschickst, dann wird dir doch eh nur der eine ausgewählte Wert übergeben. Wo genau liegt dann dein Problem?

Ichthys 02.05.2006 22:10:13

AW: Wert einer Variable ändern und die Änderung auf die Variable ablegen.
 
Bei mir haperts ja schon am einfachsten. Mein Infolehrer hat uns den Auftrag gegeben, ein Rollenspiel über PHP zu realisieren.
Nun bin ich dabei, über Radiobuttens die Auswahl zu machen, aber ich habe keine Ahnung, wie man dabei php-Sachen einbauen kann.

ich hab es so probiert
PHP-Code:

<form action="input_radio.htm">
  <p>Angriff:</p>
  <p>
    <input type="radio" name="angriff_1" value="<?php angriff1 ?>"> Angriff 1<br>

Dabei ist "angriff1" bei value eine function. Falls so etwas nicht gehen sollte, würde ich es auch über Variabeln machen, allerdings funktioniert dies auch nicht so wirklich.

Was mache ich falsch?

@feuervogel:
Du hast recht, Mensch, ich darf gar nicht sagen, dass ich LK Mathe habe...

Serp 02.05.2006 22:52:49

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...

Ichthys 03.05.2006 22:34:56

AW: Wert einer Variable ändern und die Änderung auf die Variable ablegen.
 
Vielen Dank erst mal. Nun erst mal zu deiner Kritik:
es ist zwar nicht das erste, was wir in PHP machen, aber der Unterrichtsstil, na ja, zum einen kommen wir nicht wirklich voran, zum anderen habe ich manchmal das Gefühl, das wir es uns selber breibringen sollen.

Leider habe ich heute nicht mehr die Zeit, es mir richtig anzugucken, aber mein erster Eindruck beim Überfliegen: Sehr gut.

Ich hoffe, dass ich es mir morgen genauer anschauen kann.

Wegen isset: wie ist dieser Text hier zu verstehen? Ich habe mal nachgeguckt, wofür Isset da ist, aber diese Erklärung hilft mir leider nicht sonderlich...
Zitat:

Diese Funktion liefert TRUE, wenn die Variable oder das Array-Element var existiert, sonst FALSE.

Serp 04.05.2006 01:18:55

AW: Wert einer Variable ändern und die Änderung auf die Variable ablegen.
 
Hm... Was soll ich dazu erklären, was nicht in dem Text steht? Einfach mal ein Beispiel...

PHP-Code:

$variable 'irgendwas';
isset(
$variable); // true, da die Variable existiert.
$varibale '';
isset(
$variable); // true, die Variable existiert, ob sie einen leeren String enthält oder was sinnvolles ist egal
isset($variable2); // false, da so ne Variable niemals deklariert wurde
$array['key'] = 12345;
isset(
$array); // true, da die Variable existiert
isset($array['key']); // true, da der Schlüssel im Array existiert
isset($array['nochNKey']); // offensichtlich false 

Halbwegs verständlich, was die Funktion macht?

In diesem Beispiel funktioniert das jetzt wie folgt: Wenn einer der Radiobuttons ausgewählt worden ist, wird in der URL etwas in der Art 'angriff=#' übergeben. In diesem Fall existiert also der Schlüssel 'angriff' im $_GET - Array, die Funktion liefert true. Ist kein Radiobutton ausgewählt, wird nichts übergeben, der Schlüssel existiert nicht, die Funktion liefert also false. Damit wird dann auch keine angriffsfunktion aufgerufen.

Dies funktioniert übrigens nicht bei so Sachen wie Textfeldern. Wenn da keine Angabe gemacht wird, wird die Variable zwar übergeben, enthält aber nur nen leeren String. In diesem Fall müsstest du statt isset() !empty() verwenden, das überprüft, ob die Variable einen Inhalt halt. (empty() prüft, ob die Variable leer ist, und das ! dreht den Wert des Ergebnisses um)


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:58:25 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.