Naja, nun stehts wenigstens der Vollständigkeit halber da
Beiträge von Nitamud
-
-
Hi,
@nitamund .. das hier ist unnötig und verursacht nur mehr Traffic und weniger Übersicht.:Jap, ich habs nur der Vollständigkeit halber so geschrieben, da es sonst nicht XHTML konform ist:
"In XHTML, attribute minimization is forbidden." -
-
-
und wenn ich mir das so anschaue kann man dann das php nach dem "öffnenden" <?php weglassen?
und aus deinem PHP script werde ich ebenfalls nicht ganz schlau.
Die prinzipielle Vorgehensweise ist verstanden nur die Umsetzung nicht wirklich.Vllt ein konkretes bsp ?
Kann man , wenn die php.ini entsprechend definiert ist, sollte man aber vermeiden.
http://php.net/manual/en/ini.core.php#ini.short-open-tagBenutz lieber nur <?php und <?= (ab 5.4 immer verfügbar).
Um nocheinmal auf mein Script zu kommen(das ich übrigens genau für dein Formular geschrieben habe).
Ich lege anfangs zwei assoziative Arrays fest, eines mit den name-Attributen aller Formularfelder(außer dem Submitbutton) und
ein anderes mit allen Pflichtfeldern. Zudem iniatilisiere ich eine Prüfvariable die anfangs auf false steht(da am Anfang ja noch kein Fehler ist).
Dann durchlaufe ich das Array mit allen Feldern und prüfe , ob unter dem selben Schlüssel im Pflicht-Array auch ein Wert vorliegt.
Falls ja, handelt es sich um ein Pflichtfeld und ich prüfe ob der entsprechende Post-Wert gesetzt ist. Ist dem so , wird genauso
wie wenn kein Pflichfeld vorliegt der übertragene Wert im Input-Array gesetzt um im später im Formular wieder auszugeben und die Benutzerfreudnlichkeit
zu erhöhen. Liegt allerdings ein Pflichtfeld vor, welches nicht gesetzt ist im übertragenen $_POST-Array setze ich im entsprechenden Pflicht-Array den Wert
auf die CSS-Klasse um später darauf graphisch aufmerksam zu machen, zudem setzte ich die Prüfvariable noch auf true da nun ein Fehler vorliegt.mfg Nita
-
Und ehrlich ist die Umsetzung in der Tabelle doch naja schöner vllt ist es nicht so "modern" oder semantisch oder ne Katastrophe, ok aber es muss nicht perfekt sein und trotzdem finde ich siehts besser in der Tabelle aus. Auch wenns von Google-Bots oder anderen nicht gut ausgelesen werden kann
Naja die Gestaltung muss dann eben von dir via CSS vorgenommen werden, das so ein 0815 HTML-only Formularnicht so toll aussieht ist doch völlig selbstverständlich
Im Grunde nimmst du dir durch den Einsatz von Tabellen viel gestalterischen Spielraum. Ich bleibe bei meiner Meinung das man Tabellen nur für tabellarische Inhalte einsetzen soll , aber jedem das seine, da muss jeder selbst draufkommen -
Und dann noch zum PHP:
Dort nutze ich immer eine recht einfache Struktur um die Pflichfelder zu prüffen. $error gibt an ob ein Fehler gefunden wurde true/false und $style gibt den Namen der CSS-Klasse an , die bei einem nicht ausgefüllten Feld in Erscheinung treten soll(bei mir meist ein Rahmen oder Ähnliches). Dann setze ich anfangs alle Felder in einem Assoziativen Array($input) mit den Name-Attributen der zu verarbeitenden Felder und setze den Wert auf einen Leerstring. Zudem erstelle ich ein Array mit den Pflicht-Feldern($pflicht) , bei dem ich mit selbem Prinzip vorgehe. Nachher prüfe ich die Post Variablen und setzte bei einem leeren Feld die Fehlerklasse und sonst den jeweiligen Input, um ihn unten wieder in die Felder zu schreiben.
(Hoffe ich konnte das einigermaßen erklären, sonst bitte nachfragen)PHP
Alles anzeigen//Intialisierung von Prüfvariablen $error = false; //Style markiert den Namen der CSS-Klasse $style = " error"; //Array mit Pflichtfeldern $pflicht = []; $pflicht['spontan'] = ''; //Array mit allen Feldern $input = array(); $input['spontan'] = ''; //Prüfung ob alle Pflichtfelder ausgefüllt wurden foreach($input as $key => $value) { if (isset($pflicht[$key]) && empty($_POST[$key])) { $pflicht[$key] = $style; $error = true; } else { $input[$key] = $_POST[$key]; } } ?>
Nachher überprüft man noch ob das Formular abgesendet wurde und alles ausgefüllt wurde und bindet dann eben das zweite Formular auch noch ein/oder nicht:
Zu deiner Frage: https://phpsecurity.wordpress.…3/the-danger-of-php_self/
Hoffe mal ich konnte dir ein wenig helfen, sonst einfach nachfragen
-
So, ich fange hier mal beim HTML an:
das ist so einfach semantisch und auch logisch eine Katastrophe(sry) :
zur Darstellung eines Formulars sollte man keine Tabellen benutzen, nutz stattdessen die HTML-Tags fieldset,legend,label.
Eine textarea hat kein value-Attribut, der Inhalt steht hier direkt ziwschen den zwei Textarea Elementen.Zudem noch eine Anmerkung $_SERVER['PHP_SELF'] ist unsicher , nutz staddessen $_SERVER['SCRIPT_NAME'].
Hier mal eine kleine, schnelle , sauberere Umsetzung des Formulars:
HTML
Alles anzeigen<!DOCTYPE html> <html> <head> <title>PHP / MySQL - Tutorial 1</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <h2>Wir bitten euch um eure Meinung</h2> <form action="<?=$_SERVER['PHP_SELF']; ?>" method="POST"> <fieldset> <legend>Bitte füllen Sie alle mit <span class="pf">*</span> gekennzeichneten Felder aus (Pflichtfelder)</legend> <input type="submit" name="weiter" id="weiter" value="Weiter" /> <p> <label for="spontan">Was bedeutet für dich Heimat </label> <textarea rows="6" name="spontan" id="spontan" class="<?=$pflicht['spontan']?>"><?=$input['spontan'];?></textarea> </p> <p> ~ 5 Wörter, Trennung p. [Enter], möglichst spontan ~ </p> </fieldset> </form>
Soweit zum HTML
-
Verwirrend erklärt.
Jap meine Formulierung oben ist ein wenig unglücklich, danke fürs Verbessern
Hier nochmal eine Übersicht der Casts für Booleans in Form einer Tabelle:[Blockierte Grafik: http://img3.fotos-hochladen.net/uploads/typeboola0pbveox9t.png]
-
Zitat
Hallo
alle zusammen,1.Ich wollte die Notiz "undefinierter Index" mit isset()
unterdrücken. Dann brachte er aber bei der Kontrolle (code zeile
eins bis sieben) "1" raus.isset() liefert einen Wahrheitswert zurück , und dies ist falls die Variable gesetzt wurde 1.
Zitat
2.Ich verstehe nicht warum die Klammer der if Funktion in Zeile 34
umbedingt in der PHP funktion (Zeile 64) liegen muss damit das
Formular ausgefüllt wird.Denn die else Funktion fängt in Zeile 67 an die hat doch mit dem if
nichts mehr zu schaffen.Eine Else-Struktur gehört immer zu einer if-Verzweigung und diese gehört eben zu jener aus Zeile 34.
Diese Struktur bewirkt, dass wenn ein Feld nicht ausgefüllt wurde, das ganze HTML-Formular ausgegeben wird.
Darum wird auch das if erst nach dem HTML-Bereich geschlossen und dort das HTML definiert.Zitat
[size=10][size=12]
3.Ich verstehe auch nicht warum das Hidden Feld verhindert dass direkt
am anfang beim öffnen der Seite die Fehlermeldungegen unterdrückt
werden das nichts ausgefüllt wurde.ZitatZitatLass dir mal via
die übertragenen Werte ausgeben, hier läuft es bei der Überprüfung darauf hinaus das geprüft
wird ob ein Wert in $_GET['abgesendet'] vorliegt, wenn ja ist das Formular schon aufgerufen
worden oder die URL entsprechend manipuliert worden.Zitat
[size=10][size=12]Desweiteren würde mich noch interresieren ob ihr meine Beschriftung und den
Aufbau des PHP Programmes gut und übersichtlich findet ?ZitatZitatNein,
da du mit dem @ Zeichen Fehlermeldungen bewusst unterdrückst, was man vor allem während dem Entwickeln
nie verwenden sollte. Du solltest lieber am Anfang der Dateischreiben um ein besseres Debugging zu ermöglichen.
Zudem behandelst du Kontexwechsel überhaupt nicht, Usereingaben darfst du nie ohne entsprechende Behandlung
http://php.net/manual/en/function.htmlspecialchars.php
ausgeben. Gib mal probehalber in einem Feld <script>alert('Hackalarm');</script> ein und du versteht was dahintersteckt ->
eine Riesensicherheitslücke. Zudem fehlt eine gute Überprüfung , da würde ich ein isset/empty und strlen bevorzugen.So das wars erstmals, ich hoffe ich konnte dir ein wenig helfen
-
Das liegt an der Zeichenkodierung, allgemein würde ich empfehlen alles auf Utf-8 zu stellen. Überprüf am Besten überall deine Kodierung(Datenbank, Header, HTML, Datenbankverbindung).
-
Was hat das jetzt mit dem Umkopieren von POST Variablen zu tun?
Hallo,
Basiii spielt wohl oben darauf an das du die Logik und die Verarbeitung der Daten direkt im Formular vornimmst was eigentlich
bad practice ist. IM HTMl sollen nur reine Ausgaben und keine Programmstrukturen vorkommen.Schau dir hierzu mal das EVA-Prinzip(Standardverfahren) an,
gegen dies sowas wie oben klar verstößt.mfg Nita
-
Ich grüble hier jetzt schon eine Weile an einem Problem und ich komme einfach nicht auf meinen Denkfehler.
Mir werden via $_POST folgende Werte übertragen:Array
(
[name] =>
[telefon] =>
[telefax] =>
[strasse] =>
[plz] =>
[ort] =>
[id] => 0
)nun prüfe ich bei jedem Wert , ob er leer ist, aber außer bei 0 ergibt sich immer false
PHPforeach ($_POST as $key => $value) { if (empty($value)) { echo "leer<br>"; } else { echo "nicht leer<br>"; } }
Dies erzeugt folgende Ausgabe:
nicht leer
nicht leer
nicht leer
nicht leer
nicht leer
nicht leer
leerEine Prüfung bei einem normalen Leerstring "" ergibt wie erwartet true.
Habe ich da etwas übersehen? ich dachte nämlich immer ein Leerstring als Post-Wert wäre leer
mfg Nita
Nachtrag:
Habe es nochmal überprüft und die Post-Werte sind nicht wie erwartet Leerstrings, sondern Leerstrings mit der Länge 1,
dadurch hat sich das ganze geklärt -
Gibt es hier in diesem Forum zufällig einer, der sich mit Javascript etwas auskennt und diese Steuerung hinzubekommen?
Würde es am ehesten mit einem canvas-Element umsetzen , dem du als Hintergrund dieses Band gibtst.
Die Schachteln dann mit Vektoren/reinen Koordinaten auf den entsprechenden Kreisbahnen drehen lassen,
wenn der MouseClick ausgelöst wird. Schaut so betrachtet nicht besonders schwierig aus, aber ich bin
auch nicht so ganz auf fit mit den Manipulationsmöglichkeiten dort.Dazu mal ein kleines Tut: http://www.html5canvastutorial…5-canvas-animation-stage/
Und natürlich finden sich dort auch bei Mozilla viele Beispiele: https://developer.mozilla.org/…Tutorial/Basic_animations
Theoretisch dürfte sowas aber auch schon durch reines CSS lösbar sein, kannst dir ja auch mal
anschauen ob du einen Weg ohne JS/Flash findest -
Nitamud ich glaub nicht. Denn Serverseitig wird ja sicherlich per PHP die Sql-db ausgelesen.
Wenn die Verbindung offen bleibt (wenn ich long polling richtig verstanden hab), dann müsste ja das PHP script eine Endlosschleife sein.
Das wäre evtl unnötig. Aber es gibt ja bei jedem Problem mehrere Lösungen.Long Polling zielt hier vor allem auf eine Live-Übertragung neuer Daten ab, wenn allerdings nur bei einem bestimmten Ereignis(click etc.)
die Daten geupdatet werden sollen, ist dies wie du richtig sagst natürlich übertrieben. Einen recht schönen Überblick über die verschiedenen
Verbindungsarten bietet mMn diese Stackoverflow-Seite:http://stackoverflow.com/quest…sent-events-sse-and-comet
Den Vorteil den Long Polling gegenüber normalem Ajax-Polling hat liegt vor allem darin, das sie Anzahl der Requests kleiner gehalten wird.
Am Besten schaust du Schmakus dir die Verbindugsarten in Verbindung mit deinem Ziel an und entscheidest dann, was das von dir
Gewünschte am Besten umsetzen kann -
Hi!
Welche weiteren Möglichkeiten gibt es, die MySQL Tabelle ständig zu aktualisieren?
Am besten wäre eine Abfrage der SQL Datenbank im Hintergrund und sofern dort eine Änderung stattfindet soll die HTML Tabelle neu aufgebaut werden.Das klingt mir sehr danach als ob hier Long Polling gebraucht werden würde.
Suchbegriffe sind da : Long Polling jQuery AjaxLong Polling beendet die Vebindung zum Server nämlich nicht und wartet immer bis an einer Stelle neue Daten vorliegen
mfg Nita
-
So wolf,
ich hab dein obiges Layout mal mit Flexbox umgesetzt :
HTML
Alles anzeigen<body> <!--Leerzeile am Ende--> <div class="container small"> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div> <!--Ende Leerzeile--> <!--Erste Reihe --> <div class="container"> <div class="klein"> <div></div> <div></div> </div> <div class="klein"> <div></div> <div></div> </div> <div class="gross"></div> <div class="klein"> <div></div> <div></div> </div> <div class="klein"> <div></div> <div></div> </div> <div class="klein"> <div></div> <div></div> </div> </div> <!--Ende Erste Reihe--> <!--Beginn Zweite Reihe--> <div class="container"> <div class="gross"></div> <div class="klein"> <div></div> <div></div> </div> <div class="klein"> <div></div> <div ></div> </div> <div class="klein"> <div ></div> <div></div> </div> <div class="gross"></div> </div> <!---Ende Zweite Reihe--> <!--Leerzeile am Ende--> <div class="container small"> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div> <!--Ende Leerzeile--> </body> </html>
CSS
Alles anzeigen* { margin: 0; padding: 0; } /*Standard Flexbox mit 2 Blöcken Höhe*/ .container { background-color: black; display: -webkit-flex; display: -ms-flex; display: flex; height: 33.33vh; width: 100%; } /* Spezialklasse für Flexboxen mit 1nem Block Höhe*/ .small { height: 16.66vh; } .small div{ -webkit-flex: 1; -ms-flex: 1; flex: 1; float: left; background-color: red; outline: 2px solid black; } /* Layout für die 2*2 Blöcke */ .gross{ background-color: green; -webkit-flex: 2; -ms-flex: 2; flex: 2; outline: 2px solid black; } /* Layout für die 1*1 Blöcke*/ .klein { background-color: #BABABA; -webkit-flex: 1; -ms-flex: 1; flex: 1; height: 100%; } .klein div { width: 100%; height: 50%; float: left; outline: 2px solid black; background-color: red; }
Lifedemo: http://codepen.io/Nitamud/pen/EabrOZbzw. hintergrundfarbenfrei:
http://codepen.io/Nitamud/pen/OPOddd
Herausgekommen ist eine gar wilde Suppe aus Divs , aber das Layout steht
Wie stellst du dir denn das mit dem Ändern per JS vor? Habe dort noch nicht genau verstanden, wie du das planst
mfg Nita
-
-
-