usergallery sortieren

acid2k

acid2k

Doppel-As
hi,

ich hab eine usergallery programmiert wo mann mehrere bilder hochladen kann.
die position eines bildes kann mann durch einen button nach llinks oder nach rechts verschieben können.

ich hab jetzt das problem das wenn man öffters und schnell auf ein button klickt das dann mehrere bilder die selbe positions nummer in der daten bank erhalten.

woran kann das liegen und wie kann man das problem lösen.

zb. bild 1 hat position 1 in der daten bank
und bild 2 hat postion 2 wenn ich auf bild 2 nach links verschieben klicke muss
bild 2 postition 1 haben und bild 1 position 2 das sind 2 update befehle
die programmiersprache ist php
danke im vorraus
 
Zuletzt bearbeitet:
versuch mal ne wait-time einzubauen und guck ob das problem dann immernoch besteht.

Ich denke nämlich dass beim schnellen Draufklicken schon der nächste Befehl übertragen wird, bevor überhaupt der MySQL -Server fertig ist.

Warum lädst du die Seite überhaupt jedesmal neu? Du könntest doch zuerst alle Bilder an die richtige Position schieben lassen und dann das endgültige Ergebnis speichern lassen. Das sollte doch kein Problem darstellen und ist bestimmt angenehmer, als wenn sich die Seite dauernd neu lädt.

BTW: Geile Idee! Muss ich auch mal basteln^^
 
ja dass problem ist es gibt kein speicher button es sollte nach dem klicken übernommen werden. was meinst du genau mit wait time

ich hab um die abfrage ein while gesetzt und danach ein sleep(1)
trozdem hat es nich gefunzt
 
wie genau passiert denn das speichern bei dir? (auszug aus dem script, wenn möglich) mit dem sleep-befehl wollte ich vorerst mal bezwecken, dass eine bestimmte zeit einfach gewartet wird, bis die mysql auf jeden fall fertig ist.
 
ja das sleep befehle hat irgend wie nicht gefunzt naja

also ich habe zwei buttons einemal nach links und einmal nach rechts wenn dieser gedrückt wird wird ein script aufgerufen der die position des bildes ermittelt also select anweisung und dann je nach dem die neue position errechnet pos + 1 oder pos -1 und liest dann die information aus welches bild aktuell die position besitzt um dann die positionen beider bilder zu vertauschen.

while(!$yAuth->myQuery("UPDATE usergallery SET position='".$newPos."' WHERE galleryid ='".$_GET["galid"]."'\n")) sleep(1);

while(!$yAuth->myQuery("UPDATE usergallery SET position='".$oldPos."' WHERE galleryid ='".$rows['galleryid']."'")) sleep(1);

speichert es mit update in die datenbank und wird dann mit header(location) wieder auf die gallery geleitet
 
hat keiner ne antwort auf mein problem ?? :(

bin für jede hilfe dankbar :)
 
Zuletzt bearbeitet:
Wie wärs wenn du nur in festgelegten intervallen und 'onunload' prüfen würdest?
Gruss
d22
 
Hi, ich würde per JavaScript ein weiteres klick auf den Button verhinder mit onclick, und da dann die Seite neugeladen wird ist das ja alles wieder beim anfangspunkt und du kannst nochmal klicken.

gruß $ch()k()
 
hi $ch()k() hört sich gut an aber hab das nicht ganz verstanden wie man das realisieren soll
hast ein kleines beispiel für micht ?

danke
 
HI, ohhje ich kann doch garnicht so gut JavaScript ^^

aber ich habs mal probiert und musst halt schauen ob dadurch das erreicht wird was du willst.

als Bsp. hab ich zwei Dateien gemacht die jeweils im Head-Tag ein kleinen Script haben.

index.php
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<HEAD >
    		<title> TEST </title>
    		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" >
    		<script language="JavaScript" type="text/javascript">
		<!--
			var clicked = false;

			function checkLink()
			{
				if( clicked == false)
				{
					clicked = true;
					return true
				}
				else
				{
					window.alert('Nicht zweimal klicken ;-)');
					return false
				}				
			}
 		//-->
		</script>    		
  	</HEAD >
  	<BODY>
		<p>
			<h1>TEST</h1>
			<br><br>

			<h2><a href="index2.php" onmousedown="return checkLink();" >KlickMich</a></h2>
		</p>	
			

	</BODY>
</html>


index2.php
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<HEAD >
    		<title> TEST </title>
    		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" >
    		<script language="JavaScript" type="text/javascript">
		<!--
			var clicked = false;

			function checkLink()
			{
				if( clicked == false)
				{
					clicked = true;
					return true
				}
				else
				{
					window.alert('Nicht zweimal klicken ;-)');
					return false
				}				
			}
 		//-->
		</script>    		
  	</HEAD >
  	<BODY>
		<p>
			<h1>TEST2</h1>
			<br><br>
			<h2><a href="index.php" onmousedown="return checkLink();">zurück</a></h2>			
		</p>
	</BODY>
</html>

so hoffe es hilft dir weiter,

gruß $ch()k()
 
danke aber hat irgendwie nix gebracht die positionen in der datenbank verhacken sich trozdem

ich weis nicht woran das liegt.
sobald ich zwei positionen miteinander tausen lasse verhackt es sich
 
Zuletzt bearbeitet:
schade dachte es hilft,
aber deine Galerie funktioniert wenn man direkt einmal klickt richtig?
vielleicht ist es auch ein Bug bei dir im Script...
 
also nochmal zum verständnis

Code:
<a href=galsort.php?act=back&galid=1 onmousedown="return checkLink();">back</a>

<a href=galsort.php?act=forw&galid=1 onmousedown="return checkLink();">forward</a>

das sind schon mal die links

und dann kommt der part wo die positionen ausgetauscht werden

Code:
if($_GET["act"] == "back") {

	if($oldPos > 1) {

		$newPos = $oldPos - 1;

		$sql = "SELECT galleryid FROM usergallery WHERE position = ".$newPos;

		$res = $yAuth->myQuery($sql);

		$rows = $yAuth->myFetchAssoc($res);

		

		if($newPos == 1) {

			$sql = "SELECT photo FROM usergallery WHERE userid = ".$userid." AND position = ".$oldPos;

			$avatarResult = $yAuth->myQuery($sql);

			$avatarPicInfo = $yAuth->myFetchAssoc($avatarResult);

			while(!$yAuth->myQuery("UPDATE user SET avatar='".$avatarPicInfo["photo"]."' WHERE userid = ".$userid)) sleep(1);

		}

		while(!$yAuth->myQuery("UPDATE usergallery SET position='".$newPos."' WHERE galleryid ='".$_GET["galid"]."'\n")) sleep(1);

		while(!$yAuth->myQuery("UPDATE usergallery SET position='".$oldPos."' WHERE galleryid ='".$rows['galleryid']."'")) sleep(1);

	}

}

else if($_GET["act"] == "forw") {

	if($oldPos < $count) {

		$newPos = $oldPos + 1;

		$sql = "SELECT galleryid FROM usergallery WHERE position = ".$newPos;

		$res = $yAuth->myQuery($sql);

		$rows = $yAuth->myFetchAssoc($res);

		

		if($newPos == 2) {

			$sql = "SELECT photo FROM usergallery WHERE userid = ".$userid." AND position = ".$newPos;

			$avatarResult = $yAuth->myQuery($sql);

			$avatarPicInfo = $yAuth->myFetchAssoc($avatarResult);

			while(!$yAuth->myQuery("UPDATE user SET avatar='".$avatarPicInfo["photo"]."' WHERE userid = ".$userid)) sleep(1);

		}

		while(!$yAuth->myQuery("UPDATE usergallery SET position='".$newPos."' WHERE galleryid ='".$_GET["galid"]."'")) sleep(1);

		while(!$yAuth->myQuery("UPDATE usergallery SET position='".$oldPos."' WHERE galleryid ='".$rows['galleryid']."'")) sleep(1);

	}	

}
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

kann schon sein hab aber keinen fehler gefunden :S

alles was ich mache sind ja nur zwei update befehler
 
Zuletzt bearbeitet:
hmmm, mir fällt sonst leider nichts ein was dir helfen könnte.

sorry
 

Ähnliche Themen

bash: Fehlermeldung und Werte in Array sortieren?

PostgreSQL und Spaltenalias

Ubuntu X / dbus problem

web-cyradm: Anmeldung nicht möglich

Windows Profile von ~muell.tmp bereinigen

Zurück
Oben