Daten in einem Feld erweitern
sonia
- datenbank
0 emetiel0 Vinzenz Mai
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
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
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
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
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
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
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
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
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
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
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