 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
03.08.2004, 13:41
|
#1
|
|
TP-Senior
Registriert seit: May 2004
|
Kopieren von INhalten aus mySQL-Tabelle
Moin.
Ich habe da ein Problem: Ich lasse mir aus einer Tabelle "Termine" alle Felder auslesen. Identifiziert werden sie über "terminID". Das Script beinhaltet u.a. folgende Anweisungen:
Code:
$sqlab = "select * from termine ";
$sqlab .= "order by datum";
$res = mysql_db_query($db_name, $sqlab);
$num = mysql_num_rows($res);
(...)
for ($i=0; $i<$num; $i++)
{
$nummer = mysql_result($res, $i, "terminID");
$top = mysql_result($res, $i, "header");
$zeit1 = mysql_result($res, $i, "datum"); //ist timestamp
$wann1 = date("d.m.Y", $zeit1); //umwandeln in d.m.Y.Format
$zeit2 = mysql_result($res, $i, "datum2"); // ist timestamp
$wann2 = date("d.m.Y", $zeit2); //umwandeln in d.m.Y.Format
$terminur = mysql_result($res, $i, "ttext");
$termin = nl2br($terminur);// <br>s umwandeln
//tabellenzeilen mit -zellen
echo ("\t<tr>".
"\n\t\t<td class=\"$col\" valign=\"top\"><input type=\"radio\" name=\"auswahl\" value=\"$nummer\"></td>".
"\n\t\t<td class=\"$col\" width=\"110\" valign=\"top\">$top</td>".
"\n\t\t<td class=\"$col\" width=\"80\" valign=\"top\">$wann1</td>".
"\n\t\t<td class=\"$col\" width=\"80\" valign=\"top\">$wann2</td>".
"\n\t\t<td class=\"$col\">$termin</td>".
"\n\t</tr>");
}
Es werden also alle Inhalte aus der Tabelle "termine" angezeigt. Über einen Radio-Button treffe ich eine Auswahl. Nun soll bei Drücken auf Absende-Button der ausgewählte Datensatz in eine Tabelle "topper" eingefügt werden. Also im Grunde ein Kopieren von Datensatz X aus Tabelle "termine" in Tabelle "topper". Beide haben die gleichen Felder, mit der Ausnahme, dass "topper" kein Feld mit der Bezeichnung "terminID" hat. Ich habe es in dem Script, an das die Daten übergeben werden mit UPDATE versucht. Aber ich bekomme keine Daten übertragen.
Auf der "zweiten Seite", also dem verarbeitenden Script, habe ich, weil nichts passierte, einmal ein
geschrieben. Und tatsächlich liest er die entsprechende terminID aus und stellt sie dar. Ein ergab hingegen gar nichts!
Das Script beinhaltet u.a. folgenden Code:
Code:
//mysql-anweisungen
$sqlab = "select * from termine ";
$sqlab .= "where terminID = '$auswahl'";
$sqlab = "update topper set toptop = '$top' , ";
$sqlab .= "topdate1 = '$wann1' , ";
$sqlab .= "topdate2 = '$wann2' , ";
$sqlab .= "toptext = '$termin' , ";
$sqlab .= "where terminID = '$auswahl'";
mysql_db_query($db_name, $sqlab);
$num = mysql_affected_rows();
if($num>0) {
echo "Datensatz geschrieben";
} else {
echo "Datensatz nicht geschrieben";
}
So. Und ich rutsche immer in die else-Anweisung rein: "Datensatz nicht geschrieben".  Warum? Wo liegt der (vermutlich kleine) Fehler?? Hilfe!?
Schöne Grüße
Mq
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
03.08.2004, 14:47
|
#2
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Was soll denn in dem 2. Script die Select-Anweisung aus termine?
Die Zeile
$sqlab .= "where terminID = '$auswahl'";
ist etwas komisch, wenn Du schreibst, dass die tabelle topper keine terminID Zelle hat.
|
|
|
03.08.2004, 15:11
|
#3
|
|
TP-Senior
Registriert seit: May 2004
|
Jaaa, das kommt noch daher, weil ich das von einem Edit-Script übernommen habe. Da wird aber auch in die gleiche Tabelle geschrieben. Natürlich habe ich auch schon dran gedacht und das "where blabla" weggenommen. Dann komme ich lustigerweise auch in die positive Feedback-Schleife rein. Ich bekomme also ausgegeben, dass ein Datensatz erfolgreich geändert wurde. Schaue ich jedoch mit mysqladmin einmal in die Felder, sind sie leer. Da wurde nichts reingeschrieben! 
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
03.08.2004, 17:21
|
#4
|
|
TP-Moderator
Registriert seit: Nov 2001
Ort: Vienna
|
Du weißt aber schon, dass man mit update nix kopieren kann, sondern, dass man den Datensatz mit Insert neu einfügen muss.
Falls ja, dann musst du doch in Zeile 7 ein vorhandenes Feld von topper ansprechen:
PHP-Code:
$sqlab .= "where terminID = '$auswahl'";
Grüße,
Peter
|
|
|
03.08.2004, 23:19
|
#5
|
|
TP-Senior
Registriert seit: May 2004
|
*hmm* Mein Denkfehler. Ich dachte, dass ich den bereits vorhandenen Datensatz einfach "überschreiben" kann. Mit INSERT schreibe ich ja den ausgewählten Datensatz zusätzlich in die Tabelle, so werden es schließlich immer mehr Einträge mit der Zeit. Kann ich nicht sonst vor dem INSERT noch einmal die Tabelle "topper" komplett löschen? So dass ich eben nach dem Eintrag des neuen Datensatzes wieder nur einen Datensatz habe?
Klar, ich könnte die Abfrage fürs Frontend so gestalten, dass immer der letzte/ jüngste Eintrag zu sehen ist. Aber dennoch: Geht es nicht "sauberer" (im Sinne von weniger Datensätze in meiner Tabelle)?
Grüße
MQ
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
03.08.2004, 23:49
|
#6
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Nun versteh ich hier garnix mehr. Welche Aufgabe hat den die tab. topper?
Wenn es nur darum geht, dass der jüngste Datensatz angezeigt werden soll, hol den doch aus der tab. termine, das kannst Du doch schon via Select machen.
|
|
|
04.08.2004, 01:14
|
#7
|
|
TP-Senior
Registriert seit: May 2004
|
 Also: Auf Seite X, die vom Besucher im Browser aufgerufen wird, soll der Inhalt von Tabelle topper zu sehen sein. topper wird befüllt mit Datensätzen aus entweder Tabelle termine, Tabelle aktuelles oder es wird direkt in Tabelle topper geschrieben. Auswahl oder Schreiben geschieht im Admin-Bereich.
Mit INSERT geht es, wie beschrieben, aber meine Frage geht jetzt in die Richtung, ob es eine Art "Überschreiben" gibt, damit es immer (sagen wir aus rein ästhetischen Gründen) nur einen Datensatz in Tabelle topper gibt. Ja, man kann es auch sein lassen und beim Aufruf von Seite X immer auf topper zugreifen und lediglich den neuesten/ jüngsten Eintrag anzeigen. Es ist jetzt nur die Frage, ob auch die "ästhetische" Weise geht? Eventuell vorher alles aus Tabelle topper löschen und dann den ausgewählten Datensatz reinschreiben?
Grüße
MQ
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
04.08.2004, 01:26
|
#8
|
|
TP-Supporter
Registriert seit: Sep 2003
Ort: Wien, Österreich
|
sicher kannst du datensätze "überschreiben":
Zitat:
|
UPDATE tabelle SET feld1='wert1', feld2='wert2', feld3='wert3' WHERE feldx='deineBedingung'
|
Achtung: wenn du ein update ohne eine Bedingung ausführst, dann werden alle Einträge in der Tabelle upgedated (als bedingung empfiehlt sich logischerweise der primärschlüssel des zu ändernden datensatzes, sofern nur ein bestimmter Eintrag editiert werden soll).
__________________
Java != JavaScript
"He who makes a beast of himself gets rid of the pain of being a man."
Dr. Johnson
|
|
|
04.08.2004, 01:33
|
#9
|
|
TP-Senior
Registriert seit: May 2004
|
Aber das klappt doch gerade nicht. Siehe ersten Beitrag. *scrollhoch* Wie gesagt: Mit INSERT läuft es. Wie bekommt man nur vorher den in der Tabelle befindlichen Inhalt gelöscht? Danach wird reingeschrieben. Ein
Code:
$sqlab = "delete * from topper";
$sqlab = "select * from termine ";
$sqlab .= "where terminID = '$auswahl'";
(... s.o.)
klappt nicht. Es wird einfach reingeschrieben, nichts gelöscht. Wahrscheinlich falsche Anweisung von meiner Seite... 
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
04.08.2004, 01:40
|
#10
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Wie schon gesagt, einfach wäre das Update.
Wenn immer nur ein Datensatz in topper sein soll kann man sich auch manuell eine Zelle ID anlegen, bei ID den Wert1 eintragen und dann mit fogendem Code updaten
PHP-Code:
$result = mysql_query("UPDATE topper SET topdate1= '$wann1', topdate2= '$wann2', toptext='$termin' WHERE id = '1'");
Oder man löscht die Tabelle und lässt sie neu erstellen.
Dazu folgendes
PHP-Code:
$result = mysql_query("TRUNCATE TABLE topper"); $result = mysql_query("INSERT INTO topper (topdate1,topdate2,toptext) VALUES ('$wann1','$wann2','$termin')");
|
|
|
04.08.2004, 02:57
|
#11
|
|
TP-Senior
Registriert seit: May 2004
|
Gut Ding braucht Weil... - Es klappt also doch mit dem UPDATE.  Der Fehler lag somit in meiner ersten MySQL-Anfrage im "where terminID = '$auswahl'", weil ich eine Identifizierung über die terminID machen wollte und da noch nicht das Auslesen der Datenbankabfrage und dem Zwischenspeichern in Variablen hatte. Und da - wie schon alle richtig bemerkt haben - in der Tabelle "termine" kein Feld terminID ist, gabs eben Kuddelmuddel.
Habe jetzt den Rat von webcreate mit der ID mit dem Wert 1 genommen. Klappt wunnaba!
Problem also gelöst! Dank an alle Beitrag-Schreiber!
Grüße
MQ
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:10 Uhr.
|
 |