Gallerymodul mit Kommentar

project gonzo
Beiträge: 115
Registriert: Di 25. Nov 2003, 16:47
Kontaktdaten:

Beitrag von project gonzo » Do 9. Sep 2004, 16:04

hab da auch mal ne doofe Frage zu,... wie sieht denn die Tabelle der Datenbank aus???? :oops:

crazy
Beiträge: 62
Registriert: Di 10. Feb 2004, 10:39
Kontaktdaten:

Beitrag von crazy » Fr 10. Sep 2004, 08:02

Wenn du den folgenden SQL Code laufen lässt erhältst du die Bild Table.
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;

project gonzo
Beiträge: 115
Registriert: Di 25. Nov 2003, 16:47
Kontaktdaten:

Beitrag von project gonzo » Fr 10. Sep 2004, 09:28

Jo,... Danke... bin nicht so fit mit SQL... :oops:

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 10. Sep 2004, 09:49

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
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

project gonzo
Beiträge: 115
Registriert: Di 25. Nov 2003, 16:47
Kontaktdaten:

Beitrag von project gonzo » Fr 10. Sep 2004, 10:23

oh ha... danke für die Erklärung, aber das sagt mir alles nicht viel.
muss das Modul mal ausprobieren, was passiert....
oder gibt es schon ein Output, wo das mit dem "Doppeleintrag" gelöst ist?

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 10. Sep 2004, 10:29

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)

project gonzo
Beiträge: 115
Registriert: Di 25. Nov 2003, 16:47
Kontaktdaten:

Beitrag von project gonzo » Fr 10. Sep 2004, 10:38

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.

crazy
Beiträge: 62
Registriert: Di 10. Feb 2004, 10:39
Kontaktdaten:

Beitrag von crazy » Mo 13. Sep 2004, 21:16

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!

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)
}
@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]

project gonzo
Beiträge: 115
Registriert: Di 25. Nov 2003, 16:47
Kontaktdaten:

Beitrag von project gonzo » Mo 13. Sep 2004, 21:57

moin,
bei mir Funktioniert das soweit alles, was hier gepostet wurde...
aber wenn es stabiliere Sachen gibt, bin ich immer breit dieses zu testen :wink:
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

crazy
Beiträge: 62
Registriert: Di 10. Feb 2004, 10:39
Kontaktdaten:

Beitrag von crazy » Di 14. Sep 2004, 11:43

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

project gonzo
Beiträge: 115
Registriert: Di 25. Nov 2003, 16:47
Kontaktdaten:

Beitrag von project gonzo » Do 16. Sep 2004, 13:08

wenn F5 gedrückt wird, dann schreibt er die Einträge bei mir auch doppelt... aber sowas macht mann ja nicht :)
das mit den Änderungen währe echt mega geil

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 16. Sep 2004, 13:26

ähm ne anmerkung meinerseits

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 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...

Code: Alles auswählen

$sql ="Insert INTO bild VALUES(".$meineID.",'".$subfile."','".$_POST["text"]."')";
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...
*** make your own tools (wishlist :: thx)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Do 16. Sep 2004, 13:29

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...

Code: Alles auswählen

if (isset($_SESSION['sent']) && !$_SESSION['sent']) {
    // speicherung vornehmen
    // sessionvariable löschen
    unset($_SESSION['sent']);
} else {
    // speicherung nicht vornehmen
}
(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:

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
}
?>
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
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Gesperrt