Michi: PHP und MYSQL, Daten auslesen zum Bearbeiten.

Hallo Ihr,

erstmal einen schönen Abend an euch alle...
Habe ein Problem, habe eine Datenbank in Mysql angelegt und auch über PHP Formulare erzeugt um daten einzugeben und in der SQL Datenbank zu speichern.
Aber, hätte gerne in Form eines Formulars die datensätze wieder ausgelesen um diese Daten direkt in diesem Formular ändern zu können und auch wieder so zu speichern.
Alles habe ich hinbekommen, aber nicht das "Änderungsformular"...
Habe Ihr für mich einen Tipp, wo ich ein Beispiel nachlesen kann wie sowas gemacht wird ??? meine suche war leider nicht sehr ergiebig.

Wäre echt klasse von euch ein paar Tips zu bekommen !

Danke schonmal vor ab!

Viele Grüße
Michi

  1. Moin!

    Aber, hätte gerne in Form eines Formulars die datensätze wieder ausgelesen um diese Daten direkt in diesem Formular ändern zu können und auch wieder so zu speichern.

    Du willst ein Formular dynamisch generieren, welches die value-Werte der alten Datenbankeinträge besitzt. Je nach Eingabefeld ist das unterschiedlich, aber im Prinzip gehts so:

    <input type="text" name="irgendeinname" value="alter-DB-Eintrag">

    - Sven Rautenberg

    --
    Signatur oder nicht Signatur - das ist hier die Frage!
    1. Hallo Sven!

      Vorab erstmal danke... habe das jetzt gleich mal ausprobiert... haut schonmal hin... DANKE... vielen Danke... das rätsels lösung...

      Aber noch eine kleine weitere Frage, über die ich dauernd stoße...

      Wie kann ich vorab einen bestimmten datensatz auswählen... bei mir ist das so... möchte eine Projektnummer angeben und dann sollte das Formular kommen worin die alten einträge drinnen sind (das geht jetzt schonmal... :-))
      Aber die Auswahl, bzw. selektierung bereitet mir noch kopfschmerzen...

      Hast du da auch einen Tipp ??

      Und vielen Danke nochmal...

      Viele Grüße
      Michi

      . Je nach Eingabefeld ist das unterschiedlich, aber im Prinzip gehts so:

      <input type="text" name="irgendeinname" value="alter-DB-Eintrag">

      - Sven Rautenberg

      1. Moin!

        Wie kann ich vorab einen bestimmten datensatz auswählen... bei mir ist das so... möchte eine Projektnummer angeben und dann sollte das Formular kommen worin die alten einträge drinnen sind (das geht jetzt schonmal... :-))
        Aber die Auswahl, bzw. selektierung bereitet mir noch kopfschmerzen...

        Worum gehts dir? Wie du deine Skripte dazu veranlasst, dir einen Datensatz zum Bearbeiten auszugeben? Da kommt am besten die gute alte Liste zum Einsatz, wenn es sich um wenige Datensätze handelt, und ansonsten kommt eine Suchfunktion zum Einsatz, die bei hinreichend wenigen Datensätzen dann eine Liste ausgibt (wie schon zuvor erwähnt).

        Von dieser Liste kommt man dann zum Bearbeitungsformular, wobei es im Interesse der Datenintegrität von Vorteil ist, in der Datenbank einer Primärindex-Schlüssel als ID mitzuführen und den Link zum Bearbeitungsformular mit dieser ID zu füttern, damit das Skript dann eindeutig einen Datensatz zum Bearbeiten anbieten kann. In diesem Zusammenhang sein darauf hingewiesen, dass sich die einmal beim ersten Anlegen des Datensatzes automatisch zugewiesene ID im Laufe des Lebens des Datensatzes und der Datenbank niemals ändert, nicht neu durchnumeriert wird und auch nicht recycelt werden darf - ansonsten kriegst du mit diesem Vorgehen natürlich Probleme, wenn mehrere User gleichzeitig an der DB arbeiten. :)

        Aber du hast einen wirklich nicht einfachen Punkt angeschnitten, denn den Zugriff auf eine riesige Datenbank für den Benutzer über ein Webinterface einigermaßen brauchbar zu machen ist keine leichte Aufgabe. Am besten läßt man den Benutzer eine Suchmaske ausfüllen, um möglichst genau einen Datensatz, zumindest aber wenige Datensätze zu erhalten, aus denen er dann einen auswählen kann. Es wäre recht sinnlos, eine Blätter-Liste oder gar eine Komplett-Liste in den Browser zu jagen, die mal eben spontan mehrere hundert Megabyte Quellcode umfaßt und nicht nur ewig zu laden braucht, sondern vermutlich auch den Browser unbenutzbar macht. :)

        - Sven Rautenberg

        --
        Signatur oder nicht Signatur - das ist hier die Frage!
        1. Hi Sven,

          Habe nun folgendes vor:
          Habe eine MYSQL Datenbank erstellt, worin alle meine Projete enthalten sind. Wie schon erwähnt, erstellen und anzeigen klappt schon (gebe zu, bin kein spezialist in php).

          Worum gehts dir?

          Habe mit folgendes gedacht:  Habe eine seite, wo Projektnummer und Angebotsnummer angegeben sind und mann hier die genauen Nummern eingeben kann (beide oder auch nur z.B. Projektnummer; gibt mann nur Projektnummer an, werden natürlich mehrere Angebote kommen, da mehrere Angebote unter einer Projektnummer laufen)
          Gibt mann also z.B. nur die Angebotsnummer ein, schuß nächste Seite wo das Formular mit den alten Werten enthalten ist. Diese dann ggfl. ändern und wieder unter dem gleichen Datensatz speichert; also keine neuanlage. Bzgl. der ID... kann ich auch die Angebotsnummer als geltende ID setzen.

          Wie du deine Skripte dazu veranlasst, dir einen Datensatz zum Bearbeiten auszugeben?

          Über z.B. ProjektBearbeiten.php ; also über PHP

          Da kommt am besten die gute alte Liste zum Einsatz, wenn es sich um wenige Datensätze handelt, und ansonsten kommt eine Suchfunktion zum Einsatz, die bei hinreichend wenigen Datensätzen dann eine Liste ausgibt (wie schon zuvor erwähnt).

          Liste... in diesem Fall wurde der Datensatz ja schon ausgewählt; wenn Projektnummer angegeben wird sollen (klar in einer Liste) alle Angebote kommen, die ich dann ggfl. nochmal selbst auswählen muß; Gebe ich aber gleich eine Projektnummer ein, sollte gleich das Formular kommen.... BESSER :::  eigentlich müßte mann nur die Angebotsnummer eingeben, da ich über Projekt in einer anderen Anzeuige bereits die Richtige Angebotsnummer rausfinde... außer es ist "leicht" zu bewerkstelligen!

          Danke...

          Michi

        2. Hallo...

          So sieht mein Quellencode schonmal aus...
          Klappt alles BIS AUf, daß ich was ändern kann...
          und das mit der ID-Kennung habe ich ehrlich gesagt auch nicht ganz verstanden ...

          <?php
            include("../hidden/db_connect2.inc");
               if(!isset($set))
              {
              echo "<form action="$PHP_SELF" method="post">\n";
              echo "<input type="hidden" name="set" value="TRUE">\n";
              echo "<b>Suche nach:</b>\n";
              echo "<select size="1" name="spalte">\n";
              echo "<option value="angebotsnummer">Angebotsnummer</option>\n";
              echo "<option value="url">URL-Angabe</option>\n";
              echo "</select>\n";
              echo "<b>Suchbegriff:</b>\n";
              echo "<input type="text" name="suche" size="40" maxlenght="255"><p>\n";
              echo "<input type="submit" value="Suche starten...">\n";
              }
            else
            {
              if($suche == "")
                $sql = " SELECT * FROM anlage;";
              else
                $sql = "SELECT * FROM anlage WHERE " . $spalte . " LIKE '" . $suche . "%';";

          if(@mysql_connect($host, $user, $pwd))
                {
                if(@mysql_select_db($dbname))
                  {
                  $erg = @mysql_query($sql);
                  if($erg)
                    {
                    if(mysql_num_rows($erg) <= 0)
                      {
                      echo "Leider konnte kein Datensatz in der Kategorie<br><b>"
                           . strtoupper($spalte) . "</b> mit dem Suchbegriff <b>"
                           . strtoupper($suche) . "</b> gefunden werden!<p>\n";
                      unset($set);
                      echo "<a href="$PHP_SELF">Zurück zum Formular</a>\n";
                      }
                    else
                      {
                      echo "<table border="1">\n";
                      echo "<tr>\n";
                      for($i=0; $i<mysql_num_fields($erg); $i++)
                        {
                        $feld = mysql_field_name($erg, $i);
                        echo "<th>". ucfirst($feld) . "</th>\n";
                        }
                      echo "</tr>\n";
                      while($row = mysql_fetch_row($erg))
                        {
                        echo "<tr>\n";
                        for($i=0; $i<mysql_num_fields($erg); $i++)
                          echo "<td>" . $row[$i] . "</td>";
                        echo "</tr>\n";
                        }
                      echo "</table><p>\n";
                      unset($set);
                      echo "<a href="$PHP_SELF">Zurück zum Formular</a>\n";
                      }
                    }
                  else
                    echo "<br><i>Es konnten keine Datensätze gefunden werden.</i><br>\n";
                  }
                else
                  echo "<br><i>Verbindung zur Datenbank ist im Moment nicht möglich!</i><br>\n";
                mysql_close();
                }
              else
                echo "<br><i>Der Server ist wegen Wartungsarbeiten vorübergehend nicht erreichbar.</i><br>\n";
              }
            ?>

          1. Moin!

            und das mit der ID-Kennung habe ich ehrlich gesagt auch nicht ganz verstanden ...

            Ein Datensatz muß eine eindeutige ID haben, mit der er für interne Zwecke identifiziert werden kann. Intern im Sinne von "sieht der Benutzer nicht (unbedingt)".

            Wenn du Projekte und Angebote in zwei Tabellen hast, dann muß jedes Angebot und jedes Projekt eine eindeutige ID haben. Ob du diese ID auch für den Benutzer verwendest (damit er die Projektnummer oder die Angebotsnummer direkt eingeben kann), bleibt dir überlassen - es sieht nur manchmal etwas doof aus, wenn ein Kunde "Projekt 000000001/Auftrag 0000000001" erhält, man aber irgendwie das Gefühl erzeugen will, man sei schon länger im Geschäft. :)

            Deshalb wirst du vermutlich toll aussehende Projekt-/Aufgabennummern haben wollen, welche aber nicht zwingend als interne ID geeignet sind, weil man an der öffentlichen Projekt-ID vielleicht doch mal was (rein optisch) ändern möchte.

            Deshalb brauchst du eine interne ID. Und auf die beziehst du dich beim Bearbeiten. Wenn du eine (Auswahl-/Suchergebnis-)Liste von einigen Datensätzen hast, übergibst du im Link zur Bearbeitungsseite die intere ID, nicht die öffentliche. Und wenn der Benutzer eine öffentliche Projekt/Angebotsnummer eingibt, suchst du in der Datenbank, welche interne ID dazugehört, und läßt alle weiteren Aktionen immer auf der gefundenen (hoffentlich findest du nur eine einzige) internen ID basieren. Beispielsweise mußt du beim Ändern von Datensätzen ja irgendwie speichern, welchen Datensatz du ins vorausgefüllte Formular geschrieben hast. Und dazu eignet sich die nicht bearbeitbare, weil unveränderliche intere ID bestens:

            <input type="hidden" name="interneID" value="23">

            So kannst du die abgeschickten, möglicherweise veränderten Daten dem richtigen Datensatz zuordnen:

            UPDATE set x=y.... WHERE interne_ID = 23;

            - Sven Rautenberg

            --
            Signatur oder nicht Signatur - das ist hier die Frage!
            1. Hallo Sven !

              Möchte mich für deine Tipps bedanken!!!

              Werde jetzt mal versuchen alles umzusetzen...

              Nochmals Danke!!!

              Michael