SucheMitgliederKalenderHilfe Hallo, Gast! Registrieren
Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
einige PHP Befehle nicht ganz klar
05.12.2004, 22:45
Beitrag #1
einige PHP Befehle nicht ganz klar
Hallo,

Ich möchte mich in Zunkunft verstärkt mit den Programmiersprachen PHP, JS und CSS auseinandersetzten. Angefangen habe ich vorgestern mit dem Lesen des Buches PHP und MySQL von Markt&Technik.
(ISBN: 3-8272-6770-6) ;-)

Es ist ein schönes Buch. Zu Anfang werden einige Kommandos erläutert. Ich habe diesbezüglich ein paar Fragen. Mir ist der Sinn&Zweck, sowie die Art der Verwendung folgender Kommandos nicht klar. D.h. ich weis nicht wofür sie sind und wie sie funktionieren.

GET['']
POST['']
for()
while()

sicherlich noch mehr, aber das frage ich dann später. Wie verwende ich sie? Im Buch sind natürlich erläuterungen aber ich versteh es einfach nicht.

Wäre dankbar für Hilfe. Gruß Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2004, 05:56
Beitrag #2
 
Ja das höre ich immer wieder das Personen probs mit den Zählschleifen for und while haben. Aber trotzdem versuch ich immer diesen Personen diese Zählschleifen einfach zu erklären, vorab aber erstmal die GET und POST Geschichte.

Es ist so, wenn du ein Formular auf der Seite hast und dieses abschickst, müssen die ganzen Daten irgendwo gesammelt werden. Am besten geht das natürlich mit Hilfe eines Arrays (wie ein Array funktioniert findest du ebenfalls im Board --> Suchfunktion benutzen). Die Frage was ist Post oder Get hat sich somit schon halb erledigt, Post und Get sind nichts anderes als Arrays in denen die Formulardaten gespeichert werden.
Vorab ein Eingabefeld:
[code:1]<input type="text" name="beschreibung" size="10">[/code:1]
Wenn du dieses Formular per post versendest, wirst du im Array Post auch den Eintrag 'beschreibung' finden. Sendest du dieses Formular per Get, so findest du es ebenfalls bei 'beschreibung' nur halt im Array Get. Auf den Inhalt zugreifen kannst du dann ganz einfach so:
[php:1]$_GET['beschreibung'] //oder
$_POST['beschreibung'][/php:1]
Ich denke mir mal du fragst dich was das soll, 2 Varianten die eh dasselbe machen. Nun das ist so, wenn du die Daten per Post versendest, sind sie für den Sender nicht sichtbar, du kannst also nicht sehen wie die einzelnen Variablen heißen und welchen Wert sie haben. Bei Get ist das anders, dort wird über die Adresszeile (oben) der Wert gesendet. Dann steht oben z.B. http://www.webhilfe.info/index.php?page=news , und so kann man ganz leicht das Script immer in Abhängigkeit der Adresszeile sich ausführen lassen. Hier würde man Get verwendet (Merke: Get --> bekommen, er bekommt/holt sich was aus der Adresszeile) um den Inhalt der Variable page festzustellen.
Das ist eigentlich so das Grundprinzip von Get und Post. Wie nun die Zählschleifen for und while funktionieren und was der Unterschied ist erklär ich dir heute nachmittag. Muss jetzt nämlich los.

Fortsetzung

Nun wie versprochen die Fortsetzung. Biggrin
Also wie wir bereits wissen ist for und while jeweils eine Zählschleife.


for-Schleife

Fangen wir einfach mal mit der for-Schleife an. Damit eine for-Schleife easy läuft benötigt man 3 Anweisungen.
Bsp.:
[php:1]for($i=0;$i<=10;$i++)
{
//Quellcode
}[/php:1]
Die erste Anweisung, hier $i=0, definiert die Startbedingung bzw. den Startwert. Die Variable $i (in for-Schleifen wirst du meistens $i, $j und $k finden, es gibt aber auch bestimmte Namen für die Variablen wie $anzahl etc.) ist die Laufvariable, es ist also die Variable die durch die Zählschleife immer erhöht wird. Die zweite Bedingung, hier $i<=10, ist die Abbruchbedingung. Sie sagt der for-Schleife sozusagen, ab wann sie aufhören soll überhaupt zu zählen. Ist der Wert der in $i steht nun also 5, so wird die for-Schleife weiterzählen denn 5 ist < 10, ist der Wert aber 11 so wird die Schleife abgebrochen. Die dritte Anweisung ist dafür gedacht, dass man dort festlegt in welchen Schritten die Laufvariable erhöht bzw. vermindert werden soll. Das $i++ bewirkt im Prinzip das was auch $i=$i+1; bewirken würde, es wird lediglich der Zählerwert um 1 erhöht. Dasselbe gilt auch bei $i--.
Nun gibt es auch noch einen Knackpunkt, die for-Schleife ist nämlich eine nachprüfende Zählschleife. Dies bedeutet, dass der Wert der Variable $i (oder wie du sie nennst) erst erhöht wird und dann wird geprüft ob die Variable <= 10 ist oder nicht. Du kannst das ganz einfach mit diesem Script testen.
[php:1]for($i=0;$i<=10;$i++)
{
echo $i.'<br>';//<br> ist nur für die bessere Optik Biggrin
}
echo '['.$i.']';//[ und ] ist nur für die bessere Optik gedacht[/php:1]
Hier wirst du feststellen, dass alle Zahlen die so untereinander geschrieben wurden von 0 bis 10 gehen. Dann siehst du die 11 die in den eckigen Klammern eingerahmt ist. Wie kommt das? Ganz einfach, wie bereits erzählt, ist die for-Schleife eine nachprüfende Zählschleife, die Schleife hat also nach der 10 die Variable $i nochmal um 1 erhöht, zu diesen Zeitpunkt wurde die Zählschleife noch nicht abgebrochen. Nun wird überprüft ob die Abbruchbedingung TRUE ist, da sie hier nicht mehr TRUE ist (11 > 10 und nicht <=10) wird die Schleife beendet, so kommt es zustande das der Wert in der eckigen Klammer 11 ist und nicht 10.


while-Schleife

Die while-Schleife ist in Hinsicht der Syntax komplett anders aufgebaut als die for-Schleife. Die Syntax ist wie folgt.
[php:1]while( )
{
//Quellcode
}[/php:1]
Hier hast du also keine Startbedingung sondern nur eine Abbruchbedingung. Man könnte sagen, du kannst das Script so schreiben das es solange durchlaufen wird bis eine bestimmte Bedingung erfüllt ist, dies war bei der for-Schleife so nicht möglich, denn da hast du ja einen festen Wert eingestellt. Natürlich hätte man bei der for-Schleife auf eine Variable einsetzen können (Bsp.: $i<=$maximum) nur finde ich ist das umständlicher als wenn man für bestimmte Zwecke die while-Schleife nehmen würde.
Nun kommt wieder die Frage, für was verwende ich denn die while Schleife? Nun was ist wenn du ein Script haben möchtest, welches erst dann abbrechen soll wenn eine bestimmte Bedingung erfüllt ist. Als Beispiel was ganz simples.
[php:1]
$i = 100;
while($i>2)
{
$i = $i / 2;
}[/php:1]
Diese Zählschleife wird solange ausgeführt, bis der Wert, der in $i steht, kleiner bzw. gleich 2 ist. Natürlich könnte man dies auch mit einer for-Schleife machen, aber weißt du immer wie oft man die Zählschleife durchgehen muss bis eine Zahl <= 2 ist? Das kannst du so einfach nicht festlegen.
Wir haben ja vorhin gelernt, dass die for-Schleife eine nachprüfende Zählschleife ist. Die while-Schleife dagegen ist eine vorprüfende Zählschleife, das bedeutet wir überprüfen erst ob die Abbruchbedingung erfüllt ist und werden dann dementsprechend die Zählschleife verlassen oder sie weiter durchlaufen.


Grundlegend kann man sagen, dass man mit Hilfe von Zählschleifen viele Dinge machen kann die sonst sehr mühsam wären. Als Beispiel, wenn du 50 Eingabefelder auf einer Seite ausgeben möchtest, so kannst du einerseits 50 mal dasselbe hinschreiben, oder dir mit Hilfe einer for-Schleife dir die 50 Eingabefelder generieren lassen.
[php:1]for($i=0;$i<=50;$i++)
{
echo '<input type="text" size="10" name="'.$i.'">';
}[/php:1]
Hier werden nun 50 Eingabefelder auf der Seite ausgegeben. Wie du siehst ist es sehr platzsparend, immerhin haben wir über 40 Zeilen gespart. Biggrin

Wichtig ist jedoch immer das Testen der Schleifen, als Neuling baut man schnell ausversehen mal eine Endlosschleife. ^^

Ich hoffe ich konnte dir ein wenig weiterhelfen. Solltest du noch Fragen haben oder sollte etwas unklar sein, einfach melden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2004, 15:28
Beitrag #3
 
gut geschriebenes tutorial. kompliment. kann man sehr gut nachvollziehen und verstehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2004, 16:51
Beitrag #4
 
jo, da muss ich e-phy zustimmen, respekt an Virus ^^
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2004, 16:57
Beitrag #5
 
jep find ich auch
echt klasse könnt man glatt in die seite zu den tuts machen!
mir war das am anfang auch nei so ganz klar aber wenn man das paar mal probiert hat und dann anfängt mir scripten zu proggen versteht man das dann schnell!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2004, 17:50
Beitrag #6
 
Ergänzug zu Schleifen bzw. zu Verzweigungen

Die If Verzweigung ist eine 'entweder - oder' Konstruktion. Sollte die Bedingung zutreffen wird der erste Befehl ausgeführt. Ansonsten(else) kommt der zweite Befehl zum tragen. Eigentlich sehr einfach und simpel und schnell zu verstehen.

[php:1]if(Bedingung)
{Befehl;}
else
{Befehl;}[/php:1]

Dann gibt es noch neben der while Schleife ( einer so genannten Kopfgesteuerten Schleife ) eine Fußgesteuerte Schleife mit dem Namen - Do- Schleife.

Hier mal ein Beispiel:

[php:1]
do{Befehl;} whilfe(Ausdruck)[/php:1]
Hier gilt gleiches wie bei der while Schleife( siehe das Tut von Virus) Es ist im Grunde eine umgekehrte while Schleife. Jedoch wird immer erst am Ende des Durchgangs geprüft ob die Bedingung noch zutrifft, währed bei der while Schleife dies immer zu Beginn geschiet.


und als letztes noch switch() wobei ich da auch keine genauen informationen drüber habe und das auch noch nicht verwendet habe. Hier gibt es dann mehrere Befehle, also eine erweiterung der IF() Verzweigung.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2004, 19:07
Beitrag #7
 
Gut das du das mit Switch ansprichst, kann ich das auch mal kurz erläutern. Die Switch-Anweisung, finde ich, ist eigentlich im Grunde dasselbe wie viele if-Anweisungen. Hier ein Beispiel.
[php:1]if($zahl == 1)
//Quellcode
if($zahl == 2)
//Quellcode
if($zahl == 3)
//Quellcode
if($zahl == 4)
//Quellcode[/php:1]
Diese Aneinanderreihung von if-Anweisungen prüft nur ob in der Variablen $zahl eine 1/2/3/4 steht und führt dann dementsprechend die zugehörige Anweisung aus. (Beachte bitte, wenn du nach einer if-Anweisung nur 1 Sache ausführen willst wie z.B. ein echo Befehl so brauchst du nicht unbedingt die geschweiften Klammern, sind es aber > 1 Befehle so muss du die geschweiften Klammern setzen damit alle Befehle auch ausgeführt werden)
Die Switch-Anweisung ist nichts anderes als das man die ganzen if-Anweisungen in eine Switch-Anweisung reindonnert. Beispiel:
[php:1]switch($zahl)
{
case 1:
//Quellcode
break;
case 2:
//Quellcode
break;
case 3:
//Quellcode
break;
case 4:
//Quellcode
break;
default:
//Quellcode
}[/php:1]
Wie du sehen kannst steht da ganz schön viel, ich will das mal auseinander knöpern. Am Anfang siehst du, dass die Variable die du auf den Inhalt her überprüfen willst in den Klammern steht ( switch($zahl) ). Als nächstes folgt immer per case die Abfrage ob die Variable gleich dem ist was hinter case steht (Vorsicht, Zeichenketten mit Hochkommata angeben), in der ersten Zeile wird also überprüft ob die Variable $zahl gleich 1 ist. Ist sie das, so wird der Quelltext der in case 1 (Vorsicht: hinter case ** steht ein Doppelpunkt) steht ausgeführt. Du siehst dort ebenfalls ein break;, break ist nichts anderes als ein Scriptabbrecher (hui geniales Wort ^^), wenn also die Bedingung wahr ist das $zahl gleich 1 ist, so haben wir ja gelernt das der Quellcode bei case 1 ausgeführt wird. Wir wissen aber so schon, dass, wenn der Wert in $zahl gleich 1 ist, dass er schlecht einen zweiten Wert noch annehmen kann wie z.B. 3 oder so. Also bedeutet dies doch das wir dort aus der Switch-Anweisung "rausspringen" können und somit weniger Zeit für das Gesamtscript benötigen. Selbstverständlich funktioniert das Script auch ohne break; aber dann wird jede Anweisung überprüft ob sie wahr ist und erst dann kann beendet werden.
Du siehst das ich 4 mal case benutzt habe (bis case 4 entspricht des alles wie oben in der if-Anweisung) und einmal default. Default bedeutet, wenn keine der Anweisungen wahr ist, also die Variable $zahl weder 1 noch 2 noch 3 noch 4 ist, so wird default ausgeführt. In default kann man z.B. dann reinschreiben das die Zahl weder 1 noch 2 noch 3 noch 4 ist. Default bei der Switch-Anweisung ist dasselbe wie die letzte else-Anweisung bei der if-Anweisung.
Sicher hast du bemerkt, dass ich bei default kein break; hingeschrieben habe, dass brauchst du auch nicht da default immer zum Schluss geschrieben wird und wenn default am Ende steht kann man schlecht andere Anweisungen in der Switch-Anweisung überspringen, von daher wäre dieser Befehl dort nicht nötig.
Auf eins möchte ich nochmal hinweisen, wenn du unter den case-Bedingungen den Quellcode schreibst, so benötigst du keine geschweiften Klammern, dass Ende einer case-Bedingung wird durch break;, durch ein nächstes case, durch ein default oder durch die geschweiften Klammern der gesammten Switch-Anweisung gekennzeichnet.


@Fresh/e-phy/rene: Danke fürs Lob, geb mir auch Mühe das einigermaßen verständlich zu schreiben, ich könnte noch viel viel mehr dazu sagen nur ist das so mit schreiben recht umständlich.

@e-phy: Wenn es danach geht könnte man auch noch die foreach-Schleife erwähnen aber ich denke das wäre zu Beginn eine zu hohe Datenflut. ^^
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2004, 20:10
Beitrag #8
 
Also erstmal ein großes Danke an dich Virus. Du hast dir wirklich Mühe gegeben, das ließt man Wink

Das ist erstmal ne ganze Menge. Die Switch Anweisung habe ich verstanden, mit if() und else habe ich eh angefangen also kann ich das auch. In meinem Buch steht das auch genauso wie du's geschrieben hast (in Bezug auf Switch) also mit ":" statt ";" und break und das default immer hinten steht usw. Das habe ich soweit verstanden.

Auch das GET[''] immer in der Adresszeile festgelegt wird habe ich verstanden. Ich lese mir deinen Post noch ein paarmal durch und dann hab ichs Wink

Vielen Dank.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2004, 20:12
Beitrag #9
 
Les nicht nur sondern probier bestimmte Dinge auch gleich aus, nur so kannst du das festigen und auch lernen. Denn wir wissen doch alle probieren geht über studieren. ^^ (das son scheiß Spruch auch immer stimmen muss)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2004, 20:17
Beitrag #10
 
Hab ich auch schon herausgefunden. Ist auch so. Ich habe zum Beispiel hier
[http://www.check-the.info/home/sonstiges/kontakt.php]

nen Formular mit dem Inhalt gemacht:
Name: <input type="text" name="name"><br>
<br>
Empfanger: <input type="text" name="empfanger"><br>
<br>
Kommentar:<br>
<textarea name="kommentar" cols="40" rows="10"></textarea><br>
<br>
<input type="submit" name="Submit" value="Hau wech die scheiße">
<?php
$datum = date("d. F Y");
$fehlt = "Bitte fülle alle Felder aus";
if(empty($name))$fehlt;
if(empty($kommentar))$fehlt;
if(empty($empfanger))$fehlt;
else
{
$dl_mail = "$empfanger";
$betreff = "Kontakt";
$text = "$kommentar";
$from = "$name";
mail($dl_mail, $betreff, $text, $from);
}
?>

Warum das net funzt weis ich nicht. Ok, ist auch gestern Nacht gegen 0 Uhr entstanden...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  HTTP_ACCEPT_LANGUAGE geht nicht. Sam Fisher 2 1.663 10.01.2008 14:30
Letzter Beitrag: Sam Fisher
  Query funktioniert nicht Sam Fisher 4 886 04.08.2006 19:01
Letzter Beitrag: White
  PHP Include - Bilder werden nicht angezeigt. dersu 3 1.430 28.07.2006 09:06
Letzter Beitrag: ~Christian
  Png Bilddateien in Opera 8.50 nicht sehbar SanceZZ 9 1.617 16.11.2005 13:56
Letzter Beitrag: SanceZZ
  Variablen im iframe nicht verfügbar Virus 2 873 16.10.2005 13:40
Letzter Beitrag: Virus
  Login-Script fehlerhaft ? kann mich nicht einloggen Novadis 4 969 27.04.2005 13:55
Letzter Beitrag: dino

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
KontaktWebhilfe.infoNach obenZum InhaltArchiv-ModusRSS-Synchronisation