Chris: $_GET-Problemchen

Hallo zusammen,
mein Problemchen ist folgendes:

Ich lese mit PHP 700 Einträge aus meiner MYSQL-Datenbank in eine Tabelle aus. Jeder Eintrag hat einen Titel mit diesem a-Element: <a href="javascript:void(0)?movid=<?php echo $row['Nr']; ?>" ... </a>
Damit möchte ich bezwecken, dass der Browser ein festgelegtes Popup (ähnlich einer "Lightbox") öffnet und zugleich die "Nr" des Eintrags dem $_GET['movid'] zugeweist.

Im nächsten Moment öffnet sich das Popup mit einem iframe: <iframe src="show.php?id=<? echo $_GET['movid'] ?>" ... />

Wieso allerdings gibt er im iframe die "Nr" nicht aus? Wenn ich einen Eintrag anklicke, öffnet er im Popup-iframe den Link http://www.meine-website.de/show.php?id= ohne die zugewiesene Zahl.

Wo ist mein Denkfehler? Hab ich das mit $_GET falsch verstanden?

Viele Grüße
Chris

  1. Moin Moin!

    <a href="javascript:void(0)?movid=<?php echo $row['Nr']; ?>" ... </a>

    Das ist schonmal reichlich kaputt. Das javascript:-Pseudoprotokoll hat in Links nichts verloren. Das Konstrukt dahinter ist kein gültiges Javascript. Und schon gar nicht gibt es irgendwelche Parameter an den Server weiter, weil der Server hier gar nicht mitspielt.

    Im nächsten Moment öffnet sich das Popup

    Wie das? void(0) öffnet kein Popup. Zeig Deinen Code, sowohl PHP als auch das, was im Browser ankommt.

    Verzichte (erst einmal oder besser auf Dauer) auf das ganze Javascript- und Popup-Gerümpel und baue erst einmal einen gültigen und funktionierenden Link auf show.php mit der passenden Film-Nummer zusammen.

    Dann kannst Du mit Javascript den Film-Links einen onclick-Handler verpassen, der das Linkziel (this.href) in einem Popup öffnet und die normale Behandlung des Links unterdrückt (return false). Damit hast Du einen 100% funktionierenden Fallback für Browser ohne aktiviertes Javascript.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Hey Alexander,
      erstmal danke für deine Antwort.

      Hinter dem Link der Einträge steckt schon noch ein wenig was - hätte ich gleich komplett posten sollen:

      <a href="javascript:void(0)?movid=<?php echo $row['Nr']; ?>" onclick="document.getElementById('light').style.display='block';document.getElementById('fade').style.display='block'"><?php echo $row['Titel']; ?></a>

      Hmm... also theoretisch könnte ich javascript:void(0) entfernen, dann würde aber ein normaler Link daraus entstehen - z.B. show.php?movid=1 - und den würde der Browser im Fenster und nicht im Popup öffnen. Wie kann ich den Link schreiben, so dass der Browser mir die movid "merkt" und ein Popup mit der richtigen Seite öffnet? Nur "#" reicht sicher nicht.

      Hier noch das eigentliche Popup (div):

      <div align="right" id="light" class="white_content">  
      <a href="#" onclick="document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'">  
      <img src="images/schliessen.gif" border="0" /></a><br>  
      				<iframe name="movie-info" width="100%" height="100%" src="show.php?id=<? echo $_GET['movid'] ?>" frameborder="0">  
      					Leider unterstützt Ihr Browser keine iFrames.  
      				</iframe>  
      </div>  
      <div id="fade" class="black_overlay"></div>
      

      Falls beim Schreiben verloren gegangen ist, was ich überhaupt damit anrichten möchte:
      Ich will auf meine Filmedatenbankeinträge klicken können und je nachdem welcher Film es ist, soll das Popup aufblinken mit dem passenden iframe (Filmenotizen).

  2. Hello,

    Wieso allerdings gibt er im iframe die "Nr" nicht aus?

    Zeichne Dir ein Zeitdiagramm, Client/Server, wann welche Funktion wo aufgerufen wird und welche Daten ihr in diesem Augenblick zur Verfügung stehen. Sind es dann PHP-Variablen oder sind es JavaScript-Variablen?

    Und schau Dir den Quelltext an, der im Browser ankommt.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Hallo Chris,

    <a href="javascript:void(0)?movid=<?php echo $row['Nr']; ?>" ... </a>

    das ist keine URL. Somit wird auch keine $_GET-Variable erzeugt. Dies sollte eher tun, was Du willst:

    <a href="beispiel.php?movid=<?php echo $row['Nr']; ?>" onclick="window.open(this.href);return(false)"> ... </a>

    Gruß aus Berlin!
    eddi

    --
    Sich einem Ziel zu verschreiben, sollte ein Prüfen der damit verbundenen Intension und ein Überprüfen der einzusetzenden Mittel vorangehen, sonst türmen sich immer wieder Wolkenschlösser auf, von denen aus zwar herabgesehen wird. Die aber mit einem Blick auf die Basis zerfallen.
    1. Hallo Eddi,
      danke für deine Antwort. Ich weiß, auf was Sie hinaus möchten. So hatte ich es anfangs. Vielleicht habe ich mich auch nur ein bisschen falsch ausgedrückt. Das sog. Wort "Popup", das ich verwendet habe, ist vllt nicht ganz richtig, ich meinte einen div-container.

      Ich will quasi in der Tabelle einen Eintrag anklicken und den Link in einem div-container wiedergeben (also natürlich in einem iframe, der sich in einem aufpopenden div-container befindet ;-).

      Der direkte Link funktioniert wegen dieser javascript-Sache nicht:
      <a href="show.php?id=<?php echo $row['Nr']; ?>" onclick="document.getElementById('light').style.display='block';document.getElementById('fade').style.display='block'"><?php echo $row['Titel']; ?></a>
      Er ruft zwar kurz den div-container auf, aber springt dann sofort auf die eigentlichen Link über (Der Browser öffnet s.z. kurz das div, anschließend aber sofort den Link im Fenster).

      Div-container:

      <div align="right" id="light" class="white_content">  
      <a href="#" onclick="document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'">  
      <img src="images/schliessen.gif" border="0" /></a><br>  
      				<iframe name="movie-info" width="100%" height="100%" src="show.php?id=<? echo $_GET['movid'] ?>" marginheight="0" marginwidth="0" frameborder="0">  
      					Leider unterstützt Ihr Browser keine iFrames.  
      				</iframe>  
      		</div>  
      <div id="fade" class="black_overlay"></div>
      
      1. Re:

        danke für deine Antwort. Ich weiß, auf was Sie hinaus möchten.

        Zum Siezen besteht absolut kein Grund, Ihrzen vielleicht (Scherz!). Nein, ein Du reicht absolut aus, auch wenn ich doppelt so alt bin, wie vieles, was ich hier von mir gebe, den Eindruck erweckt mag. ;)

        <a href="show.php?id=<?php echo $row['Nr']; ?>" onclick="document.getElementById('light').style.display='block';document.getElementById('fade').style.display='block'"><?php echo $row['Titel']; ?></a>
        Er ruft zwar kurz den div-container auf, aber springt dann sofort auf die eigentlichen Link über (Der Browser öffnet s.z. kurz das div, anschließend aber sofort den Link im Fenster).

        Da kommen wir der Sache doch schon näher. Sieh Dir mal das Attribut target an. In Dokumententypen, in denen dieses Attribut nicht erlaubt ist, kann man diese durch Javascript dennoch erreichen:

        <a href="beispiel.php?movid=<?php echo $row['Nr']; ?>" onclick="window.open(this.href,"movie-info");return(false)"><?php echo $row['Titel']; ?>~~~html </a>
        <!-- weiteres -->
        <iframe name="movie-info" src="about:blank"></iframe>

          
        [window.open()](http://de.selfhtml.org/javascript/objekte/window.htm#open)  
          
          
        Gruß aus Berlin!  
        eddi
        
        -- 
        Sich einem Ziel zu verschreiben, sollte ein Prüfen der damit verbundenen Intension und ein Überprüfen der einzusetzenden Mittel vorangehen, sonst türmen sich immer wieder Wolkenschlösser auf, von denen aus zwar herabgesehen wird. Die aber mit einem Blick auf die Basis zerfallen.
        
        1. Hallo Eddi,
          danke für deine Hilfe, aber leider geht es mit dem window.open() leider etwas in die falsche Richtung (da damit ein neues Fenster geöffnet wird). Ich will nicht ein neues Fenster, sondern ein DIV soll sich "öffnen" und der iframe, der sich darin befindet, soll die gewünschte Site öffnen.

          Deine Anregung hat mich dennoch auf eine IDee gebracht und diese funktioniert auch:

          Tabellen-Titel:
          <a href="show.php?id=<?php echo $row['Nr']; ?>" target="movie-info" onclick="document.getElementById('light').style.display='block';document.getElementById('fade').style.display='block'"><?php echo $row['Titel']; ?></a>

          Div, dass sich öffnen wird, nachdem ein Titel angeklickt wird:

          <div align="right" id="light" class="white_content"><a href="#" onclick="document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'"></a><br>  
          				<iframe name="movie-info" width="100%" height="100%" src="show.php?id=<? echo $_GET['movid'] ?>" marginheight="0" marginwidth="0" frameborder="0">  
          					Leider unterstützt Ihr Browser keine iFrames.  
          				</iframe>  
          		</div>  
          <div id="fade" class="black_overlay"></div>
          

          Im Link habe ich nur das Target zum iframe vergessen :-/

          Gruß
          Chris

          1. Div, dass sich öffnen wird, nachdem ein Titel angeklickt wird:

            <div align="right" id="light" class="white_content"><a href="#" onclick="document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'"></a><br>

              		<iframe name="movie-info" width="100%" height="100%" src="show.php?id=<? echo $_GET['movid'] ?>" marginheight="0" marginwidth="0" frameborder="0">  
              			Leider unterstützt Ihr Browser keine iFrames.  
              		</iframe>  
              </div>  
            

            <div id="fade" class="black_overlay"></div>

              
            Sorry für Doppelpost.  
              
            Ich hab mein Problem zwar gelöst, allerdings, für die Nachwelt, habe ich mich obig 2x verschrieben - hier das Richtige:  
              
            ~~~html
            <div align="right" id="light" class="white_content"><a href="javascript:void(0)" onclick="document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'">close</a><br>  
             				<iframe name="movie-info" width="100%" height="100%" src="show.php?id=<? echo $_GET['movid'] ?>" marginheight="0" marginwidth="0" frameborder="0">  
             					Leider unterstützt Ihr Browser keine iFrames.  
             				</iframe>  
            		</div>  
            <div id="fade" class="black_overlay"></div>
            
            • Das Wort "close" fehlte, ohne es gibt das a-Element keinen Sinn.
            • Im a-Element soll href "javascript:void(0)" sein (Dummy), sonst ladet die Seite neu
            1. Re:

              • Im a-Element soll href "javascript:void(0)" sein (Dummy), sonst ladet die Seite neu

              Allgemein sollte man <element onclick="mach_was(); return(false);"/> notieren, wobei return(false); dafür sorgt, der z. B. angeklickte Verweise nicht besucht werden. Es ist richtig, viele Erklärungen zu Javasript von ach so großen Experten enthalten diesen Pseudoprotokollsschwachsinn, was aber kein Grund ist, vernünftige Alternativen nicht zu nutzen.

              Gruß aus Berlin!
              eddi

              --
              Könnte bitte jemand mal langsam dafür sorgen, dass da draußen nicht dauernd die Filmrolle "Planet der Affen" abgedudelt wird? Danke!