Hazel: Felder werden selber ausgefüllt

Guten Tag,

ich verstehe derzeit die Welt nicht mehr. Mein Code sieht derzeit so aus:

  
                <div class="textfeld">  
    <label for="a_album_name">Album Titel</label>  
    <input type="text" name="a_album_name" style="width:95%" id="a_album_name" value="<?php echo ($_SESSION["form_data"]['a_album_name']?$_SESSION["form_data"]['a_album_name']:$_POST["a_album_name"]) ?>" />  
  </div>  

und das zweite Feld so:

  
                <div class="textfeld">  
    <label for="a_album_passwort">Album Passwort</label>  
    <input type="password" name="a_album_passwort" style="width:95%" id="a_album_passwort" value="<?php echo ($_SESSION["form_data"]['a_album_passwort']?$_SESSION["form_data"]['a_album_passwort']:$_POST["a_album_passwort"]) ?>" />  
  </div>  

meine Felder sind wenn ich die Seite betrete automatisch ausgefüllt! Wenn ich type="password" auf type="text" ändere, sind alle Felder wieder leer. An was kann das liegen?

  1. @@Hazel:

    nuqneH

    <input type="text" name="a_album_name" style="width:95%" id="a_album_name" value="<?php echo ($_SESSION["form_data"]['a_album_name']?$_SESSION["form_data"]['a_album_name']:$_POST["a_album_name"]) ?>" />

    Kapitalfehler! NIEMALS Nutzereingaben unbearbeitet in HTML einbetten! Sicherheitslücke!

    Kontextwechsel beachten! htmlspecialchars() verwenden!

    und das zweite Feld so:

    Dito.

    An was kann das liegen?

    Am Browser.

    Du suchst das autocomplete-Attribut?

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. Hallo,

      Kontextwechsel beachten! htmlspecialchars() verwenden!

      meinst du so?

        
          <label for="a_album_passwort">Album Passwort</label>  
          <input type="password" name="a_album_passwort" style="width:95%" id="a_album_passwort" autocomplete="off" value="<?php echo (htmlspecialchars($_SESSION["form_data"]['a_album_passwort'])?htmlspecialchars($_SESSION["form_data"]['a_album_passwort']):htmlspecialchars($_POST["a_album_passwort"])) ?>" />  
        </div>  
      
      

      Du suchst das autocomplete-Attribut?

      wenn ich das autocomplete="off" verwende, ist das Feld zwar leer, aber in die Datenbank wird dennoch etwas geschrieben.

      1. @@Hazel:

        nuqneH

        meinst du so?

        <input type="password" name="a_album_passwort" style="width:95%" id="a_album_passwort" autocomplete="off" value="<?php echo (htmlspecialchars($_SESSION["form_data"]['a_album_passwort'])?htmlspecialchars($_SESSION["form_data"]['a_album_passwort']):htmlspecialchars($_POST["a_album_passwort"])) ?>" />

          
        Nein, die [Bedingung](http://www.php.net/manual/de/control-structures.alternative-syntax.php) sollst du nicht durch `htmlspecialchars()`{:.language-php} jagen.  
          
        ~~~php
        <input type="password" name="a_album_passwort" style="width:95%" id="a_album_passwort" autocomplete="off" value="<?php echo $_SESSION['form_data']['a_album_passwort'] ? htmlspecialchars($_SESSION['form_data']['a_album_passwort']) : htmlspecialchars($_POST['a_album_passwort']); ?>" />  
        
        

        oder

        <input type="password" name="a_album_passwort" style="width:95%" id="a_album_passwort" autocomplete="off" value="<?php echo htmlspecialchars($_SESSION['form_data']['a_album_passwort'] ? $_SESSION['form_data']['a_album_passwort'] : $_POST['a_album_passwort']); ?>" />  
        
        

        Beachte auch die einfachen Anführungszeichen im PHP-Code. http://forum.de.selfhtml.org/archiv/2014/3/t216697/#m1486530 ff.

        wenn ich das autocomplete="off" verwende, ist das Feld zwar leer, aber in die Datenbank wird dennoch etwas geschrieben.

        Du setzt einen Wert ins Eingabefeld und wunderst dich, dass das Eingafeld einen Wert hat?

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
        1. Hallo,

          Du setzt einen Wert ins Eingabefeld und wunderst dich, dass das Eingafeld einen Wert hat?

            
          <input type="text" name="a_album_name" style="width:95%" id="a_album_name" value="<?php echo ($_SESSION["form_data"]['a_album_name']?$_SESSION["form_data"]['a_album_name']:$_POST["a_album_name"]) ?>" />  
          
          

          hier lass ich den User ein Titel festlegen, warum wird hier meine eMail Adresse eingetragen die ich beim Login verwende?

          Wenn ich diesen Wert type="password" auf type="text" ändere, werden ALLE Felder richtig angezeigt und es wird nichts ausgefüllt.

          1. Hi,

            <input type="text" name="a_album_name" style="width:95%" id="a_album_name" value="<?php echo ($_SESSION["form_data"]['a_album_name']?$_SESSION["form_data"]['a_album_name']:$_POST["a_album_name"]) ?>" />

            
            >   
            > hier lass ich den User ein Titel festlegen, warum wird hier meine eMail Adresse eingetragen die ich beim Login verwende?  
              
            Woher sollen wir das wissen, wenn wir bisher nur Bruchstücke deines Scriptes gesehen haben?  
            (Und nein, das heißt nicht, bitte lade jetzt einfach das komplette Script hier ab …)  
              
            Betreibe halt mal ein bisschen sinnvolles Debugging!  
            Vielleicht steht in deiner Session ja schon ein falscher Wert drin (bedingt durch falsche Logik, oder vorherige Versuche) … oder du übernimmst den vom Formular übergebenen Wert nicht richtig, entweder in die Session oder in die Datenbank … oder oder oder. Das können wir nicht wissen – also untersuche \*du\* bitte dein Script mit Hilfe geeigneter Kontroll-Ausgaben, um herauszufinden, wo du den Fehler gemacht hast.  
              
            
            > Wenn ich diesen Wert type="password" auf type="text" ändere, werden ALLE Felder richtig angezeigt und es wird nichts ausgefüllt.  
              
            Wie Gunnar anfangs schon andeutete, kann das z.B. am Passwortmanager deines Browser liegen.  
              
            MfG ChrisB  
              
            
            -- 
            Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
            
            1. Betreibe halt mal ein bisschen sinnvolles Debugging!

              Was soll ich denn bitte machen? Sag es mir doch einfach? In der Datei ist NICHT mehr drin! Die Felder werden ausgefüllt sobald type="password" steht! Mehr kann ich nicht sagen, denn ich hab nicht mehr vor mir.

              1. Hallo,

                Betreibe halt mal ein bisschen sinnvolles Debugging!
                Was soll ich denn bitte machen? Sag es mir doch einfach? In der Datei ist NICHT mehr drin!

                ich will doch stark hoffen, dass da mehr drin ist! Zumindest mal das vollständige Formular.

                Und dann zeig doch zumindest mal den clientseitigen Quellcode - also das, was wirklich beim Browser ankommt. Dann verwirrt schon mal das PHP-Gezumpel nicht mehr, und man sieht recht klar, ob das Problem beim Generieren des Dokuments entsteht, oder erst im Browser.

                Wenn dann beim Absenden des Formulars etwas anderes ankommt als in den Eingabefeldern steht, schau dir die POST-Daten an, die zum Server gehen. Auch hier wieder: Macht der Browser Mist, oder liegt das Problem in der Verarbeitung beim Server?

                Die Felder werden ausgefüllt sobald type="password" steht!

                Nur bei DEINEM Browser mit den BEI DIR gespeicherten Formulareingaben und Passwörtern? Falls ja: Dein Browser glaubt anhand der Anzahl, Reihenfolge, Typen und Namen der Eingabefelder, ein ihm bekanntes Formular wiederzuerkennen, zu dem er Eingabedaten gespeichert hat. Probier's zum Vergleich mal mit einem anderen Browser, oder mit dem gleichen Browser auf einem anderen Rechner.

                Mehr kann ich nicht sagen, denn ich hab nicht mehr vor mir.

                Aber selbst da kann man mehr rausholen, als du bis jetzt getan hast.

                Ciao,
                 Martin

                --
                Gott hilft niemandem, er erfreut sich nur an unseren Leiden.
                  (Ashura)
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                1. Hallo Martin,

                  Nur bei DEINEM Browser mit den BEI DIR gespeicherten Formulareingaben und Passwörtern? Falls ja: Dein Browser glaubt anhand der Anzahl, Reihenfolge, Typen und Namen der Eingabefelder, ein ihm bekanntes Formular wiederzuerkennen, zu dem er Eingabedaten gespeichert hat. Probier's zum Vergleich mal mit einem anderen Browser, oder mit dem gleichen Browser auf einem anderen Rechner.

                  OK, ich habe jetzt mal den IE genommen, da ist es wirklich nicht ausgefüllt, nehme ich den FF und Chrome, werden die Daten wieder ausgefüllt. Das ist echt scheiße!

                  Zu dem Problem was in der DB ankommt, OK auch da bin ich etwas weiter, mein Code sieht so aus:

                    
                    
                  		$sql = mysql :: instance();  
                  		$_SESSION["form_data"] = $_POST;  
                  		$sql->table('user_alben')->data($_POST)  
                  				->data('a_album_userID',mysql::instance()->UserDaten()->user_id)  
                  				->ignore(array('abschicken'))  
                  				->password('a_album_passwort')  
                  				->checkRequiredFields()  
                  				->callback(  
                  					function($data){  
                  						$generate = helper :: instance();  
                  						$generate->defineConstant('hashcode',$generate->hashcode()); # will return _HASHCODE_  
                  						$data->data('a_album_kennung',_HASHCODE_);  
                  					}  
                  				)  
                  				->insert();  
                    
                    
                  
                  

                  es liegt an dieser Zeile ->password('a_album_passwort') wenn NICHTS eingetragen wird, dann wird diese Funktion auch ausgeführt und es wird irgendetwas in die DB eingetragen. Ich weiß aber nicht wie ich das verhindern kann.

                  1. Mahlzeit,

                    OK, ich habe jetzt mal den IE genommen, da ist es wirklich nicht ausgefüllt, nehme ich den FF und Chrome, werden die Daten wieder ausgefüllt. Das ist echt scheiße!

                    Nur mal aus Interesse, wieso hast du dem Browser dann gesagt, er soll die Daten speichern? Der macht das nicht, weil er dich ärgern will sondern weil es ihm gesagt wird.

                    wenn NICHTS eingetragen wird, dann wird diese Funktion auch ausgeführt und es wird irgendetwas in die DB eingetragen.

                    Klar macht er das, da du ihm das  so sagst. Wenn du eine Abfrage willst, bau eine ein.

                    --
                    42
                    1. Hallo,

                      Klar macht er das, da du ihm das  so sagst. Wenn du eine Abfrage willst, bau eine ein.

                      Ok, so geht es wohl:

                        
                      	->callback(  
                      		function($data){  
                      		$generate = helper :: instance();  
                      		$generate->defineConstant('hashcode',$generate->hashcode());  
                      		$data->data('a_album_kennung',_HASHCODE_);  
                      		if($_POST["a_album_passwort"]){  
                      		$data->password('a_album_passwort');  
                      		}  
                      		}  
                      		)  
                      
                      

                      Ob $_POST['a_album_passwort'] überhaupt gesetzt ist, hast du hier übrigens noch nicht geprüft.

                      Wie kann ich denn dieses noch prüfen? Mein Code sieht ja derzeit so aus:

                        
                          <label for="a_album_name">Album Titel</label>  
                          <input type="text" name="a_album_name" style="width:95%" id="a_album_name" autocomplete="off" value="<?php echo ($_SESSION["form_data"]['a_album_name']?$_SESSION["form_data"]['a_album_name']:$_POST["a_album_name"]) ?>" />  
                      
                      
                      1. Mahlzeit,

                        Deine Antwort sagt mir, dir fehlen programmiertechnische Grundlagen. Liege ich da richtig? Wie ist dein Wissen über Programmierung?
                        Es macht keinen Sinn, einen Lösungsansatz zu geben, wenn du nicht das nötige Wissen hast, ihn umzusetzen ;)
                        ALso erzähl, dann kann dir geholfen werden

                        --
                        42
                        1. ALso erzähl, dann kann dir geholfen werden

                          Naja ich sag mal so, ich bin am lernen, hab eine Lern-DVD von Video2Brain offen und php.net da habe ich auch dieses gefunden: https://php.net/manual/de/function.isset.php also kann ich mit isset etwas prüfen. Die Frage ist, ist es denn schlimm, wenn ich dieses nicht mache? Fehler sehe ich auf meiner Seite nicht und es kommt alles in meiner Datenbank richtig an.

                          1. Mahlzeit,

                            Die Frage ist, ist es denn schlimm, wenn ich dieses nicht mache? Fehler sehe ich auf meiner Seite nicht und es kommt alles in meiner Datenbank richtig an.

                            Dann setz mal das error_reporting auf E_ALL, wenn du dann dein Script so weit hast, dass keine Meldungen im Log kommen, reden wir weiter ;)

                            --
                            42
                          2. Hallo,

                            Naja ich sag mal so, ich bin am lernen, hab eine Lern-DVD von Video2Brain offen und php.net ...

                            also hast du bisher weder wirklich Ahnung, was du da tust, noch grundlegende Erfahrung im Entwickeln und Debuggen von Software. Das war von Anfang dieses Threads an auch mein Eindruck. Die Tatsache, dass du das Problem im Themenbereich HTML einstellst und zunächst einen bunt gemixten Wust von HTML- und PHP-Code zeigst, obwohl das eigentliche Problem entweder beim Browser liegt (Autofill/Autocomplete) oder bei der serverseitigen Auswertung der Eingaben, unterstreicht diesen Eindruck.

                            Gleichzeitig scheinst du eine sehr komplexe PHP-Klasse einzusetzen, ohne uns zu verraten, was es wirklich ist, und vermutlich auch ohne wirklich zu wissen, was die wiederum tut. Du reagierst überrascht, wenn man dich auf die Missachtung von grundlegenden Prinzipien wie kontextspezifisches Maskieren oder Escaping hinweist.

                            Kurz und gut: Ich glaube, du versuchst dich an Aufgaben und Lektionen, die deinem Kenntnisstand weit voraus sind. Und das ist IMO keine gute Idee. Ich denke, du solltest zunächst kleinere Brötchen backen und dich ein wenig in die Grundlagen "reinfuchsen".

                            ist es denn schlimm, wenn ich dieses nicht mache?

                            Schlimm ist relativ. Sicher wird deswegen nicht die Welt untergehen, aber mit der Strategie wirst du bestenfalls immer nur Detaillösungen erzielen, ohne zu verstehen, warum sie funktionieren, und läufst damit Gefahr, bei nächster Gelegenheit in einer ähnlichen Situation wieder denselben Fehler zu machen - und genauso hilflos dazustehen, weil du die Lösung nicht wirklich verstanden hast.

                            Fehler sehe ich auf meiner Seite nicht ...

                            Das könnte auch daran liegen, das du sie bloß nicht anzeigen lässt.

                            So long,
                             Martin

                            --
                            Der Professor sitzt beim Essen in der Mensa. Ein Student setzt sich ihm unaufgefordert gegenüber.
                            Professor: Seit wann essen denn Schwein und Adler an demselben Tisch?
                            Student:   Na gut, dann flieg' ich eben zum nächsten Tisch.
                            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              2. Hi,

                Betreibe halt mal ein bisschen sinnvolles Debugging!

                Was soll ich denn bitte machen? Sag es mir doch einfach? In der Datei ist NICHT mehr drin! Die Felder werden ausgefüllt sobald type="password" steht!

                Hast du denn jetzt endlich mal überprüft, ob der Passwort-Manager deines Browsers seine Finger im Spiel haben könnte?

                Mehr kann ich nicht sagen, denn ich hab nicht mehr vor mir.

                Soeben hast du uns noch was von einer Datenbank erzählt, in die irgendwas eingetragen wird.

                MfG ChrisB

                --
                Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
                1. Hast du denn jetzt endlich mal überprüft, ob der Passwort-Manager deines Browsers seine Finger im Spiel haben könnte?

                  Ja, hab dazu etwas geschrieben http://forum.de.selfhtml.org/?t=217244&m=1491562

      2. wenn ich das autocomplete="off" verwende, ist das Feld zwar leer, aber in die Datenbank wird dennoch etwas geschrieben.

        Und was steht im HTML?
        Es macht nicht viel Sinn ein Passwortfeld vorzubelegen. Vielleicht zeigt der Browser deswegen nichts an?

      3. Hi,

        meinst du so?

        <input type="password" name="a_album_passwort" style="width:95%" id="a_album_passwort" autocomplete="off" value="<?php echo (htmlspecialchars($_SESSION["form_data"]['a_album_passwort'])?htmlspecialchars($_SESSION["form_data"]['a_album_passwort']):htmlspecialchars($_POST["a_album_passwort"])) ?>" />

        Nein, bei der „Abfrage“ gehört kein htmlspecialchars hin.

        <input … value="[code lang=php]<?php echo htmlspecialchars($_SESSION['form_data']['a_album_passwort'] ? $_SESSION['form_data']['a_album_passwort'] : $_POST['a_album_passwort']); ?>" />[/code]

        – „wenn $_SESSION['form_data']['a_album_passwort'] nicht gleich false ist, dann nimm diesen Wert, sonst $_POST['a_album_passwort'] – und gebe das Ergebnis davon mit htmlspecialchars behandelt aus.“

        Ob $_POST['a_album_passwort'] überhaupt gesetzt ist, hast du hier übrigens noch nicht geprüft.

        (Und entscheide dich mal zwischen " und ' – die ständige Vermischung bei der Kennzeichung von Array-Keys, so wie du sie betreibst, macht das ganze nicht unbedingt übersichtlicher.)

        wenn ich das autocomplete="off" verwende, ist das Feld zwar leer, aber in die Datenbank wird dennoch etwas geschrieben.

        Na dann machst du wohl noch an einer anderen Stelle in einem Script was falsch.

        MfG ChrisB

        --
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/