Nachname/Email-Script
Simon Schuller
- html
Ist das korrekt? ----------------------------—
<html>
<head>
<title></title>
<meta name="author" content="">
<meta name="editor" content="html-editor phase 5">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
Willkommen
<form action="uebung3-Eingabe.php" method="POST">
Geben Sie bitte folgende Datensaetze ein:
Nachname.....: <input type="Text" name="username" size="50"/> <br>
Email....: <input type="Text" name="usermail" size="50"/> <br>
<input type="Submit" name="senden" value="Absenden"/> <input type="Reset" name="reset" value="Abbrechen"/>
</body>
</html>
---------------------------------------—
<?php
//Eingabe
if(isset($_POST["senden"]))
{
$username= $_POST["username"];
$usermail= $_POST["usermail"];
require("config.inc.php");
$tblname= "uebung3";
$eintrag= "INSERT INTO uebung3 (username, usermail) VALUES ('$username','$usermail');";
$result = mysql_query($eintrag) or die("SQL-Fehler: ".mysql_error());
}
if ($result) {
echo "Ihre Angaben wurden gespeichert!<br><br>";
}
mysql_close($mysqlh);
echo "<br>Verbindung beendet!";
echo "<hr>";
echo "<a href='uebung3-Anmeldung.html'>Anmeldung</a><br>";
?>
--------------------------------—
<?php
//Ausgabe
require("config.inc.php");
$tblname="uebung3";
$abfrage = "select * from $tblname";
$result = mysql_query($abfrage);
if ($result)
{echo "Ausgabe von $dbname -> $tblname<br><hr>";
$dszahl = mysql_num_rows($result);
echo "Die Abfrage lieferte $dszahl Datensätze<br><br>";
}
echo "<table>";
for ($i=0;$i<$dszahl;$i++) {
$username = mysql_result($result,$i,"username");
$usermail = mysql_result($result,$i,"usermail");
echo "<tr><td>$username</td><td>$usermail</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($mysqlh);
echo "<br>Verbindung beendet!";
echo "<hr>";
echo "<a href='uebung-Anmeldung.html'>Anmeldung</a><br>";
?>
@@Simon Schuller
Ist das korrekt?
Nein.
<html>
DOCTYPE fehlt. Angabe der Sprache des Inhalts fehlt.
Für deutschsprachige Seiten sollte das so aussehen:
<!DOCTYPE html>
<html lang="de">
<head> <title></title> <meta name="author" content=""> <meta name="editor" content="html-editor phase 5"> </head>
Im head
sollte als erstes die Angabe der Zeichencodierung stehen. Wenn diese UTF-8 ist (was sie sein sollte):
<meta charset="UTF-8">
title
sollte nicht leer sein.
<meta name="author" content="">
(mit leerer Angabe) macht keinen Sinn. Wenn du keinen Autor angeben willst, ganz weglassen.
<meta name="editor" content="html-editor phase 5">
interessiert niemanden. Weglassen.
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
Die Farbangaben gehören nicht ins HTML, sondern ins Stylesheet (CSS).
Geben Sie bitte folgende Datensaetze ein:
„Datensätze“ schreibt sich mit ä.
Nachname.....: <input type="Text" name="username" size="50"/> <br> Email....: <input type="Text" name="usermail" size="50"/> <br>
type="text"
ist default; muss also nicht angegeben werden.
Die Eingabefelder haben keine Beschriftung. Sie müssen aber eine haben.
So haben sie eine:
<label>
Nachname: <input name="username" size="50">
</label><br>
<label>
Email: <input name="usermail" size="50">
</label><br>
Wobei anstatt br
-Elemente zu verwenden besser die label
-Elemente per Stylesheet auf display: block
gesetzt werden sollte.
Die Punkte gehören nicht ins HTML. Wenn, dann sollten sie mit CSS erzeugt werden.
Oder so:
<label for="username">Nachname:</label>
<input name="username" id="username" size="50">
<br>
<label for="usermail">Email:</label>
<input name="usermail" id="usermail" size="50">
<br>
oder besser:
<p>
<label for="username">Nachname:</label>
<input name="username" id="username" size="50">
</p>
<p>
<label for="usermail">Email:</label>
<input name="usermail" id="usermail" size="50">
</p>
<input type="Submit" name="senden" value="Absenden"/>
Für Buttons gibt es ein HTML-Element, das bevorzugt verwendet werden sollte:
<button type="submit" name="senden">Absenden</button>
Wobei type="submit"
default ist und nicht unbedingt angegeben werden muss.
<input type="Reset" name="reset" value="Abbrechen"/>
Reset-Button sind für Nutzer eher blöd als dass sie irgendeinen Nutzen hätten. Weg damit.
LLAP 🖖
Hallo Simon Schuller,
Ist das korrekt? ----------------------------—
<?php //Eingabe if(isset($_POST["senden"]))
Hier sollte man besser die Möglichkeit in Betracht ziehen, dass gar keine POST-Daten geschickt wurden.
if ($_POST && isset($_POST["senden"]))
$username= $_POST["username"]; $usermail= $_POST["usermail"];
Das Umkopieren ist eine weit verbreitete Unsitte.
echo "<table>"; for ($i=0;$i<$dszahl;$i++) { $username = mysql_result($result,$i,"username"); $usermail = mysql_result($result,$i,"usermail"); echo "<tr><td>$username</td><td>$usermail</td>"; echo "</tr>"; } echo "</table>";
Hier wären auch andere Darstellungsformen möglich.
Das Umkopieren ist eine weit verbreitete Unsitte.
<ul>
<?php for ($i=0; $i<$dszahl; $i++) { ?>
<li><?= mysql_result($result,$i,"username") ?>, <?= mysql_result($result,$i,"usermail") ?></li>
<?php } ?>
</ul>
Bis demnächst
Matthias
Hello,
die Arrays $_POST und $_GET sollten immer vorhanden sein, wenn man sein PHP nicht umkonfiguriert hat. Es ist aber ratsam, danach zu fragen, ob die Ressource mittels GET oder POST aufgerufen wurde. $_SERVER['REQUEST_METHOD'] gibt darüber Auskunft.
Bei GET kann man den POST-Dispatcher und die Kontrollen und Verarbeitungen gleich überspringen und das Formular ausgeben.
Liebe Grüße
Tom S.
Tach!
die Arrays $_POST und $_GET sollten immer vorhanden sein, wenn man sein PHP nicht umkonfiguriert hat. Es ist aber ratsam, danach zu fragen, ob die Ressource mittels GET oder POST aufgerufen wurde. $_SERVER['REQUEST_METHOD'] gibt darüber Auskunft.
Man kann auch schauen, ob empty($_POST)
beziehungsweise nicht ist. Man will ja nicht nur einen POST-Request haben, sondern auch Daten darin.
"Datensätze" (egal ob mit ae oder ä geschrieben) ist auch der falsche Begriff, wenn es um sowas wie Name und Email-Adresse geht. Die beiden bilden vielleicht zusammen einen Datensatz, irgendwo tief in der Verarbeitung, aber für den Anwender sind es lediglich zwei auszufüllende Felder eines Formulars.
dedlfix.
Hello,
die Arrays $_POST und $_GET sollten immer vorhanden sein, wenn man sein PHP nicht umkonfiguriert hat. Es ist aber ratsam, danach zu fragen, ob die Ressource mittels GET oder POST aufgerufen wurde. $_SERVER['REQUEST_METHOD'] gibt darüber Auskunft.
Man kann auch schauen, ob
empty($_POST)
beziehungsweise nicht ist. Man will ja nicht nur einen POST-Request haben, sondern auch Daten darin.
Genau, man will Daten darin und zwar ganz bestimmte.
Darum zuerst prüfen, ob POST oder GET. Bei GET liegt der Erstaufruf der Ressource vor => verkürztes Verfahren...
Und bei POST eignet sich, eventuell nach einer ersten Programmverzweigung, ein isset($_POST['name'], $_POST['text'], $_POST['from'], ••• ) durchaus, aber unter Angabe aller erwarteter Post-Parameter.
Und die Paranoiden (ich gehöre auch dazu) machen auch die Gegenprobe, ob Post- oder Get-Parameter mitgekommen sind, die man gar nicht haben wollte. Dann versucht nämlich jemand, die Ressource zu missbrauchen.
Liebe Grüße
Tom S.
Hallo Simon,
neben den Sachen von Gunnar:
<?php //Eingabe if(isset($_POST["senden"])) { $username= $_POST["username"]; $usermail= $_POST["usermail"];
Du prüfst hier, ob $_POST
den Eintrag „senden“ enthält, aber nicht, ob „username“ und „usermail“ gesetzt sind. Das Umkopieren in neue Variablen brauchst du übrigens nicht zwingend.
require("config.inc.php"); $tblname= "uebung3"; $eintrag= "INSERT INTO uebung3 (username, usermail) VALUES ('$username','$usermail');"; $result = mysql_query($eintrag) or die("SQL-Fehler: ".mysql_error()); }
Hier gibt es gleich Mehreres:
tblname
wird definiert aber nicht verwendet.// …
Im folgenden Code mit dem SELECT
wird ebenfalls die veraltete MySQL-Schnittstelle verwendet sowie der Kontextwechsel nach HTML missachtet.
Viele Grüße
Robert
Hallo Simon,
Ist das korrekt?
Nein, „E-Mail“ schreibt man analog zu „T-Shirt“ oder „U-Bahn“ mit großem M und Bindestrich.
Gruß
Julius
@@Julius
Nein, „E-Mail“ schreibt man analog zu „T-Shirt“ oder „U-Bahn“ mit großem M und Bindestrich.
Ja, sonst ist es ein Synonym zu „Emaille“. Kannte ich bis dato noch nicht.
Im Englischen ist die Schreibung „email“ verbreitet, aber das soll fürs Deutsche nichts heißen.
LLAP 🖖
Hallo Gunnar,
Nein, „E-Mail“ schreibt man analog zu „T-Shirt“ oder „U-Bahn“ mit großem M und Bindestrich.
Ja, sonst ist es ein Synonym zu „Emaille“. Kannte ich bis dato noch nicht.
Dito. Noch ein Argument, sich an den Standard „Deutsche Sprache“ zu halten 😀
Im Englischen ist die Schreibung „email“ verbreitet, aber das soll fürs Deutsche nichts heißen.
Genau wie der Schein-Anglizismus „Handy“...
Gruß
Julius
@@Julius
Genau wie der Schein-Anglizismus „Handy“...
Oder „Beamer“. Oder „Music-Box“.
LLAP 🖖
Hello,
Genau wie der Schein-Anglizismus „Handy“...
Oder „Beamer“. Oder „Music-Box“.
Au fein, wir machen ein Glossar dazu auf, ähnlich der Zitatesammlung.
Das ist dann sozusagen die "öffentliche Aufbahrung" der deutschen Spracue, falls Ihr mir folgen könnt ;-)
Liebe Grüße
Tom S.
if (isset($_GET["Loeschen"]) ) {
$wahl=$_GET["wahl"];
if ( !empty($wahl) ) {
foreach ($wahl as $loeschemail) {
$loeschbefehl="DELETE FROM $tblname WHERE email = '$loeschemail';";
mysql_query($loeschbefehl);
}
}
}
Geht so löschen?
Moin,
if (isset($_GET["Loeschen"]) ) { $wahl=$_GET["wahl"]; if ( !empty($wahl) ) { foreach ($wahl as $loeschemail) { $loeschbefehl="DELETE FROM $tblname WHERE email = '$loeschemail';"; mysql_query($loeschbefehl); } } }
Geht so löschen?
Prinzipiell schon, die Frage ist bloß, was du Löschen möchtest.
In deinem Code würde ich zuallererst die alte MySQL-API „löschen“ und durch eine der neuen ersetzen. Da gibt es nämlich auch so etwas wie prepare, womit du dir weniger Gedanken über SQL-Injektionen machen musst.
Dann wäre da noch die Frage, was im DELETE
-Statement passiert, wenn $wahl
eine Emailadresse mehrfach enthält und das DELETE
daher mehrfach aufgerufen wird.
Viele Grüße
Robert
Hi,
foreach ($wahl as $loeschemail) { $loeschbefehl="DELETE FROM $tblname WHERE email = '$loeschemail';";
Dann wäre da noch die Frage, was im
DELETE
-Statement passiert, wenn$wahl
eine Emailadresse mehrfach enthält und dasDELETE
daher mehrfach aufgerufen wird.
Was soll da schon passieren? Das gleiche, wie wenn eine email gelöscht werden soll, die gar niemals nicht in der Tabelle existiert hat. Das WHERE liefert keinen Datensatz, also wird nichts gelöscht.
cu,
Andreas a/k/a MudGuard