Wertübergabe (PHP) bei klick auf DIV-Element

RobertGree

Cadet 3rd Year
Registriert
Feb. 2007
Beiträge
40
Guten Abend!

Ich bin gerade dabei eine eine-Datei-Website (html, css & php) zu erstellen, in der alle Inhalte enthalten sind, php steuert nachher was ausgegeben wird.

Meine Frage jetzt: Wie kann ich PHP sagen, dass ich auf ein DIV-Element geklickt habe. Ich will keine Buttons verwenden sonder eine DIV-Box die zwischen einem '<a href=....' steht.
Meine Idee dazu sieht jetzt so aus:

Code:
<a href='index_PHP.php[U]?hmb=1[/U]'><div class='button'>".$hauptmenuepunkt1."</div></a>

.....

if ([U]$_GET['hmb']==1[/U])
{
  echo" <div class='contentbox'>Button1 wurde geklickt!</div>";
}

Allerdings erhalte ich dabei immer ein "Notice: Undefined index: hmb".

Vielleicht kann mir jemand helfen, vielen Dank schonmal!
Grüße, RGausBC
 
Das sollte so im Prinzip funktionieren, es sind aber einige semantische und syntaktische Fehler drin. Wenn du eine Navigation anlegen möchtest, nimm dazu besser eine Liste. Zudem solltest du ein Box-Element (div) nicht in Inline-Elemente (a) packen. Attribute von HTML-Elementen sollten von doppelten Gänsefüßchen umschlossen werden. Wenn du HTML-Quelltext direkt aus dem PHP-Script ausgeben möchtest (eigentlich auch keine so gute Idee ;)), dann pack die Strings nicht in doppelte Gänsefüßchen, sondern in einfache. Hat den netten Nebeneffekt, dass du die doppelten Gf nicht escapen musst und das Script etwas schneller ausgeführt werden kann, weil der String von PHP nicht auf eventuell vorhandene Variablen geprüft wird.

Kleine Exkursion
PHP:
// Reihenfolge der Beispiele von schlecht nach gut
$variable = 'Haus';
echo "Ich <a href=\"index.html\">wohne</a> in einem $variable.";
echo "Ich <a href=\"index.html\">wohne</a> in einem " . $variable . ".";
echo 'Ich <a href="index.html">wohne</a> in einem ' . $variable . '.';
// Ausgabe: Ich <a href="index.html">wohne</a> in einem Haus.

$variable = 'Haus';
echo 'Ich wohne in einem $variable.';
// Ausgabe: Ich <a href="index.html">wohne</a> in einem $variable.

Deine index_PHP.php sollte besser so aussehen:
PHP:
echo '<div class="button"><a href="index_PHP.php?hmb=1">' . $hauptmenuepunkt1 . '</a></div>';

.....

if (isset($_GET['hmb']) && $_GET['hmb'] == 1) {
  echo '<div class="contentbox">Button1 wurde geklickt!</div>';
}
Die globale Variable $_GET ist ein Array. Wenn du nun den Wert eines Indexes prüfen willst, der ggf. nicht vorhanden ist, gibt PHP dir vollkommen richtig einen Notice-Fehler aus. Das ist im Prinzip nicht schlimm - ist nur ein Hinweis - aber bevor der Wert des Indexes auf geprüft wird, sollte dessen Vorhandensein geprüft werden, was du mit der Funktion isset() erreichst.

Wenn du erreichen möchtest, dass die gesamte Fläche des divs mit der Klasse "button" als Schaltfläche dient, dann musst das darin liegende a-Element die gesamte Fläche ausfüllen:
HTML:
div.button a {
    display: block;
    height: inherit;
    width: inherit;
}
Die Angabe von height und width sollte aber eigentlich nicht nötig sein.
 
Vielen Dank für deine Antwort, hat mir sehr geholfen! Auf die Fehlerüberprüfung bzw. darauf, dass mein GET ja garnicht gesetzt sein könnte und der Fehler daher rührt, bin ich garnicht gekommen.
Habe es gleich verbessert und es funktioniert tatsächlich!

Vielen Dank auch für deine Mühe und Erklärung, allerdings habe ich dazu noch eine Frage: Die Attribute von HTML-Elemente (wenn sie in PHP per echo ausgegeben werden) habe ich doch in einfache Anführungszeichen gesetzt, oder? Anders ginge es ja auch gar nicht, das echo wäre damit ja abgeschlossen.

Grüße & gute Nacht,
RGausBC
 
Hallo,

Zum Thema Anführungszeichen:

Wenn du bei echo die doppelten Anführungszeichen verwendest (""), funktioniert es so:

echo "<a href=\"link\">test</a>";

mfg
mitos

Edit: Es funktioniert allerdings auch so [ echo "<a href='link'>test</a>"; ] und so [ echo '<a href="link">test</a>'; ] :)
 
Zuletzt bearbeitet:
@mitos: Dass es so funktioniert ist richtig, ist aber falscher Code. Das bügelt dann die Browser-interne Fehlerkorrektur glatt. Validieren lässt sich das aber nicht. Darum sollten Strings auch von einfachen Strings umschlossen werden, ist wie gesagt sowieso effizienter, da der String nicht geparst wird.

PHP:
echo 'Ich bin ein String und mir geht es gut';
 
dabei ist aber zu beachten dass das argument "ists effizienter" bei der Peron auf die das zutrifft am allerwenigsten zutrifft. Das Argument der effizient spielt bei ihm einfach garkeine Rolle. Lieder ist es das überzeugendste argument.

Das eigentlich arguemtn, das VIEL VIEL wichtiger ist, ist dass der code viel schöner und strukturierter dadruch wird, aber das ist leider ein Grund, den viele Neulinge nicht akzeptieren wollen, obwohl man ihnen dadurch die Basis für für umfangreichere und komplexere strukturen gibt.

Ich wollte das einfach nur einmal gesagt haben ;)
vielleicht hilfts ja ;)
 
Zurück
Oben