Gallerymodul mit Kommentar
-
- Beiträge: 115
- Registriert: Di 25. Nov 2003, 16:47
- Kontaktdaten:
Wenn du den folgenden SQL Code laufen lässt erhältst du die Bild Table.
Gruss Crazy
Gruss Crazy
Code: Alles auswählen
CREATE TABLE `bild` (
`ID` tinyint(3) unsigned NOT NULL auto_increment,
`Pfad` varchar(255) default '0',
`Text` text,
PRIMARY KEY (`ID`)
) TYPE=MyISAM;
-
- Beiträge: 115
- Registriert: Di 25. Nov 2003, 16:47
- Kontaktdaten:
wenn du verhindern willst, dass der eintrag doppelt aufgenommen wird, gibt es verschiedene möglichkeiten:
variante 1
du machst den pfad 'unique'. allerdings wird es bei einem reload zu einer fehlermeldung kommen, die du dann wiederum abhandeln musst. wenn du längerfristig mehrsprachigkeit ins auge fast, muss die kombination sprache und pfad 'unique' gemacht werden (auf db-ebene). das würde ich in jedem fall machen, egal was du sonst in der applikationslogik machst.
variante 2
wie bereits angetönt, kannst du bei der ausgabe des formulares eine session-variable auf true setzen und bei speichern dann prüfen, ob diese true ist. im erfolgsfall wird gespeichert, andernfalls eben nicht. nach erfolgter speicherung ist dann diese session-variable wieder zu löschen.
gruss,
andreas
variante 1
du machst den pfad 'unique'. allerdings wird es bei einem reload zu einer fehlermeldung kommen, die du dann wiederum abhandeln musst. wenn du längerfristig mehrsprachigkeit ins auge fast, muss die kombination sprache und pfad 'unique' gemacht werden (auf db-ebene). das würde ich in jedem fall machen, egal was du sonst in der applikationslogik machst.
variante 2
wie bereits angetönt, kannst du bei der ausgabe des formulares eine session-variable auf true setzen und bei speichern dann prüfen, ob diese true ist. im erfolgsfall wird gespeichert, andernfalls eben nicht. nach erfolgter speicherung ist dann diese session-variable wieder zu löschen.
gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
-
- Beiträge: 115
- Registriert: Di 25. Nov 2003, 16:47
- Kontaktdaten:
das mit den doppeleinträgen ist im übrigen auch nicht wirklich schlimm. es macht einfach die datenbank ein bisschen grösser. es kommt halt auch drauf an, ob du selber der einzige redakteur bist, der allefalls texte eingibt. falls das so sein sollte, ist das mit den doppeleinträgen überhaupt kein problem. du musst einfach nicht reloaden. das ist alles.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
-
- Beiträge: 115
- Registriert: Di 25. Nov 2003, 16:47
- Kontaktdaten:
Ach so.... Hab weder Sprachen oder sonstwas bei mir laufen.
möchte wirklich nur, das User immer ein Betrag zum Bild geben können.
Wenn der natürlcih immer dopelt da steht, sieht das natürlich ein bisschen blöd aus... aber wenn ihr sagt dass das nicht der fall ist, hab ich genau das was ich gesucht habe.
möchte wirklich nur, das User immer ein Betrag zum Bild geben können.
Wenn der natürlcih immer dopelt da steht, sieht das natürlich ein bisschen blöd aus... aber wenn ihr sagt dass das nicht der fall ist, hab ich genau das was ich gesucht habe.
Hallo zusammen,
Ich bin wieder zurück aus dem Wochenende und habe gleich mal den Tip mit der Sessionvariable ausprobiert. Die Logik mit dem Formular habe ich nicht ganz verstanden. Ich überprüfe jetzt einfach ob die gleiche Eingabe gemacht wird. Jedoch scheitere ich schon viel früher. Der Wert wird nämlich nicht gespeichert. Villeicht findet ihr den Fehler. In den Klammern steht die Ausgabe des Echhos. Vielen Dank!
@project gonzo: Wie du liest sind wir am gleichen Problem. Am Schluss der Entwicklung werde ich denn PHP- und SQLcode hier nochmals auflegen.
Gruss crazy[/code]
Ich bin wieder zurück aus dem Wochenende und habe gleich mal den Tip mit der Sessionvariable ausprobiert. Die Logik mit dem Formular habe ich nicht ganz verstanden. Ich überprüfe jetzt einfach ob die gleiche Eingabe gemacht wird. Jedoch scheitere ich schon viel früher. Der Wert wird nämlich nicht gespeichert. Villeicht findet ihr den Fehler. In den Klammern steht die Ausgabe des Echhos. Vielen Dank!
Code: Alles auswählen
if ($subfile!="") { // Wenn Bild Grossansicht
echo $_SESSION["textvergleich"]."|"; //Echo1 (Immer leer)
//Wenn neuer Kommentar, dann in Datenbank einfügen
if(isset($_POST["text"] )&$_SESSION["textvergleich"]!=$_POST["text"]){ // Wenn es einen Text gibt und nicht gleich der Session
$sql ="Insert INTO bild VALUES(NULL,'".$subfile."','".$_POST["text"]."')";
$db->query($sql);
$_SESSION["textvergleich"] = $_POST["text"] ; //Eingeschriebener Text der Sessionvariable übergeben
echo $_SESSION["zim"] ; Echo2 (immer voll)
}
Gruss crazy[/code]
-
- Beiträge: 115
- Registriert: Di 25. Nov 2003, 16:47
- Kontaktdaten:
moin,
bei mir Funktioniert das soweit alles, was hier gepostet wurde...
aber wenn es stabiliere Sachen gibt, bin ich immer breit dieses zu testen
wollte da auch noch was ändern, aber irgendwie schaffe ich das nicht.
wollte folgende Veränderung:
- Automatisches Datum des eintrag ausgeben.
- E-Mail benachrichtigung an den Admin wenn und wo ein neuer eintrag gemacht wurde
bei mir Funktioniert das soweit alles, was hier gepostet wurde...
aber wenn es stabiliere Sachen gibt, bin ich immer breit dieses zu testen
wollte da auch noch was ändern, aber irgendwie schaffe ich das nicht.
wollte folgende Veränderung:
- Automatisches Datum des eintrag ausgeben.
- E-Mail benachrichtigung an den Admin wenn und wo ein neuer eintrag gemacht wurde
Bei dir funktioniert auch die Verhinderung des doppelten Speicherns durch F5?
Ok, deine zwei Erweiterungen werde ich in den nächsten Tag einbinden. Muss eben zurzeit die Webentwicklung ein bisschen in den Hintergrund stellen, da ein Kunde umbedingt an seiner AS400 Applikation Änderungen haben möchte.
Gruss crazy
Ok, deine zwei Erweiterungen werde ich in den nächsten Tag einbinden. Muss eben zurzeit die Webentwicklung ein bisschen in den Hintergrund stellen, da ein Kunde umbedingt an seiner AS400 Applikation Änderungen haben möchte.
Gruss crazy
-
- Beiträge: 115
- Registriert: Di 25. Nov 2003, 16:47
- Kontaktdaten:
ähm ne anmerkung meinerseits
du verwendest
für die id auto_increment
und schreibst die werte mit dann mittels folgendem query:
contenido hat ne nette funktion das etwas anders zu machen...
contenido verwendet dafür die tabelle con_sequence
du benötigst eigentlich nur einen eintrag für deine tabelle in dieser tabelle
seq_name next_id
bild 0
sobald jemand ein kommentar zu einem bild schreibt rufst du einfach beim forumlar
$id = $db->nextid("bild"); // der wert in der con_sequence wird dann um eins raufgesetzt...
dann hättest du genau für dieses kommentar ne eindeutige id die wirklich nur einmal verwendet werden kann...
diesen wert übergibst du mit deinem formular in einem input hidden
bei deinem insert statement setzt du an erster stelle diesen übergebenen wert...
und jetzt kommt der clou...
vor diesem statement brauchst du eigentlich nur mehr kontrollieren ob ein eintrag in "bild" mit dieser id vorhanden ist...
wenn nein wird dein statement ausgeführt, wenn ja führst du nichts aus...
somit hast du keine verdoppelung der einträge...
du verwendest
für die id auto_increment
und schreibst die werte mit dann mittels folgendem query:
Code: Alles auswählen
$sql ="Insert INTO bild VALUES(NULL,'".$subfile."','".$_POST["text"]."')";
contenido verwendet dafür die tabelle con_sequence
du benötigst eigentlich nur einen eintrag für deine tabelle in dieser tabelle
seq_name next_id
bild 0
sobald jemand ein kommentar zu einem bild schreibt rufst du einfach beim forumlar
$id = $db->nextid("bild"); // der wert in der con_sequence wird dann um eins raufgesetzt...
dann hättest du genau für dieses kommentar ne eindeutige id die wirklich nur einmal verwendet werden kann...
diesen wert übergibst du mit deinem formular in einem input hidden
bei deinem insert statement setzt du an erster stelle diesen übergebenen wert...
Code: Alles auswählen
$sql ="Insert INTO bild VALUES(".$meineID.",'".$subfile."','".$_POST["text"]."')";
vor diesem statement brauchst du eigentlich nur mehr kontrollieren ob ein eintrag in "bild" mit dieser id vorhanden ist...
wenn nein wird dein statement ausgeführt, wenn ja führst du nichts aus...
somit hast du keine verdoppelung der einträge...
*** make your own tools (wishlist :: thx)
also das mit der sessionvariablen ist ja nur eine möglichkeit. ich versuche das nochmals etwas genauer zu erläutern, wie ich das jeweils bei applikationen mache, bei denen doppeleinträge ein echtes problem wären:
(1) man hat ja zwei mögliche zustände bei einem solchen formular: vor dem versenden und nach dem versenden. der zauber liegt darin, das eine vom andern zu unterscheiden. das kann nun auf zweierlei arten erfolgen. einerseits kann eine weiterleitung auf einer andere seite erfolgen, die die speicherung ausführt oder es kann im gleichen modul erfolgen (was wesentlich einfacher ist).
(2) wenn also das modul aufgerufen wird, ohne dass per post oder get formularwerte übergeben worden sind, darf davon ausgegangen werden, dass das formular noch nicht versendet worden ist. während der ausführung wird also zum beispiel die variable $_SESSION['sent'] = false gesetzt.
(3) wenn das modul aufgerufen wird und formularwerte per post oder get übertragen worden sind, ist das formular offensichtlich versendet worden und die daten sollen gespeichert werden. jetzt ist nur die frage, ob ein reload vorgenommen worden ist oder nicht. jetzt macht man einfach die speicherung der daten davon abhängig, dass $_SESSION['sent'] immer noch auf false gesetzt ist. also so...
(4) wenn jetzt jemand ein reload macht, werden zwar erneut werte übertragen aber die sessionvariable ist nicht gesetzt und die speicherung der werte erfolgt deshalb kein zweites mal.
in quasi-code sieht das dann etwa so aus:
natürlich ist es immer sinnvoll, das ganze auch auf db-ebene sicher zu stellen, in dem man die kombination aus bild-id und z.b. sprache auf unique setzt.
gruss,
andreas
(1) man hat ja zwei mögliche zustände bei einem solchen formular: vor dem versenden und nach dem versenden. der zauber liegt darin, das eine vom andern zu unterscheiden. das kann nun auf zweierlei arten erfolgen. einerseits kann eine weiterleitung auf einer andere seite erfolgen, die die speicherung ausführt oder es kann im gleichen modul erfolgen (was wesentlich einfacher ist).
(2) wenn also das modul aufgerufen wird, ohne dass per post oder get formularwerte übergeben worden sind, darf davon ausgegangen werden, dass das formular noch nicht versendet worden ist. während der ausführung wird also zum beispiel die variable $_SESSION['sent'] = false gesetzt.
(3) wenn das modul aufgerufen wird und formularwerte per post oder get übertragen worden sind, ist das formular offensichtlich versendet worden und die daten sollen gespeichert werden. jetzt ist nur die frage, ob ein reload vorgenommen worden ist oder nicht. jetzt macht man einfach die speicherung der daten davon abhängig, dass $_SESSION['sent'] immer noch auf false gesetzt ist. also so...
Code: Alles auswählen
if (isset($_SESSION['sent']) && !$_SESSION['sent']) {
// speicherung vornehmen
// sessionvariable löschen
unset($_SESSION['sent']);
} else {
// speicherung nicht vornehmen
}
in quasi-code sieht das dann etwa so aus:
Code: Alles auswählen
<?
if (isset($_POST['senden']) { // hier ist der name des buttons einzugeben
// die übertragung ist erfolgt
if (isset($_SESSION['sent']) && !$_SESSION['sent']) {
// speicherung vornehmen
// sessionvariable löschen
unset($_SESSION['sent']);
} else {
// speicherung nicht vornehmen
// ggf. eine ausgabe mit einer meldung an den browser
}
} else {
// es ist keine übertragung erfolgt
// sessionvariable setzen
$_SESSION['sent'] = false;
// formular ausgeben
}
?>
gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)