| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Diskussion: Problem mit Timeout[geloest] im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hi! Ich habe ein Skript was Daten aus einer Mysqldatenbank ausliest, den Table leoscht und neu erstellt, die ergebnisse ...
![]() |
| | #1 (permalink) |
| Guest Likes: | Problem mit Timeout[geloest] Anzeige Hi! Ich habe ein Skript was Daten aus einer Mysqldatenbank ausliest, den Table leoscht und neu erstellt, die ergebnisse in einen Array schreibt, diesen in $_SESSION speichert und dann auf eingaben vom Benutzer wartet. Problem damit ist nur das alle Eintraege im Array nach Moeglichkeit auch wieder in den neuen Table kommen sollen, nachdem sie veraendert wurden/oder auch nicht. Aber wenn der Benutzer aus welchem Grund auch immer nun keine Verbindung mehr bekommt liegen die Daten da im Array in $_SESSION und der Table ist gelockt. Gibt es eine Moeglichkeit in dieser Situation,also einem Event-getriggertem Skript,einen Timeout zu erkennne und entsprechende Aktionen einzuleiten? set_time_limit() kenn ich zwar aber das ist in diesem fall nicht hilfreich. mfg sw33t |
|
| | #2 (permalink) |
| Member of Honour ![]() | Da ich nicht hellsehen kann, kann ich nur vermuten: set_time_limit() setzt lediglich die maximale Ausführungszeit deines Scriptes. Dein Problem wird ehr die Session-Dauer sein. Gegenfrage: Du dropst jedes mal den kompletten Table? Wo steckt da der Sinn? Wozu gibt es denn die UPDATE-Funktion?... Was genau steht in der Tabelle drin? Wieviele Daten sind es, die da in der Session zwischengespeichert werden? (man sollte auch immer drauf achten, die Session nicht größer als nötig zu machen...) Ich denke mal, die sinnvollere Lösung wäre in deinem Fall nicht das Heraufsetzen der Session-Zeit, sondern das komplette Überdenken deiner Vorgehensweise?! |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Member of Honour ![]() Registriert seit: 02.10.01 ![]() Likes: 0 | Zitat:
beavisbee ist prinzipiell nichts mehr hinzuzufügen. Was man natürlich trotzdem machen könnte ist die Daten sobald sie in das Array kommen auch irgendwo anders zwischenzuspeichern, so dass auch ein anderes Script jederzeit (später noch) zugreifen kann. Beispielsweise /tmp/file oder einfach eine temporäre Tabelle. Macht aber in deinem Fall sicher wenig Sinn. | |
| | |
| | #4 (permalink) |
| Guest Likes: | Das Problem dabei ist folgendes: 1.Der Benutzer erstellt den Inhalt 2.Es muss auch moeglich sein den Inhalt zu loeschen 3.Der gesamte inhalt muss veraenderbar sein Das positive dabei, die Tables die ich droppe und erstelle sind nicht besonders gross, ca 20-40 Eintraege maximal. Punkt 2 macht es extrem schwer id's zu fuehren, ich muesste extrem viel aufwand betreiben, nur um die ids im Auge zu behalte. Punkt3 verhindert praktisch das ich die updatefunktion einsetzen kann, da ich nicht weiss was oder wo geaendert wird. Da das einfuegen und veraendern und auslesen von eintraegen in 3 verschiedenen Skripten statt findet, welche redundanz so weit wie moeglich unterbinden, kann ich auch nicht ohne weiteres eine Query abschicken und dann jeweils nur das aktuelle element entfernen. Letzteres wollte ich eigentlich nicht machen, da ich einiges umstellen muss, aber wie es scheint habe ich keine andere wahl. Es behebt aber nicht das Problem mit dem Lock. Vielen dank mfg sw33t //edit: Der Benutzer lockt den Table |
|
| | #5 (permalink) |
| Member of Honour ![]() | schreib mal bitte, was genau du überhaupt vor hast... (incl. Sinn und Struktur deiner Tabellen etc.) ich versteh noch immer nicht, warum du unbedingt komplette Table dropst... Was genau bringt dir das in deinem konkreten Fall für Vorteile gegenüber reinen UPDATE, INSERT und DELETE Querries? |
| | |
| | #6 (permalink) |
| Guest Likes: | Also folgendes: 2 Benutzergruppen: 1.greift nur lesen auf den Inhalt zu , kein Problem 2. erstellt, editiert den Inhalt,hier ist mein Problem. Der Inhalt der Eintraege des Tables werden in ein HTML-Dokument geparst. Die Eintraege bestehen aus 3 Feldern. Typen:LongText LongText Text Im Ersten steht nur text, im 2. ist ein serialisierter Array, von variabler Laenge,gespeichert und im 3 normaler Text. Die Anzahl der Eintraege pro Table koennen variieren. Ich koennte nun sagen:ich spendiere den Eintraegen eine zusaetzlichen Eintrag,was in meinem Konzept nicht vorgesehen war. Dann haette ich das Problem wenn die Eintraege geloescht werden das bei meinetwegen 5 Eintraegen, ich trotzdem bei 8 anfangen muss weil 2 geloescht wurden und die IDs 6 und 7 nicht eindeutig sind. Das im Auge zu behalten bedarf eines grossen Aufwandes,, und einfach raufzaehlen ist zwar ne Moeglichkeit,Problem dabei ist nur das ich nicht weiss wie viele Eintraege vorgenommen werden(sollten zwar nicht zuviele sein aber,ich sehe die Moeglichkeit trotzdem nicht gerne,obwohl es die Alternative mit den wenigsten aenderungen ist) Die Update-Funktion von mysql nuetzt mir nichts, da alle Eintraege frei veraenderbar sein muessen und die ID im schlimmsten fall nicht eindeutig ist. Delete ist in sofern schwierig, als das ich meinen ganzen Code umschreiben muss da in Skript 1 alle eintraege aus einem Table gesichert werden, in Skript 2 werden die Eintraege erstellt/bearbeitet und in Skript 3 wird alles eingefuegt. Diese Situation macht es sehr schwirieg einzelne Eintraege zu loeschen. Mit Insert an sich habe ich keine Probleme, nur damit das dann einige Sachen doppelt drin stehen, bzw einmal vor der Modifikation und einmal danach. Das ist auch der grund wiso ich den ganzen table droppe, um doppelte Eintraege zu vermeiden. Und wie schon gesagt, mein problem ist ja nicht meine Vorgehensweise, sondern nur die spezielle Konstellation das evtl ein Verbindungsabbruch erfolgt und dann alle Eintraege eines Tables weg sind. mfg sw33t //edit: ich glaub ich hab eine Loesung, ich muss mich erst daran gewoehnen das eine query die Datensaetze praktisch dupliziert,und das was $mysql_session->query() zurrueckt gibt, eigentlich nur eine Kopie der Daten ist.(wenn es sich dabei um query("select * from table") handelt,danke beavisbee) Pseudocode(bitte berichtigen wenn falsch): Speichere query in $_SESSION hole ersten eintrag aus query und speichere 1.Element in $_SESSION editiere Eintrag Identifiziere editierten Eintrag mittels gespeichertem 1.Element in $_SESSION und fuehre update aus. |
|
| | #7 (permalink) | ||||||||
| Member of Honour ![]() | Zitat:
Deinen Aussagen entnehme ich aber, dass du mit Datenbanken nicht so wirklich vertraut bist. Daher: hast du mal geschaut, ob es nicht schon ein CMS gibt, was deine Anforderungen erfüllt? http://www.cmsmatrix.org/ Zitat:
außerdem: ein serialisiertes Array ist, genau wie eine Komma-separierte Liste, nicht so wirklich toller Stil. Wozu genau brauchst du das unbedingt so? Zitat:
du erstellst einfach ein Feld, vom Typ Integer, als Primärschlüssel und der Option auto_increment. Zitat:
Zitat:
Aber das, was du vorhast, ist echt eine Vergewaltigung der Datenbank. Da schreib's lieber nochmal neu. Zitat:
Zitat:
Zitat:
Eine Query dupliziert keine Datensätze, sondern macht das, was du in der Query sagst.... INSERT fügt freilich was neues ein, UPDATE bearbeitet einen oder mehrere bestehende Beiträge, je nachdem, wieviele Datensätze auf die WHERE-Klausel zutreffen, etc. Fazit: beschäftige dich erstmal ausführlich mit dem Thema Datenbanken (relationale Datenbanken, DBMS, Normalisierung von Datenbanken - also die verschiedenen Normalformen, etc.) | ||||||||
| | |
| | #8 (permalink) |
| Guest Likes: | ja, ich bin recht unerfahren mit Datenbanken. So wusste ich zB nicht das man ein Feld auf automatisch,vom DatenbankManagmentSystem, erhoehen lassen kann. Und ja, ich glaube man kann meine herangehensweise als Vergewaltigung bezeichnen, denn ich benutze die Datenbank nur als Container mit zugriffsrechten. Den (serialisierten)Array brauche ich, weil die HTMLseite dynamisch auf den Inhalt und die Anzahl der eintraege reagiert, und da bietet es sich ja an mittels foreach ueber den Array zu iterieren. Unabhaengig davon, was waere eine alternative zu einem serialisierten Array,sprich besser als eine Komma-seperierte Liste? Meine Aussage mit query war etwas unsauber formuliert. Ich meinte eine Query mit "select * from table" gibt eine Kopie der Datensaetze im Table zurrueck und veraenderungen an den Daten betreffenden Table nicht und genau an diesen Aspekt habe ich gar nicht gedacht als du update erwaehnt hast. Ueber das nochmal schreiben denke ich ernsthaft nach, aber erst nach etwas mehr theorie,bis dahin behalte ich erstmal das bei(notgedrungen). Vielen dank fuer die Hilfe und die Kritik. mfg sw33t //edit Aus der art und weise wie die Diskussion hier gelaufen ist schlisse ich mal das es in meinem Fall keine moeglichkeit gibt einen Timeout in php zu erkennen. (bitte berichtigen falls falsch) |
|
| | #9 (permalink) | ||||
| Member of Honour ![]() | Zitat:
Zitat:
Einfach quasi als Liste, nur mit Zahlen-Indizes, oder verschiedene Inhalte mit assoziativem Array ($daten["title"]="Blub"; $daten["text"]="blablabla"; ) Wenn's nur ne Liste ist, dann lös das einfach über ne zweite Tabelle: id (int, primary_key, autoincrement) owner (int, hier drin steht die ID von dem Element, zu dem es gehört. dieses Feld wird auch Fremdschlüssel, oder englisch: foreign key, genannt.) daten (text / int / was immer da an Daten rein muss) Zitat:
Du kannst mit SELECT-Querries sogar Daten ausgeben, die gar nicht in der Tabelle stehen, Statistik-Funktionen, Gruppierungen, Berechnungen, Daten aus anderen Tabellen (Stichwort JOINs) Wenn du willst, das Daten direkt in der Datenbank geändert werden, wenn die Daten geändert werden, dann solltest du dich mal mit ORM - objekt-relationalem Mapping - beschäftigen. Hier gibt es eine Manager-Klasse, welche Zugriffe auf die Tabelle managed und persistente Objekte, welche genau einen Datensatz darstellen. Aber mit solchen Themen solltest du dich erst beschäftigen, wenn du an sich weißt, wie genau Datenbanken so funktionieren. Zitat:
Du startest eine Session, dabei wird eine SessionID erzeugt, über welche die Session eindeutig identifizierbar ist. Auf dem Server liegt dann eine Datei, welche alle Daten der Session speichert. Clientseitig wird diese ID meist in einem Cookie gespeichert. Wenn auf eine Datei innerhalb einer bestimmten Zeit (eben dem Session-TimeOut) nicht zugegriffen wird, dann wird diese gelöscht und die Session ist damit weg. Die Daten sind demzufolge dann pfutsch. | ||||
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Problem mit Datentyp Blob[geloest] | sw33tlull4by | (Web-) Design und webbasierte Sprachen | 5 | 16.05.09 10:39 |
| Traceroute - Timeout | JayJay | Network · LAN, WAN, Firewalls | 4 | 01.08.07 17:12 |
| Newsletter Timeout | webfreak | (Web-) Design und webbasierte Sprachen | 3 | 01.04.06 13:58 |
| DMA timeout error | ulu01 | Linux/UNIX | 14 | 03.05.05 16:54 |
| Timeout-Problem | paulk | Windows | 2 | 22.06.04 07:32 |