Nope, habe das auf Stackoverflow gefunden:
https://stackoverflow.com/questions/3327…ase-sensitivity
Steht aber mit Sicherheit irgendwo in der Dokumentation, habe allerdings selber auch nichts gefunden.
Nope, habe das auf Stackoverflow gefunden:
https://stackoverflow.com/questions/3327…ase-sensitivity
Steht aber mit Sicherheit irgendwo in der Dokumentation, habe allerdings selber auch nichts gefunden.
Alles klar. Habe mich schon gewundert, schließlich ist das bei einem solchen Online-Angebot definitiv Pflicht.
Joa, gut. Das andere wäre dann etwas übertrieben gewesen.
Du musst halt versuchen, die Keys zu erhalten und darfst kein Eintrag löschen, wenn der Fehler nicht vorhanden ist, sondern einfach nur gleich einem leeren String oder null setzen.
Im Idealfall baust du dir natürlich sowas in die Richtung auf: https://github.com/alexgarrett/violin
Alternativ würde ich einfach mit einem assoziativen Array arbeiten.
Um was genau geht es denn? Dann kann man da vielleicht spezifischer drauf eingehen.
Oh, wieder was dazu gelernt. Klassennamen sind case insensitive...
Würde es übrigens trotzdem ändern und die Klasse so schreiben, wie sie definiert wurde. Also DateTime.
Nett gemacht, besonders das Maskottchen. ![]()
Aber wo ist das Impressum und die Datenschutzerklärung? ![]()
![]()
Jep, habe ich ja auch schon drauf hingewiesen.
Habe mich nur dummerweise von abbringen lassen, da Stef ja schrieb, dass die Werte bis zur Subtraktion vorhanden sind. Damit meinte er allerdings die Eigenschaften der Klasse und nicht die lokalen Variablen $ankunftstag bzw. $abfahrtstag. Mein Fehler, nicht gut genug aufgepasst.
Wobei es mich wundert, dass PHP da kein Fehler schmeißt... Sollte doch eigentlich etwas in die Richtung Class not found produzieren.
Das ist schön und gut, nur leider kann ich damit wenig anfangen, wenn ich nicht genügend Infos habe bzw. dies nicht mit eigenen Augen sehen kann.
Was meinst du genau mit "ohne function und Eigenschaft weiterverarbeiten"?
Wie interagierst du mit der Klasse?
Ich habe dir mal ein paar Kommentare im Code hinterlassen...
private $bookedDays;
private $totalCost;
public function setBookedDays() {
$ankunftstag = new Datetime($this->ankunftstag); // Datetime sollte doch eigentlich DateTime sein
$abfahrtstag = new Datetime($this->abfahrtstag); // woher kommt $this->ankunftstag und $this->abfahrtstag?
// subtrahieren
$days = $abfahrtstag->diff($ankunftstag);
$this->bookedDays = $days->format("%a"); //%a gibt die Anzahl der Tage zurück
}
public function getBookedDays() {
return $this->bookedDays;
}
public function setTotalCost() {
$gesamtKosten = self::PRICE * $this->bookedDays; // -> das ist der Endpreis // woher kommt self::PRICE?
$this->totalCost = $gesamtKosten;
}
public function getTotalCost(){
return $this->totalCost;
}
Alles anzeigen
Hast du schon die unterschiedlichen Werte der verschiedenen Variablen mittels var_dump() überprüft?
Das ist aber nicht der ganze Code...
Bekommst du irgendwelche Fehler?
Was du auf jeden Fall beachten musst, ist, dass alle Attribute/Eigenschaften, die du mit $this->attributname aufrufst, auch oben in der Klasse definiert sein müssen.
Damit hast du Recht. Und selbst 1200px ist für den Text schon zu breit. Wenn du möchtest, das viele Besucher gerne deine Artikel lesen solltest du das gesamte Layout vielleicht noch einmal überdenken. Die meisten Inhaltsorientierten Blogs nutzen einen von 600 bis 850px breiten Textcontainer. Das wäre also 1200px breite abzüglich 1/3 Sidebar. Oder halt generell etwas schmaler.
Außerdem sehe ich keine Suchfunktion. Das solltes du noch mit einbinden.
Du hast zwar recht, aber mein Fokus liegt nicht unbedingt auf dem Blog.
Ich werde ohnehin nur ca. alle 2 Wochen einen Artikel veröffentlichen. Soll mehr meine Portfolio-Website ergänzen und steht damit nicht im Mittelpunkt.
Außerdem bin ich kein Freund von großen Sidebars und Co, da damit der Content ein wenig seine zentrale Rolle verliert. So liegt der Fokus zu 100 Prozent auf dem Text sowie den Bildern.
Die Suchfunktion gibt es u.a. aus technischen Gründen nicht. Ich nutze für die Website kein CMS wie WordPress, sondern Jekyll. Eigentlich ist meine Website also statisch.
Werde erstmal die nächsten Monate ausprobieren, ob ein richtiger Blog überhaupt was für mich ist und dann steige ich wahrscheinlich auf WordPress um. Wenn ich soweit bin, werde ich deine Tipps also gerne berücksichtigen. Aktuell passt das aber noch nicht so wirklich.
Kein Ding. Schön, dass es funktioniert. ![]()
hmm, das einzige wo ich sagen würde, ist auf der Startseite -> Über mich ist enorm viel Text?
Ansonste wirkt alles so riesig wenn du verstehst was ich meine.
Aber ist natürlich Ansichtssache
Das stimmt. Der Text ist tatsächlich ein wenig lang. Werde den noch mal überarbeiten.
Dass alles so riesig ist, ist bewusst so.
Bin kein großer Fan von geringen Schriftarten und Co, besonders weil es dann später auf dem Handy zu klein wird und der Lesbarkeit schadet das ja auch nicht, oder?
Alles anzeigenKleinigkeiten sind zu beanstanden.
Zum Beispiel solltest du mal schauen, wie die Website bei größeren Auflösungen aussieht. Dann würde dir auffallen, das es keine so gute Idee ist, dem .article_text eine Maximalbreite von 1200px zuzuweisen, aber das darüberliegende Header-Image unbegrenzt skalieren zu lassen. Das sieht bei höheren Auflösungen einfach nicht gut aus. (Bsp 4k Monitor mit 150% Zoom).
Und kleinere Grammatik und Rechtschreibfehler.
Bsp: Damals, als ich mit dem Projekt begonnen habe,
Auch der generelle Schreibstil wirkt wenig professionell.
"Dabei war es mir erstmal allerdings nicht so wichtig"
Größere Auflösungen habe ich mir noch gar nicht so wirklich angeschaut, da mein Monitor nur eine Full-HD-Auflösung hat.
Hast du für den speziellen Fall einen Vorschlag? Der Grund für die Begrenzung auf 1200px ist hauptsächlich, dass der Text sonst sehr lang wird und dann schwer zu lesen wird.
Wegen der Rechtschreib- und Grammatikfehler werde ich die Texte noch mal durchschauen. Danke für den Hinweis.
Bzgl. Schreibstil: Wo ist der deiner Meinung nach besonders unpassend oder im negativen Sinne ausgeprägt?
Habe halt stellenweise durchaus auch bewusst ein wenig unprofessionell geschrieben, um die Texte nicht so langweilig klingen zu lassen.
Die Artikel, die jetzt in Zukunft im Blog erscheinen werden, haben dann einen professionelleren Stil. Zumindest werde ich das versuchen. ![]()
Edit: Du hattest deine Beispiele ja aus dem Text der Webdesign JR Übungsprojekt Ressource. Ich habe den Text mal ordentlich mithilfe dieses Tools überarbeitet sowie die Fehler korrigiert. Würdest du sagen, es ist jetzt besser? Bin mir nicht sicher, inwiefern das Tool was taugt. ![]()
Auch den Text auf der Startseite habe ich ein wenig gekürzt, wobei es sein kann, dass ich mich da auch nochmal intensiver dran setze.
Wenn du meinen Code von dem ursprünglichen Post einfach kopierst und dann bei mail() $from zu $headers änderst, sollte alles passen.
Ansonsten musst du noch mal genau sagen, welche Fehler du bekommst.
Danke, freut mich. Irgendwas zu beanstanden? ![]()
Vermutlich ja. Sehe gerade auch nichts Weiteres.
Schönen guten Abend,
ich habe in den letzten Monaten an meiner eigenen Website gearbeitet und am Dienstag war sie dann soweit, in die große weite Welt freigelassen zu werden: https://jr-cologne.de/
Der wesentliche Zweck der Website ist eine Art zentrale Anlaufstelle für meine Online-Aktivitäten im Bereich Webentwicklung und Co zu sein.
Dementsprechend setzt sich meine Website aus einem Portfolio, einer Ressourcen-Sammlung sowie einem Blog zusammen.
Wer interessiert ist, kann einfach mal vorbeischauen. Des Weiteren könnt ihr hier gerne auch ein wenig Feedback dazu hinterlassen. [Blockierte Grafik: http://www.coding-board.de/styles/default/xenforo/clear.png]
Gruß
JR Cologne
Ok, ich gehe das mal nach und nach durch und bin dabei jetzt auch mal etwas pingeliger:
1. Die if-Bedingung sowie die letzte Fehlerausgabe
if ($_POST['von'] !="" and $_POST['mail'] != "" and $_POST['nachricht'] !="") {
//
} else {
echo "Bitte füllen Sie alle Felder aus!";
}
Das "Hauptproblem" ist hierbei deine Abfrage, ob die Felder leer sind. Das funktioniert zwar, kann man aber schöner mit der Funktion empty() lösen. Auch würde ich den Und-Operator "&&" statt "and" benutzen.
Des Weiteren solltest du nicht einfach nur Text ausgeben, sondern diesen auch in HTML-Tags packen. Ein einfaches <p> oder <p><strong> reicht da völlig aus.
Genauso ist es in dem Fall überflüssig, die doppelten Anführungszeichen zu nutzen, da sich innerhalb des Strings z.B. keine Variable befindet, die PHP interpretieren muss.
Grobe Faustregel für Anführungszeichen bei Strings:
Einfacher Text mit HTML -> einfache Anführungszeichen ('), da der String dann nicht interpretiert wird, was unnötige Arbeit wäre.
Text, HTML und Co mit eingebetteter Variable -> doppelte Anführungszeichen ("), weil eine Variable interpretiert werden muss, damit sie nicht einfach als Text ausgegeben wird, sondern der Inhalt aus der Variable in den String eingebaut wird.
Mein Code-Vorschlag:
if ( !empty($_POST['von']) && !empty($_POST['mail']) && !empty($_POST['nachricht']) ) {
//
} else {
echo '<p>Bitte füllen Sie alle Felder aus!</p>';
}
2. Das Setzen der ganzen Variablen / Vorbereitung für den Mail-Versand
$empf = "info@blickpunkt-grafikdesign.de";
$betreff ="Kontaktanfrage";
$from = "From: ";
$from .= $_POST['von'];
$from .= " <";
$from .= $_POST['mail'];
$from .= ">\n";
$from .= "E-Mail: ";
$from .= $_POST['mail'];
$from .= "\n";
$text = $_POST['nachricht'];
Alles anzeigen
Bei den hardgecodeten Variablen musst du schon mal nichts ändern, außer wieder die Geschichte mit den Anführungszeichen.
Gut, beim Betreff könnte man noch für den Fall, dass du irgendwann mal Umlaute oder spezielle Sonderzeichen oder so in deinem Betreff hast, etwas einfügen, was dann für eine richtige Darstellung sorgt. Das sähe dann so aus: $betreff = '=?UTF-8?B?' . base64_encode($betreff) . '?=';
Was bei dir auf jeden Fall noch geändert müsste, sind dann die Header bzw. in deinem Fall hast du nur From eingebaut.
Ich würde dir in jedem Fall zu folgenden Headern raten:
$headers = implode("\r\n", [
'MIME-Version: 1.0',
'Content-type: text/plain; charset=utf-8',
"From: {$from}",
"Reply-To: {$from}",
"Subject: {$betreff}",
'X-Mailer: PHP/' . phpversion()
]);
Das Ganze nutzt ein Array, das dann durch die Funktion implode() in einen String umgewandelt wird.
Besonders wichtig ist zuvor aber noch, dass du die E-Mail überprüfst, und das Escapen der Formular-Daten darfst du nicht vergessen.
Ich nutze dafür z.B. Folgendes:
Die Kombi aus den drei Funktionen sorgt dafür, dass unnötige Leerzeichen und Maskierungszeichen entfernt und Sonderzeichen in HTML-Codes umgewandelt werden, um XSS-Attacken zu verhindern.
Zur E-Mail-Überprüfung kannst du folgende Funktion nutzen:
Gut, da das vermutlich viel war, habe ich mal Kommentare im Code hinterlassen.
Mein Code-Vorschlag:
$empf = 'info@blickpunkt-grafikdesign.de';
// für richtige Darstellung von Umlauten etc.
$betreff = '=?UTF-8?B?' . base64_encode('Kontaktanfrage') . '?=';
// Stichwort Escapen zur Verhinderung von XSS-Attacken
$von = htmlspecialchars(stripslashes(trim($_POST['von'])));
$mail = htmlspecialchars(stripslashes(trim($_POST['mail'])));
$text = htmlspecialchars(stripslashes(trim($_POST['nachricht'])));
// Ist die E-Mail valide?
if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
// wir haben alles, jetzt können wir die Mail vorbereiten, sprich die Header setzen
$headers = implode("\r\n", [
'MIME-Version: 1.0',
'Content-type: text/plain; charset=utf-8',
"From: {$von} <{$mail}>",
"Reply-To: {$mail}",
"Subject: {$betreff}",
'X-Mailer: PHP/' . phpversion()
]);
} else {
echo '<p>E-Mail ungültig!</p>';
}
Alles anzeigen
3. Die E-Mail versenden sowie finale Ausgabe
Hier gibt es lediglich zu kritisieren, dass du, wenn das Versenden schief geht, keine Fehlermeldung ausgibst.
Code-Vorschlag:
if (mail($empf, $betreff, $text, $from)) {
echo '<p>Vielen Dank für Ihre Anfrage</p>';
} else {
echo '<p>Beim Versand der E-Mail ist ein Fehler aufgetreten!</p>';
}
So, und jetzt alles zusammen:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Kontaktformular</title>
</head>
<body>
<?php
if ( !empty($_POST['von']) && !empty($_POST['mail']) && !empty($_POST['nachricht']) ) {
$empf = 'info@blickpunkt-grafikdesign.de';
// für richtige Darstellung von Umlauten etc.
$betreff = '=?UTF-8?B?' . base64_encode('Kontaktanfrage') . '?=';
// Stichwort Escapen zur Verhinderung von XSS-Attacken
$von = htmlspecialchars(stripslashes(trim($_POST['von'])));
$mail = htmlspecialchars(stripslashes(trim($_POST['mail'])));
$text = htmlspecialchars(stripslashes(trim($_POST['nachricht'])));
// Ist die E-Mail valide?
if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
// wir haben alles, jetzt können wir die Mail vorbereiten, sprich die Header setzen
$headers = implode("\r\n", [
'MIME-Version: 1.0',
'Content-type: text/plain; charset=utf-8',
"From: {$von} <{$mail}>",
"Reply-To: {$mail}",
"Subject: {$betreff}",
'X-Mailer: PHP/' . phpversion()
]);
if (mail($empf, $betreff, $text, $from)) {
echo '<p>Vielen Dank für Ihre Anfrage</p>';
} else {
echo '<p>Beim Versand der E-Mail ist ein Fehler aufgetreten!</p>';
}
} else {
echo '<p>E-Mail ungültig!</p>';
}
} else {
echo '<p>Bitte füllen Sie alle Felder aus!</p>';
}
?>
</body>
</html>
Alles anzeigen
So, ich hoffe, ich habe nichts vergessen, keine Fehler eingebaut und dich jetzt nicht komplett überfordert.
Es gibt zwar immer noch Möglichkeiten, den Code zu verbessern, aber so hast du schon mal eine ganz gute Basis.
JR Cologne was bedeutet Backend-Validierung ?
Stef wie gesagt ich kenne mich nicht aus, was bestehen denn für Risikos
Das wusste ich nicht.
Backend-Validierung bedeutet, dass die Anfrage des Users auf dem Server per PHP überprüft wird.
Bei einem Kontaktformular wäre das Wichtigste eine Prüfung der E-Mail sowie das Escapen der Daten, um Cross-Site-Scripting-Attacken zu verhindern.
Am besten zeigst du nochmal deinen kompletten Code, dann kann ich den mal auf potenzielle Sicherheitslücken untersuchen.
Zum Verständnis ist vielleicht das hilfreich: https://www.php-kurs.com/cross-site-scr…unterbinden.htm
Stef Du hast zwar recht, dass sein Wunsch genauso mit PHP sehr einfach umsetzbar wäre, aber eine JS-Lösung macht durchaus ebenfalls Sinn. So kann er ja z.B. noch Animationen einbauen und eine Frontend-Validierung mit direktem User Feedback vornehmen.
Solange weiterhin trotzdem eine Backend-Validierung existiert, ist alles in Ordnung.
Du kannst doch mit den DevTools (F12) deines Browsers auf den HTML-Code zugreifen. Ohne HTML kann ich dir nicht sagen, was du beim CSS ändern/hinzufügen musst.
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.