• Hallo Besucher!

    Du bist neu im Forum? Dann registriere dich hier, um Diskussionen beizutreten oder eigene Themen zu erstellen. Für die Registrierung ist es erforderlich, dass du einen Spielaccount bei Die Stämme hast.

    Andernfalls kannst du dich hier direkt einloggen.

    Falls du dein Passwort vergessen hast, kannst du hier ein neues Passwort anfordern.

PHP script mit link ausführen

DeletedUser92786

Gast
Heyho
ich habe mich heute zum ersten mal näher mit PHP beschäftigt und mir etwas zusammen geschrieben..
nun bin ich gerade an einer stelle bei der ein php script ausgeführ werden soll, wenn man auf einen link klickt..

wie geht das?^^ (ja ich bin noch anfänger)

nähere infos:
ich hab eine sql datenbank und dort eine tabelle mit einigen spalten, darunter auch 'ges_wert', die lediglich INT-werte enthält..
wenn ich jetzt auf einen link klicke, soll sich der inhalt eines feldes dieser spalte um 1 erhören
die id der zeile ist in dem fall bereits vorhanden..

die id erzeuge ich so:
PHP:
<?php
	$links = rand(1,10);
	$rechts = rand(1,10);
?>

(das link, besser gesagt das bild, welches in diesem falls als link benutz wird befindet sich in einer tabelle)
'spieler' ist da unten die tabelle
und 'url' ist die adresse zum pfad vom bild....

PHP:
<td valign="middle" align="center">
          <a href="index.php"> //der link
	            <img src="
		    <?php
		              $abfrage = "SELECT url FROM spieler WHERE id= '$links'";                      
		              $ergebnis = mysql_query($abfrage);
		              while($row = mysql_fetch_object($ergebnis))
		              {echo "$row->url";}
		    ?>"
</a>
</td>

zum ändern der daten in einer sql datenbank mit php hab ich mir mittlerweile das zusammen gesucht:

PHP:
<?php
$aendern = "UPDATE Tabellenname Set
Spaltenname1 = 'Wert2'
WHERE Spaltenname2 = 'Wert2'";
$update = mysql_query($aendern);
?>

nur weiß ich leider nicht wie ich das dort einfügen muss, damit es erst ausgeführt wird, sobald jemand auf den link klickt..
vielleicht ist der ansatz aber auch total falsch..aber naja, erster tag mit php

danke schonmal
mfg el'




/edit: wenn das irgendwie doch extrem umständlich beschrieben ist, bescheid sagen
ich bin da halt grad so drin und mir würds nicht auffallen, wenn das da oben eigentlich keinen sinn macht :D
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser92786

Gast
update:

das ändern der daten funktioniert jetzt halb.


PHP:
			<?php
				$links = rand(1,10);
				$rechts = rand(1,10);
			?>



PHP:
<td valign="middle" align="center">
          <a href="index.php">
                    onclick="
		              <?php
					$aendern = "UPDATE spieler Set
					ges_wert=ges_wert + 1 WHERE id = '$links'";
					$update = mysql_query($aendern);
			      ?>"
                    <img src="
		               <?php
					$abfrage = "SELECT url FROM spieler WHERE id= '$links'";
					$ergebnis = mysql_query($abfrage);
					while($row = mysql_fetch_object($ergebnis))
					{echo "$row->url";}
				?>"
          </a>
</td>

NUR, dann wird der falsche datensatz verändert.
stell euch vor beim erstem mal ist $links = 5
und wenn ich dann auf den link klicke wird die seite neu geladen und $links ist dann 8

bei dem quellcode oben wird datensatz mit der id 8 editiert..
ich will aber das 5 angesprochen wird....wie muss ich das dafür machen?
 

DeletedUser

Gast
Du könntest per $_GET in der Adresszeile den alten Wert übergeben und dann das richtige ändern.
Wenn ich dein problem richtig verstanden habe
 

DeletedUser92786

Gast
hmm ah und wie/wo muss ich das $_GET einfügen?
also prinzipiell muss doch lediglich der integer wert, den $links am anfang hat an die nächste seite weitergegeben werden und das script wird dann mit diesem wert durchgeführt..
irgendwo stand etwas von <a href="index.php&zahl=$plus">
nur wie ruf ich dies dann wieder auf..und ist das überhaupt richtig?
 

DeletedUser

Gast
PHP:
onclick="
                      <?php
                    $aendern = "UPDATE spieler Set
                    ges_wert=ges_wert + 1 WHERE id = '$links'";
                    $update = mysql_query($aendern);
                  ?>"
onclick wird beim klicken auf dem pc ausgeführt... phpcode beim laden der seite von server selbst. somit ist das onclick leeeeer :D
soviel dazu.
wo der sinn eines onclickevents bei einem link ist... naja das sei dir überlassen.


hmm ah und wie/wo muss ich das $_GET einfügen?
also prinzipiell muss doch lediglich der integer wert, den $links am anfang hat an die nächste seite weitergegeben werden und das script wird dann mit diesem wert durchgeführt..
irgendwo stand etwas von <a href="index.php&zahl=$plus">
nur wie ruf ich dies dann wieder auf..und ist das überhaupt richtig?

das das so irgendwo stand bezweifel ich :D
Code:
<a href="index.php&zahl=$plus">
an stelle des & ein ?
Code:
<a href="index.php?zahl=$plus">
so und $_GET['zahl'] dürfte dann "$plus" sein. weiß nich ob das so beabsichtigt ist.


aja zum problem: wie wärs mit zahl aus db lesen und dann neu schreiben... ;)

lg
ludi

ps: alles nur so ideen :D richtigkeit der angaben liegen im auge des betrachters :D
 

DeletedUser92786

Gast
ok, dann werd ich das mit onclick mal am besten wieder komplett vergessen.
um das ganze mal etwas in einen kontext zu rück, damit es vielleicht verständlicher wird:
PHP:
            <?php
                $links = rand(1,10);
                $rechts = rand(1,10);
            ?>
damit will ich 2 zufallszahlen erzeugen, die dann als id verwendet werden.
mit dem ziel, dass später 2 zufällig ausgewählte datensätze aus einer datenbank angezeigt werden.
2 bilder nebeneinander...
bei einem klick auf eines der beiden bilder soll index.php neugeladen werden
gleichzeitig soll aber auch ein integer wert in der datenbank bei genau dieser id erhöht werden.
deswegen muss die zahl ja auch an die nächste seite übertragen werden, denn sonst kann man auf der enuen seite die zufallszahl ja nicht aus der datenbank neu auslesen, denk ich mal..
 

DeletedUser92786

Gast
ja gut, kann ich es so machen:

aus der index.php datei:
PHP:
			<?php
				$links = rand(1,142);
				$rechts = rand(1,142);
			?>
...
<a href="zaehler.php?plus='$links'">
...

aus der zaehler.php datei:

PHP:
<?php
	$verbindung = mysql_connect ("localhost","name","************")
		or die ("keine Verbindung möglich.
	 	Benutzername oder Passwort sind falsch");

	mysql_select_db("testdatenbank")
		or die ("Die Datenbank existiert nicht.");

        $id = $_GET["plus"];

	$aendern = "UPDATE tabelle Set
    	ges_wert=ges_wert + 1 WHERE id = '$id'";
	$update = mysql_query($aendern);	

	header("Status: 301 Moved Permanently");
	header("Location:index.php");
	exit;
?>
(über die richtigkeit hier kann man streiten...das eigentlich problem, das mich grad beschäftigt ist, dass es
gerade im ersten teil anscheinend nicht geht eine variable mit zaehler.php?plus='$links' zu übergeben
dabei wird immer nur der rohtext $links und nicht die zahl, die diese variable eigentlich ist übergeben...mumpitz

wie geht soetwas? =((((
 
Zuletzt bearbeitet von einem Moderator:

TimLim

Gast
Ich glaube du hast noch nicht verstanden was wofür geeignet ist.

PHP und HTML haben grunsätzlich nichts gemeinsam. Für den Browser zählt nur das HTML und das PHP verarbeitet lediglich Daten und lässt deine Seite dynamisch sein.

GET Parameter sind das an der URL angehängte.
PHP:
http://beispiel.com/?get=test&get2=test2
Du musst es mit einem ? anfangen und ein & um die Parameter zu trennen. Auslesen könntest du es so.
PHP:
<?php
echo $_GET['get'];
echo $_GET['get2'];
?>

Nun, wie gesagt macht der Browser nichts mit PHP. Daher musst du Anführungszeichen bei soetwas weglassen. Du musst denken, wie wird es später aussehen? Denn die PHP Variablen werden im Grunde nur ersetzt.

PHP:
<a href="zaehler.php?plus=<?php echo $links;?>">

Da das $links wiederum PHP ist und nicht HTML muss es natürlich auch in einem PHP-Block stehen (<?php ... ?>).

@Problem:
Wenn ich in meiner Annahme, dass du die Aufrufe der Bilder zählen willst, richtig liege brauchst du solche Get Parameter gar nicht. Warum änderst du den Wert der Spalte nicht direkt beim Aufruf der Bilder?
 

Vidirat

Gast
Ich empfehle AJAX. Ich werde heute Nacht mal was zusammenbasteln...
 

DeletedUser92786

Gast
großen Dank schonmal an TimLim
die info, dass ich die variable nur innerhalb eines php scripts weitergeben kann hab ich gebraucht ;)

jetzt hab ich nur noch eine kleine zusatzfrage:
momentan hab ich das ja so:

PHP:
<a href="zaehler.php?plus=<?php echo $links;?>">
da man aber ja die möglichkeit hat sich zwischen 2 unterschiedlichen bildern zu entscheiden hab ich mir gedacht ich zähl die plus und minus punkte..
spricht, wenn ich auf das linke bild klicke bekommt das in der datenbank einen punkt gutgeschrieben während der datensatz mit der id vom rechten bild einen minuspunkt bekommt
das sind 2 unterschiedliche spalten, also nicht denken, dass einmal 1 dazugerechnet wird und beim anderen der wert um 1 verringert wird..

ähm die frage war nun, wie mach ich das, wenn ich 2 variablen weitergeben will
mein erster gedanke war:

PHP:
<a href="zaehler.php?plus=<?php echo $links;?>?minus=<?php echo $rechts;?>">

doch das klappte nicht...
 

TimLim

Gast
GET Parameter sind das an der URL angehängte.
PHP:
http://beispiel.com/?get=test&get2=test2
Du musst es mit einem ? anfangen und ein & um die Parameter zu trennen. Auslesen könntest du es so.
PHP:
<?php
echo $_GET['get'];
echo $_GET['get2'];
?>

Dementsprechend ca. so:

Code:
<a href="zaehler.php?plus=<?php echo $links;?>&minus=<?php echo $rechts;?>">
 

DeletedUser

Gast
Also das ganze würde ich ja in etwa so lösen:

PHP:
if($_GET['act'] == "plus") {
// Code zum draufzählen
} elseif($_GET['act'] == "minus") {
// Code zum Abziehen
} else {
// Code der Links bsp.: <a href="zaehler.php?act=plus"><img src="bildplus">
}

Oder wenn du das ganze wie anfangs per zufälligen zahlen machen willst

PHP:
$zahl = rand(1,10);

if($_GET['act'] <= 5) {
// Code zum draufzählen
} elseif($_GET['act'] > 5) {
// Code zum Abziehen
} else {
// Code der Links bsp.: <a href="zaehler.php?act=<php echo $zahl; >"><img src="bildplus"></a>
}

Ist jetzt nur hingepostet, also kA obs so Funktioniert bin netmehr so fit in PHP ^^
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser92786

Gast
so, das hat alles ganz super geklappt, vorallem danke an timlim

nun ist aber ein neues problem aufgetreten..
es ist ja nunmal so, dass mit einem klick auf das bild, bzw den link ein punkt für denjenigen in der datenbank gutgeschrieben wird...

allerdings ist es leider so, dass, wenn man ganz oft nacheinander klickt, also bevor die seite sich neu geladen hat und man zwischen 2 anderen sachen auswählen kann, die stimme auch dementsprechend häufig gezählt wird...

gibt es eine möglichkeit dies zu unterbinden? irgendwie..mir föllt grad gaar nichts ein, also postet es, auch wenn es noch so offensichtlich ist^^ danke
 

TimLim

Gast
so, das hat alles ganz super geklappt, vorallem danke an timlim

nun ist aber ein neues problem aufgetreten..
es ist ja nunmal so, dass mit einem klick auf das bild, bzw den link ein punkt für denjenigen in der datenbank gutgeschrieben wird...

allerdings ist es leider so, dass, wenn man ganz oft nacheinander klickt, also bevor die seite sich neu geladen hat und man zwischen 2 anderen sachen auswählen kann, die stimme auch dementsprechend häufig gezählt wird...

gibt es eine möglichkeit dies zu unterbinden? irgendwie..mir föllt grad gaar nichts ein, also postet es, auch wenn es noch so offensichtlich ist^^ danke

Das wird hingegen schon komplizierter. Du könntest einen Hash einführen und diesen mit übergeben. Beim Aufruf solltest du dann prüfen ob der Hash bereits verwendet wurde. Ist ein - im Vergleich - recht simpler Botschutz.
 

DeletedUser92786

Gast
ok, da werd ich mich gleich mal einlesen.. ;)

ok, das problem - hab ich grad gesehen - ist wohl auch der, dass man ganz einfach mit rechtsklick auf das bild klicken kann, 'link adresse kopieren' und wumms, werden bestimme sachen einfach nach oben gepust..das ist aber nicht der sinn der sache..

liegt halt daran, dass ich mit get gearbeitet habe...
es gibt ja noch post, alles was google mir dazu aber anzeigt sind formulare bei denen daten mit POST übergeben werden, geht das auch ohne formular?
 

TimLim

Gast
liegt halt daran, dass ich mit get gearbeitet habe...
es gibt ja noch post, alles was google mir dazu aber anzeigt sind formulare bei denen daten mit POST übergeben werden, geht das auch ohne formular?

Meines Wissens nach nicht, stellt letztendlich aber wieder das selbe Problem dar. HTML kann man bearbeiten, so kann man dort immer die selbe ID eintragen. Oder halt die jeweilige Seite immer neu laden. So sind die Post Parameter mit drin. Ich glaube um einen Sicherheitscode wie einen Hash, den ich oben genannt hatte, kommst du nicht herum.
 
Oben