Datensatz erzeugen

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

  • Datensatz erzeugen

    hallo alle,

    ich versuche mittels eines online buches in php einzusteigen. leider bin ich an einer stelle hängen geblieben und habe bisher auch noch keinen post gefunden, der mir weiter geholfen hätte.

    also, ich versuche mittels eines php scriptes datensätze über ein html-formular in eine tabelle einzugeben.
    ich bekomme keine fehlermeldung.
    der datensatz wird, soweit er eingefügt wird, korrekt eingefügt. ausgenommen das feld name, dort wird nichts eingefügt.
    beim ersten aufruf des scriptes werden manchmal die letzten 3 felder der tabelle oberhalb des eingefügten datensatzes mit formatierten nullwerten gefüllt.

    die tabelle hat die felder:
    Lfd.Nr Name Vorname Personalnummer Gehalt Geburtstag

    das script habe ich genau so aus dem buch übernommen, weil meines eben nicht funktionierte und habe dort genau den gleichen fehler.
    meine frage, weil ich einsteiger bin, was hat sich geändert, seit das buch geschrieben wurde, was muß ich beachten, bzw anders machen?
    (ob die registirerung der variablen so richtig ist, weiß ich nicht, auch das hab ich selber raus gefunden, aber normal funktioniert es.)

    PHP-Code:
    <?php 

    if ($gesendet)
    $nn=$_POST[nn];
    $vn=$_POST[vn];
    $pn=$_POST[pn];
    $ge=$_POST[ge];
    $gt=$_POST[gt];
    {

    $db=mysql_connect (hostuserpw);

    $sqlab "insert into personen";
    $sqlab .="(name, vorname, personalnummer, ";
    $sqlab .="gehalt, geburtstag) values ";
    $sqlab .="('$nn', '$vn', '$pn', '$ge', '$gt')";

    mysql_db_query ("firma"$sqlab);
    $num mysql_affected_rows();

    if (
    $num>0)
      echo 
    "Es wurde 1 Datensatz hinzugef&uuml;gt<p>";
    else
    {
      echo 
    "Es ist ein Fehler aufgetreten, ";
      echo 
    "es wurde kein Datensatz hinzugef&uuml;gt<p>";
    }
    mysql_close ($db);
    }


    ?>

    </head>
    <body>
    Geben Sie einen vollst&auml;ndigen Datensatz ein<br>und schicken sie das Formular ab:
    <p>
    <form action="uf13.php" method="post">
    <input name="nn">Name<p>
    <input name="vn">Vorname<p>
    <input name="pn">Personalnummer(eine ganze Zahl)<p>
    <input name="ge">Gehalt(Dezimaltrennung durch Punkt)<p>
    <input name="gt">Geburtstag (JJJJ-MM-TT)<p>
    <input type="submit" name="gesendet">
    <input type="reset">
    <p>
    Alle Datens&auml;tze <a href="uf07.php">anzeigen</a>


    </body>
    </html>
    Quelle (weitgehendst): php4 v. Th. Theis

    sorry für die länge des codes, ich kann nicht wirklich beurteilen, was wichtig ist und was nicht.

    danke erst mal
    Die Höhen sind die Tiefen wert

  • #2
    Re: Datensatz erzeugen

    ist hier nicht irgendwas verdreht?
    PHP-Code:
    <?php 

    if ($gesendet)
    $nn=$_POST[nn];
    $vn=$_POST[vn];
    $pn=$_POST[pn];
    $ge=$_POST[ge];
    $gt=$_POST[gt];
    {
    Mal zur Struktur, wenn du das richtig einrückst wird daraus
    PHP-Code:
    if ($gesendet)
      
    $nn $_POST[nn];

    $vn=$_POST[vn];
    $pn=$_POST[pn];
    $ge=$_POST[ge];
    $gt=$_POST[gt];

    demnach bezieht sich das if nur auf die erste Anweisung, das ist aber nicht das, was du willst, du willst wohl eher
    PHP-Code:
    if ($gesendet) {
      
    $nn=$_POST[nn];
      
    $vn=$_POST[vn];
      
    $pn=$_POST[pn];
      
    $ge=$_POST[ge];
      
    $gt=$_POST[gt]; 
    Und jetzt mal zum Code,
    PHP-Code:
    if ($gesendet
    ist ganz schlecht. 1. setzt du auf register_globals, die $gesendet-Variable kommt vom Button, also solltest/musst du da auch das superglobale Array $_POST verwenden, 2. fragt man mit isset ob eine Variable existiert (wurde das Formular abgeschickt existiert die variable, ansonsten nicht), und nicht einfach nur mit dem Variablennamen. Aus dem if wird also
    PHP-Code:
    if (isset($_POST[gesendet])) 
    dann etwas, was du bei jeglicher Anwendung von $_POST falsch gemacht hast. Du greifst auf das Array $_POST zu, dabei sind nn, vn, pn etc. Keys des entsprechenden Arrays, da das keine integer Werte sind, sondern Strings, müssen die Dinger in Anführungszeichen, der komplette Block muss also dahingehend erweitert werden:
    PHP-Code:
    if (isset($_POST['gesendet'])) {
      
    $nn=$_POST['nn'];
      
    $vn=$_POST['vn'];
      
    $pn=$_POST['pn'];
      
    $ge=$_POST['ge'];
      
    $gt=$_POST['gt']; 
    danach folgt dann das Einfügen in die Datenbank ... da du noch Anfänger bist, mach erstmal so weiter, sobald du das Buch durch hast und da nichts über mysql-Injections drin stand, informiere dich darüber, denn das was du so einfach in den Query schreibst an Variablen, ist so ein Sicherheitsrisiko ... aber lerne erstmal Grundlagen!

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Also das kann nicht richtig sein:
      if ($gesendet)
      $nn=$_POST[nn];
      $vn=$_POST[vn];
      $pn=$_POST[pn];
      $ge=$_POST[ge];
      $gt=$_POST[gt];
      {
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        ok, danke für die antworten.

        ich probiers gleich mal aus, ich wäre einfach an der stelle nicht weiter gekommen, weil ich es eben nicht WEISS und mir (noch) die grundlagen fehlen.
        Die Höhen sind die Tiefen wert

        Kommentar


        • #5
          achja, wenn du am Anfang eines jeden Skriptes
          PHP-Code:
          error_reporting(E_ALL); 
          schreibst, gewöhnst du dir von Anfang an so manch schlechten Coding-Stil gar nicht erst an... (z.B. String-Array-Keys ohne Anführungszeichen werden dann mit einem Fehler quittiert)

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            noch mal ein dickes danke, das genau wars
            zumindest kann ich jetzt weiter lernen!

            @ghostgambler: das stand in der anleitung vom forum, hab ich probiert, gab aber auch keine fehlermeldung... werds aber beherzigen
            Die Höhen sind die Tiefen wert

            Kommentar


            • #7
              UF13 ist hier: http://www.galileocomputing.de/openb....htm#Xxx803022

              und es beruht auf register_globals=On ! (ob eine Variante des onlinebuchs mit $_POST vorhanden ist, habe ich noch nicht geschaut)



              $_POST habe ich im Index nicht gefunden, dafür unter NEU IN PHP4 folgende Perlen der Didaktik:
              session_register() Registriert Variablen für eine Session
              session_unregister() Entfernt die Registrierung von Variablen für eine Session
              Zuletzt geändert von heiss; 21.07.2006, 21:42.

              Kommentar


              • #8
                ist sie nicht, @ heiss... ich hatte in meinem ersten post erwähnt, dass ich mir das selber zusammen gesucht hatte und nicht wußte, ob das so richtig ist.
                ich hatte die wahl, ob ich register_globals=on setze oder ob ich heraus finde, wie man die selber registriert... hab mich für letzteres entschieden, weil ich diese einstellung unter umständen nicht immer beeinflussen kann... und weil ich finde, sowas muß man irgendwann eh wissen.
                Zuletzt geändert von bongomaria; 21.07.2006, 21:51.
                Die Höhen sind die Tiefen wert

                Kommentar


                • #9
                  Am besten wählst du ein anderes Lehrmittel. Du verschwendest deine Zeit mit dem theis

                  www.w3schools.com/php/
                  http://tut.php-q.net
                  http://ffm.junetz.de/members/reeg/DSP/node16.html


                  und was hier so gefragt wird

                  Kommentar


                  • #10
                    Original geschrieben von bongomaria
                    ich hatte die wahl, ob ich register_globals=on setze oder ob ich heraus finde, wie man die selber registriert...
                    "selbst registrieren" geht einfacher mit import_request_variables, ist aber nicht zu empfehlen. Das was du da machst (Variablen von $_POST in den lokalen Namespace kopieren), ist eigentlich ziemlich sinnlos. Du kannst die Variablen ja auch aus dem $_POST-Array in den Query einfügen, dafür brauchst du sie nicht kopieren. Wenn du natürlich zwischendurch noch irgendwas an der Variable machen willst ist das weitaus sinnvoller, z.B.
                    PHP-Code:
                    if (isset($_POST['gesendet'])) {
                      
                    $name ucwords($_POST['name']);
                      
                    mysql_query('INSERT INTO tabelle (name, alter) VALUES ("' $name 
                        
                    '", "' $_POST['alter'] . '")');

                    wenn man das ganze noch gegen MySQL-Injections schützen will
                    PHP-Code:
                    if (isset($_POST['gesendet'])) {
                      
                    $name ucwords($_POST['name']);
                      
                    mysql_query('INSERT INTO tabelle (name, alter) VALUES ("' 
                        
                    mysql_real_escape_string($name) . '", ' intval($_POST['alter']) . ')');


                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      ich versteh das bisher nur halb, werde mich aber damit auseinander setzen... danke!

                      jedenfalls wurde mir hier echt weiter geholfen

                      es ist halt unheimlich schwer, die richtigen fragen zu stellen, wenn man noch nicht genug ahnung hat :-/
                      Zuletzt geändert von bongomaria; 21.07.2006, 22:33.
                      Die Höhen sind die Tiefen wert

                      Kommentar

                      Lädt...
                      X