sonia: Daten in einem Feld erweitern

Hallo zusammen,

ich möchte die Daten in einem bestehenden Feld einer Datenbank durch Eingabe in ein Formular erweitern. Die einzelnen Daten sollen dabei durch einen Doppelpunkt getrennt werden.

In der Form

Daten im Feld alt rot:gelb:blau
Daten im Feld neu rot:gleb:Blau:grün

Dazu habe ich folgenden code geschrieben:

 <?php  
    require_once ('db_connect.php');  
    if (!isset($_POST['senden'])) $_POST['senden'] =  
        '';  
    if (!isset($_POST['domain'])) $_POST['domain'] =  
        '';  
    if ($_POST['senden'] != '' AND $_POST['domain']  
        != '') {  
  
        $link = mysql_connect ( MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);  
  
        if (!$link) {  
            die('keine Verbindung möglich: ' .  
                mysql_error());  
        }  
  
        $db_selected =  
            @mysql_select_db(MYSQL_DATENBANK, $link);  
  
        if (!$db_selected) {  
            die ('Kann '.MYSQL_DATENBANK.' nicht  
                benutzen : ' . mysql_error());  
        }  
        $sql_insert = "INSERT INTO `bm60_prefs`  
            (`domains`)  
            VALUES('".mysql_escape_string($_POST['domain'])."');";  
        if (@mysql_query($sql_insert, $link) != false) {  
  
          echo 'Der Eintrag wurde gespeichert!';  
            $_POST['domain'] = '';  
        } else {  
  
            echo 'Der Eintrag wurde nicht  
                gespeichert!';  
        }  
  
        @mysql_close($link);  
  
    }  
  
    echo '<form  
        action="'.htmlspecialchars($_SERVER['PHP_SELF'  
        ]).'" method="post">';  
    echo ' Domain: <input type="text" name="domain"  
        value="'.htmlspecialchars($_POST['domain']).'  
        "/>  
        <br/><br/>';  
    echo ' <input type="submit" name="senden"  
        value="absenden"/>';  
    echo '</form>';  
  
  
?>

Dieser fügt zwar die neuen Daten in die Datenbank ein, aber bei jeder Eingabe wird eine neue Zeile erzeugt.

Frage: Wie kann ich die Daten in einem Feld erweitern, ohne den bisherigen Inhalt zu überschreiben?

gruss sonia

  1. Hi,

    Du sagst ihm aber doch auch hier ->  $sql_insert = "INSERT INTO bm60\_prefs,
    dass er einen neuen Datensatz anlegen soll.

    ergo: »» ... bei jeder Eingabe wird eine neue Zeile erzeugt.

    Frage: Wie kann ich die Daten in einem Feld erweitern, ohne den bisherigen Du musst das ganze in ein Update Statement packen.

    Gruß
    emetiel

    1. Hallo, und Danke für die schnelle Antwort.

      Aber mit UPDATE wird der Inhalt des Feldes gelöscht und mit dem neuen Eintrag überschrieben.
      Das soll ja gerade nicht geschehen. Ich will ja, dass der neue Eintrag an den bestehenden Inhalt angefügt wird.

      Gruss

      1. Hi

        dann schreib Dein Update einfach in dieser Form

        update tabelle
           set feld = feld + wertderangehängtwerdensoll
         where x = y

        Wobei das + hier für das Konkatenierungszeichen in Deiner DB steht.

        Gruß
        emetiel

        1. OK,

          ich bin mit deiner Antwort etwas überfordert.
          Irgendwie kriege ich das nicht richtig zusammen, und bekomme nur
          Fehlermeldungen zurück.

          Kannst du mir für das Dummies erklären?

          Sonst werd ich das wohl nicht hinbekommen.

          Gruss S

          1. Ich versuche es mal :)

            Angenommen Deine Tabelle heißt T1
            das Feld welches Du aktualisieren möchtest heißt F1
            der Wert welchen Du anhängen möchtest lautet "gruen"
            dazu noch der PrimaryKey der Tabelle PK als number
            und Du möchtest den Datensatz 13 aktualisieren
            dann lautet das Update wie folgt

            update T1
               set F1 = F1 || ':gruen'          -- Oracle
               set F1 = F1 + ':gruen'           -- MS SQl Server
               set F1 = concat( F1, ':gruen' )  -- MySql
             where PK = 13

            die Zeile mit dem Set natürlich nur einmal. Abhängig von Deiner DB

            ich hoffe das ist verständlich, denn besser bekomme ich es nicht hin

            gruß
            emetiel

            1. Hallo,

              Meine Tabelle heist: bm60_prefs
              Das Feld heißt: domains
              Der Wert, den ich anhängen möchte, ist die im Formularfeld eingegebene Domain
              Und ich möchte den Datensatz 1 ändern.

              ich habe jettz folgendes gemacht:

              Den Teil

              $sql_insert = "INSERT INTO bm60\_prefs
                          (domains)
                          VALUES('".mysql_escape_string($_POST['domain'])."');";

              durch diesen ersetzt

              update 'bm60_prefs'
                          set 'domains' = concat_ws(':', 'domains', 'domain')
                       where id = 1;

              Als Antwort erhalte ich:

              Parse error: syntax error, unexpected T_STRING in /home/postman/public_html/test2.php on line 25

              line 25 ist  set 'domains' = concat_ws(':', 'domains', 'domain')

              Was ist den da jetz falsch?

              Gruss s

              1. Hallo,

                Meine Tabelle heist: bm60_prefs
                Das Feld heißt: domains


                Schema object names
                werden im SQL-Dialekt von MySQL *nicht* mit einfachen Anführungszeichen maskiert.

                Der Wert, den ich anhängen möchte, ist die im Formularfeld eingegebene Domain
                Und ich möchte den Datensatz 1 ändern.

                den Datensatz, der über die id mit dem Wert 1 identifiziert wird. Datensätze in einer Tabelle haben keine definierte Reihenfolge.

                ich habe jettz folgendes gemacht:

                Den Teil

                $sql_insert = "INSERT INTO bm60\_prefs
                            (domains)
                            VALUES('".mysql_escape_string($_POST['domain'])."');";

                durch diesen ersetzt

                update 'bm60_prefs'
                            set 'domains' = concat_ws(':', 'domains', 'domain')
                         where id = 1;

                Aha. Neben den bereits bemängelten fehlerhaften Quotes um Tabellen- und Spaltennamen entfernst Du die kontextgerechte Behandlung von Eingabedaten und vergisst, eine Zeichenkette ordnungsgemäß abzuschließen.

                Als Antwort erhalte ich:

                Parse error: syntax error, unexpected T_STRING in /home/postman/public_html/test2.php on line 25

                Was ist den da jetz falsch?

                Es fehlen vermutlich Anführungszeichen.

                Alles in allem ist das, was Du gerade machst, ziemlich falsch. Überlege Dir bitte, was Du machen musst, wenn eine der Zuordnungen entfernt werden soll. Viel Spass dabei ...

                Ach ja: wie wäre es damit, ein paar Grundlagen der verwendeten Techniken zu erlernen?

                Grüße

                Vinzenz

  2. Hallo,

    ich möchte die Daten in einem bestehenden Feld einer Datenbank durch Eingabe in ein Formular erweitern. Die einzelnen Daten sollen dabei durch einen Doppelpunkt getrennt werden.

    das liest sich nach einem typischen Anfängerfehler.

    Daten im Feld alt rot:gelb:blau
    Daten im Feld neu rot:gleb:Blau:grün

    Die Daten sind nicht normalisiert. Das ist in aller Regel keine gute Idee.

    Du solltest Dir Gedanken über ein besseres Tabellendesign machen. Speichere Daten atomar. Irgendeinem Objekt können mehrere Farben zugeordnet sein. Ganz bestimmt kann die gleiche Farbe mehreren Objekten zugewiesen werden. Erstelle daher eine Zuordnungstabelle.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      ich möchte die Daten in einem bestehenden Feld einer Datenbank durch Eingabe in ein Formular erweitern. Die einzelnen Daten sollen dabei durch einen Doppelpunkt getrennt werden.

      das liest sich nach einem typischen Anfängerfehler.

      Auf den Madam auch bereits an anderer Stelle hingewiesen wurde:
      http://www.php-resource.de/forum/sql-datenbanken/100441-eintrag-ein-bestehendes-feld.html

      MfG ChrisB

      --
      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      1. Hallo Chris,

        Auf den Madam auch bereits an anderer Stelle hingewiesen wurde:

        ich glaube eher, da spekuliert jemand auf einen "Frauenbonus" :-)

        Freundliche Grüße

        Vinzenz