Simon Schuller: Nachname/Email-Script

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>";

?>

  1. @@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 🖖

    --
    “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
  2. 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

    --
    Rosen sind rot.
    1. 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.

      --
      Es gibt nichts Gutes, außer man tut es
      Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
      1. 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.

        1. 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.

          --
          Es gibt nichts Gutes, außer man tut es
          Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
  3. 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:

    • Die Variable tblname wird definiert aber nicht verwendet.
    • Dein SQL-Query ist anfällig für SQL-Injektion, d.h. du musst den Kontextwechsel nach SQL beachten.
    • Du verwendest eine veraltete MySQL-Schnittstelle.
    // …
    

    Im folgenden Code mit dem SELECT wird ebenfalls die veraltete MySQL-Schnittstelle verwendet sowie der Kontextwechsel nach HTML missachtet.

    Viele Grüße
    Robert

  4. 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

    --
    Verallgemeinerungen sind immer schlecht!
    1. @@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 🖖

      --
      “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      1. 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

        --
        Verallgemeinerungen sind immer schlecht!
        1. @@Julius

          Genau wie der Schein-Anglizismus „Handy“...

          Oder „Beamer“. Oder „Music-Box“.

          LLAP 🖖

          --
          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
          1. 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.

            --
            Es gibt nichts Gutes, außer man tut es
            Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
            1. 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?

              1. 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

                1. 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 das DELETE 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