Beiträge von Stef

    Hi,

    ich habe es nun raus. Wie Arne schon gesagt hat, die 20 wird erst/immer bei der ausgabe der methode in der main-methode ausgegeben. Habe nun die methode ohne System.out.printLn(); ausgeben lassen, aufgerufen. Und nun kommt immer die richtige Zahl raus:

    Aha. ok. Ja aber nach meiner bedingung darf es doch die zahl 20 nicht geben. Ich return also den letzten wert der while schleife und das sollte doch die 19 sein. Ok es ist ja klar das beim letzten durchlauf geschaut wird ob man 19 nochmal erhöhen kann mit zahl++ aber das sollte nach der bedingung nicht passieren. Also muss doch 19 rauskommen.

    Hey,

    und zwar, hab ich ne frage zu schleifen in Java.

    Folgender code:

    Da habe ich 2 funktionen erstellt welche 1mal mit while-schleife und 1mal mit for-schleife zahlen ausgiebt. Alles soweit gut. Jedoch wird immer eine zahl mehr als die bedingung zulassen sollte ausgegebn.

    Die Ausgabe von der while schleife ist :

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    von for schleife :

    0
    1
    2
    3
    4
    5


    Ich sag doch bei while schleife das alle zahlen ausgegeben sollen bis sie kleiner als 20 sind, d.h. letzte zahl sollte ja 19 sein. Warum wird dann da 20 ausgegeben ?
    Das selbe bei der for schleife.

    Weiß wirklich nicht warum das so ist.

    Stef

    Ich finde diese Seite top. Sehr gut gelungen. Mir sind da 2 kleine dinge aufgefallen.

    1. Bei den formularen. Hast du ja als value die einzelnen Sachen (Ihr Name, Ihre E-Mail-Adresse, Wie kann ich Ihnen helfen ...) eingetragen. Was ich dir empfehlen würde ist, dies mit dem attribut placeholder zu machen.
    2. Bei diesen grauen blöcken, welche vor den Formularen kommen, ist der Text meiner Meinung nach zu nah links am rand.

    Stef

    @willityp :

    Wenn du diese PHP-Datei mit dem Browser anzeigen lässt, wird dies nicht funktionieren. Denn der einfache Browser kann keine PHP-Dateien verarbeiten und ausgeben.

    Du brauchst einen lokalen Server (z.b. Xampp) oder einen online Server der PHP unterstützt.

    Beim lokalen Server(Xampp, https://www.apachefriends.org/de/index.html) musst du beim xampp-control-panel den Apache-Server starten. Mit diesem kannst du dann local auf deinem PC PHP-Dateien ausführen lassen.
    - Browser öffnen und dann in die taskleiste bei aktiviertem apache server localhost/auszuführende datei reinschreiben, dann ausführen. Die Dateien musst du in den htdocs-ordner ablegen.

    Beim online Server (nehmen wir mal ein freehoster, z.b. bplaced.net) musst du diese php-datei per ftp-programm auf den server hochladen. Dann kannst du sie auch ausführen.

    Für einfache Testzwecke ist Xampp ausreichend.

    Gruß,
    Stef

    Hey,

    wenn ich deine beiden scripts so ausführe funktioniert es.

    Zu deinen Codes:

    HTML:
    - Beschreibungen von den input-feldern macht man in HTML5 mit dem label-tag (<label></label>).
    - Besser ist es wenn du beim submit feld auch einen namen hinzufügst, mit dem du dann im php script erfragst/prüfst ob das Formular bereits abgesendet wurde.
    - Jedes input-tag braucht ein type. Also in deinem Fall brauchst du für den Vor- und Nachnamen den type="text". Siehe https://wiki.selfhtml.org/wiki/HTML/Formulare/input .

    PHP:
    - Als erstes würde ich dir empfehlen das du überprüfst ob das Formular bereits abgesendet wurde.
    - Falls ja erstelltst du dort 2 Variablen, für Vorname und Nachname, dort fügst du dann die $_POST[]-Daten den entsprechenden Variablen zu. Ebenso empfehle ich diese dabei zu filtern (um z.b. XSS Angriffe zu verhindern).
    - Und nach dem kannst du diese 2 Variablen, wo der Vorname und Nachname drin sind, ausgeben.

    Wenn du dies ganze beachtest sollten die Codes so aussehen:

    form.html

    form.php

    Gruß,
    Stef

    @Bandit : Ich habe mir jetzt nochmals paar abschnitte durchgelesen und da stimm ich dir schon zu, besser nochmal bevor man was abschickt nochmals durchlesen. Muss besser darauf achten und dies verständlicher/einfacher erklären.

    Zitat

    Du kannst das prüfen obs true ist weglassen, den isset prüft ja selbst ob die variable besteht und nicht null ist. Daraus kann eigentlich nur true führen. Und du kannst die variablennamen anstatt $_POST['varname'] verwenden. Ist denke ich viel besser so.

    Mit dem meinte ich :
    Man kann die Überprüfung ob isset(varname) === true weglassen , denn isset() prüft ob die variable exsestiert/besteht und nicht null ist. Dadurch ist diese funktion, wenn die variable besteht und nicht null ist, schon true. Ebenso habe ich gesehen das du bei der ausgabe der value in den einzelnen input feldern $_POST['inputname'] verwendest. Ich empfehle dir, dass du diese $_POST-Daten in Variablen ablegst/steckst und zur Ausgabe sowie Weiterverarbeitung, die Variablen verwendest.

    Hey,

    ups sorry. Ich ging immer von ner html-mail aus. Mein Fehler.

    Btw. zu deinem Code nochmals :

    Bei der ausgabe der eingegeben daten vom user. Dort hast du immer isset(varname) geprüft ob dieser true ist:

    PHP
    <?php if(isset($_POST['varname']) === true)

    Du kannst das prüfen obs true ist weglassen, den isset prüft ja selbst ob die variable besteht und nicht null ist. Daraus kann eigentlich nur true führen. Und du kannst die variablennamen anstatt $_POST['varname'] verwenden. Ist denke ich viel besser so.

    Und bei value wenn du den wert der var wenn diese exsestiert und nicht null ist kannst du diese dann einfach so ausgeben, so wie du es gemacht hast ist es etwas aufwendiger:

    PHP
    <input type="text" name="betreff" id="betreff" value="<?php if(isset($varname)) print strip_tags($varname); ?>">

    Gruß
    Stef

    Hey,

    du kannst das was zu html gehört in einem ' ' lassen. Du brauchst nicht für ein <br> tag ein neues ' ' zu erstellen. Der Sinn dieser Operatoren ist etwas zu verketten/verbinden. Auch um PHP-Code mit HTML-Code zu verketten.

    PHP
    $usermessage = $message . ' <br> Telefonnummer: ' . $phone;

    Du hast den <br>-tag zu spät rein gemacht. Versuche es nochmal so bitte. Bei mir funktioniert es wenn ich es teste.

    Dies was ich auf dem Bild sehe kommt dadurch, dass du die datei einfach so im normalen Browser geöffnet hast. Jedoch brauchst du dafür einen Server der PHP auch unterstützt und auch umwandelt. Ich schlage dir for Xampp , https://www.apachefriends.org/de/index.html. Es ist ein lokaler Server. Mit dem du auf deinem PC, lokal, deine .php - codes testen kannst. Und online Server tuhen ja eigentlich alle PHP unterstützen die dafür ausgelegt sind.
    Ich benutze Xampp auch. Ist sehr gut.

    Gruß,
    Stef

    Hey,

    wie Gastl gesagt hat. Man kann <br>-tags (zeilenumbrüche) mit einfügen.

    Zu deinem Problem mit Ausgabe der Errors:

    Es lag an diesem if block :

    Falsch

    Dort hast du bei der ausgabe mit der foreach schleiche die variable $error in html geschrieben. So erkennt der PHP-Interpreter auf dem Server nicht das $error eine php-variable ist.
    Du erreichst es das dieser dies erkennt in dem du die php variable wieder mit dem verkettungsoperator mit den html tags verkettest. Siehe Beispiel:

    Richtig

    Ich würde dir raten für jedes input feld eine eigene Fehlermeldung zu machen.Dann erkennt auch der jenige der das Formular ausfüllt genau wo seine Fehler waren. 
    Ebenso rate ich dir immer bei dem hinzufügen der werte zu den variablen zuerst zu überprüfen ob diese werte vorhanden sind und wenn ja speichere die werte in die variablen wenn nicht setze die variable auf null.

    Siehe Beispiele:
    Fehlermeldungen:

    Überprüfung der Eingabe des Users:

    PHP
    // Hier sofort prüfen ob die User eingabe exsestiert und wenn ja diese der variable hinzufügen wenn nicht ist die variable null
        // Kurschreibweise :  wenn ? dann : sonst;
    
    
        $name        = isset($_POST['name'])  ?  $_POST['name'] : null;
        $email       = isset($_POST['email']) ? $_POST['email'] : null;
        $phone       = isset($_POST['phone'])  ? $_POST['phone'] : null;
        $betreff     = isset($_POST['betreff']) ? $_POST['betreff'] : null;
        $message     = isset($_POST['message']) ? $_POST['message'] : null;



    Natürlich kann man die Fehlermeldungen noch besser machen aber vorerst nur als Veranschaulichung gedacht.

    Gruß,
    Stef

    Hey,

    Ok. Vielen Dank für die gute Hilfe :) Funktioniert jetzt auch alles.

    Ich habe mir nochmals die ganzen array-funktionen durchgelesen. Nun das ich es nochmals verstehe:

    array_filter wird als erstes verwendet und umgibt die anderen array funktionen weil array_filter alle Sachen löscht die FALSE sind, und Sachen die TRUE sind behält diese funktion.
    Dann wird array_map verwendet mit einer anonymen Funktion, die auch Closures genannt werden, (bei dieser brauch man keinen functionname) . Diese funktion gibt alles aus dieser function zurück, braucht dazu die formulardaten.
    Und in dieser function wird array_keys angewandt, welche alle Schlüssel eines Array liefert an die closure (Annonyme Funktion). D.h. arrey_keys liefert der anonymen funktion sozusagen die werte den mitgegebenden Parameter ?
    Dann werden alle Daten mit array_filter gefiltert und die die FALSE sind gelöscht.

    Warum hast du array_keys() in der funktion array_map() verwendet ?

    Gruß,
    Stef

    Sundream : Du musst den Verkettungsoperate ( den Punkt : . ) benutzen.

    Du hast eine Variable, die heißt : $phone. In dieser hast du den Wert aus dem Feld wo der User seine Telefonnummer angeben muss/soll.
    Nun nimmst du diese variable und packst sie in deine mailmessage rein.

    Achso du willst das diese abgesendeten Kontaktformulare zu dir geschickt werden als mail?
    Das habe ich nochnie gemacht aber man kann auch php-variablen mit dem verkettungsoperator verketten.

    Also wenn du die phonenumber mit der message magst würde ich jetzt mal eine neue variable erstellen und dann die var $message und $phone darin verketten und dann diese var in die mail funktion eintragen.

    Beispiel:

    So würde ich es machen. Probier es mal und gebe mal Rückmeldung bitte.

    Stef

    Hey,

    vielen Dank für die guten Ratschläge. Ups... ja ich wollte die Exceptions abfangen.

    Noch paar Fragen:
    1. Warum tuhst du $formulardaten nicht erst zu einem array umwandeln ?
    2. In der function welche schaut ob es errors gibt sprichst du mit $data die felder an und mit $key den namen des feldes ?
    3. Würdest du es bei der ausgabe der errors beim formular auch so machen oder hälst du dies etwas übertrieben?

    PHP
    <label>Vorname:</label><input type="text" name="form[data][vorname]" value ="<?php if(isset($formulardaten['vorname'])) print $formulardaten['vorname']?>"> <?php if(isset($errors['vorname'])){echo $errors['vorname'];} ?><br>
            <label>Nachname:</label><input type="text" name="form[data][nachname]" value ="<?php if(isset($formulardaten['nachname'])) print $formulardaten['nachname']?>"> <?php if(isset($errors['nachname']) ){echo $errors['nachname'];}?><br>
            <label>Wohnort:</label><input type="text" name="form[data][wohnort]" value = "<?php if(isset($formulardaten['wohnort'])) print $formulardaten['wohnort']?>">  <?php if(isset($errors['wohnort']) ){echo $errors['wohnort'];}?><br>

    Folgende Probleme treten jetzt auf:
    1. Die Eingaben werden nicht gefiltert! Es kommt so raus wie man es eingegeben hat.
    2. Es werden folgende Meldungen angezeigt :

    Warning: Missing argument 2 for {closure}() in E:\Web\XAMPP\htdocs\form.php on line 17
    Notice: Undefined variable: key in E:\Web\XAMPP\htdocs\form.php on line 18

    Der variable key wird nie ein wert beim testen zugefügt. Nie. und die Warning meldung kommt bestimmt weil $key nicht deklariert ist ?
    Denn als ich mal $key ganz rausgenommen habe kam keine Meldung mehr. Aber wie kann ich es nun machen ?

    Stef