leere zeile wird beim aufrufen der seite hinterlassen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • leere zeile wird beim aufrufen der seite hinterlassen

    moin,

    die gute nachricht, das script läuft.
    die schlechte ist die, dass immer ein leerer eintrag (aber mit id) in der datenbank hinterlassen wird, wenn ich nur diese seite aufrufe.
    hier das script:
    PHP-Code:
    <?
    include ("connect.inc.php");

    $event = strip_tags($event);
    $event = htmlentities($event);
    $event = str_replace("\r\n", "<br>", $event);


    echo ("
    <form action=\"eintragen.php\" method=\"post\" name=\"...\" onSubmit=\"...\">
    <table >
      <tr>
            <td >Tag:</td>
            <td ><input type=\"text\" name=\"day\" size=\"40\"></td>
        </tr>
        <tr>
            <td>Monat:</td>
    ..usw.
            <td width=\"25%\">&nbsp;</td>
            <td>
            <input type=\"reset\" name=\"Reset\" value=\"Angaben l&ouml;schen\">&nbsp;
            <input type=\"submit\" name=\"Submit\" value=\"Eintragen\">
            </td>
        </tr>
    </table>
    </form>
    ");
    ?>


    <?
    $query = "INSERT INTO 
              kalender (TAG,JAHR,MONAT,ZEIT,TEXT) 
              VALUES 
              ('$day','$year','$month','$time','$event')";
    $result = mysql_query($query) OR  die("Query: <pre>".$query.mysql_error());


    if ($day != "" AND $year != "" AND $month != ""){
    echo ("<table>
        <tr>
            <td >O.k., der Tag ist markiert.<br>
            <a href=\"index.php\">HIER</a> geht&acute;s zur&uuml;ck</td>
        </tr>
    </table>");
    }
    else {
    echo ("<p>Es muss der Tag, der Monat und das Jahr ausgefüllt sein.<p>");
    }
    ?>

  • #2
    Vllt solltest du den Eintrag in die DB davon abhängig machen ob das Form überhaupt gesendet wurde !
    PHP-Code:
    if(isset($_POST)){
        
    $query "INSERT INTO 
              kalender (TAG,JAHR,MONAT,ZEIT,TEXT) 
              VALUES 
              ('
    $day','$year','$month','$time','$event')";
              [...]

    Ausserdem würde es nicht schaden sich mal über register_globals und daraus entstehende Sicherheitslücken zu informieren. Wenn du schon am Suchen bist dann auch noch das Stichwort SQL-Injection.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      So wie es aussieht wird bei jedem Aufruf des Scripts das INSERT ausgeführt und wenn dabei $day und Kollegen nicht existieren oder leer sind, wird eben ein leerer Datensatz angelegt.
      Prüfe deine Variablen und führe die Query nur aus, wenn alles in Ordnung ist.

      Kommentar


      • #4
        Wo legst du bitteschön fest in welchen fällen der query ausgeführt werden soll.
        soweit ich schauen kann legst du nur fest in welchen fällen eine fehlermeldung erscheinen soll
        Webdesign und Webentwicklung - Plunix.de

        Kommentar


        • #5
          die("Query: <pre>".$query.mysql_error());

          wer auch ganz schön wenn man pre auch noch einmal wieder schließt.

          ich würde deinen query in eine function packen, und diese function am selben platz ausführen wo deine "O.k., ..." Meldung erscheint.


          Du kannst auch besser mit isset und empty arbeiten!
          Webdesign und Webentwicklung - Plunix.de

          Kommentar


          • #6
            jetzt aber...

            @lennie:
            danke, habe eine abfrage eingefügt mit
            PHP-Code:
            if (!empty ($day) && !empty ().....) 
            und jetzt zählt es die leeren aufrufe nicht mehr.

            @jahlives:
            habe mir diese sicherheitsabfragen angeschaut und muss ganz ehrlich sagen, das mir das gerade zu hoch ist (die erklärungen der tu chemnitz tauchen ja immer wieder in der gleichen form in anderen seiten auf). nun soll dieses formular intern auf einer seite genutzt werden, um daten zu markieren. meinst du, dass ich diese seiten doch erst abfragen soll, obwohl keiner die adresse weiß (außer drei menschen?)?
            ich bin da sehr unsicher, weil ich natürlich nicht die fachfrau bin, sondern mit php am anfang stehe.

            mfg
            zeffmother

            Kommentar


            • #7
              Also zum Thema SQL-Injection reicht eigentlich ein
              PHP-Code:
              $sql "SELECT * from table where name='".mysql_real_escape_string($name)."'"
              Diese Funktion entschärft sämtliche für eine DB gefährlichen Zeichen.
              Zum Thema register_globals:
              Wenn diese Direktive auf on ist, dann heisst das nichts weiter, als dass für jede via GET oder POST übergebene Var eine Variable in php erstellt wird
              Bsp:
              Code:
              <a href="index.php?var=value">
              //dann kannst du in php mittels
              echo $var;
              //darauf zugreifen
              
              //ist register_globals off dann gehts nur so
              echo $_GET['var'];
              //folgendes geht dann nicht
              echo $var;
              Register globals auf on ermöglichen es einem bösen Zeitgenossen Variabelen in deinen Code zu schleusen mit denen du nicht gerechnet hast.
              PHP-Code:
              echo '<a href="formular.php?day=irgendwasgemeines">; 
              Jetzt baust du $day ungeprüft in deine Query ein. Das kann dich deine gesamte Datenbank kosten.
              Also wenn du register_globals auf on hast dann musst du (solltest du aber eigentlich auch bei register_globals off machen)
              1. die Vars genau prüfen (z.B sind erwartete Integer wirklich gültige Zahlwerte und kein String)
              2. die Vars entschärfen (v.a. wenn du sie in eine Query einbauen willst -->mysql_real_escape_string
              3. Never trust incoming Data. Drum prüfen, prüfen und nochmals prüfen

              Sicherheit die darauf basiert, dass man die Adresse nicht kennt, ist nicht wirklich sicher ! Von dem her würde sich zumindest eine PW Kontrolle lohnen.

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                o.k., habe passwortabfrage drin und zum entschärfen der möglichen eingaben beim senden:

                <?
                $_POST = array_map('mysql_real_escape_string', $_POST);
                ?>


                beschäftige mich weiter damit.

                danke

                zeffmother

                Kommentar


                • #9
                  mysql_real_escape_string() funzt aber nur im Kontext einer existierenden DB-Verbindung. Wenn noch keine erstellt wurde, dann wirft die Fkt einen Fehler.
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar

                  Lädt...
                  X