PHP - JS Funktion öffnen

d-braun

Erfahrenes Mitglied
Hi,

wie kann ich in PHP eine Javascript-Funktion aufrufen?
Ich will bevor der Upload einer File startet ein Popup aufrufen welches nach Beenden des Uploads wieder geschlossen wird.
Code:
<? php
...
echo '<script type="text/javascript">loading();</script>';
if(copy($_FILES["file"]["tmp_name"], $_FILES["file"]["name"])) {
echo '<script type="text/javascript">pop.close();</script>';
...
?>
Wieso funktioniert das nicht?

Code:
echo '<script type="text/javascript">alert("bla");</script>';
Das funktioniert ohne Probleme bloß die Funktionen werden nicht geladen.
Richtig im <HEAD> eingebunden ist alles.

MFG
d-braun
 
Du müsstest das Fenster vor dem Absenden des Forumlars (onsubmit-Ereignisattribut) öffnen und im formularverarbeitenden Skript wieder schließen.
 
Super Danke.
Das mit dem Öffnen klappt so.
Beim Schließen bekomme ich allerdings dann den Fehler dass die Header-Informationen schon gesendet wurden wenn ich nach dem Upload auf eine andere Page umleite.

Kann ich das irgendwie umgehen?

EDIT:

ok das hab ich jetzt gelöst.
Jedoch wird das Popup nicht geschlossen:

Code:
header ("Location: ../../index.php?sid=78e731027d8fd50ed642340b7c9a63b3&message=8");
echo '<script type="text/javascript">pop.close();</script>';
 
Zuletzt bearbeitet:
Also ich hab jetzt so ziemlich alles probiert was mir eingefallen ist und was ich so gefunden habe.

Das Problem ist dass ich mit PHP keine Javascript-Funktion aufrufen kann.
Auf der Page auf die Umgeleitet wird kann es auch nicht geschlossen werden da ein Popup nur mittels der Page die ihn geöffnet hat wieder geschlossen werden kann.
Sehe ich das richtig?

Wie bekomme ich dieses blöde Popup wieder zu?
 
Du könntest das Popup sich selbst Schliessen lassen:

Also du öffnest das Popup....
gleichzeitig erstellst du irgendeine Variable im Elternfenster.....
das Formular wird gesendet...

Im Popup selbst schaust du in Intervallen nach, ob:
1. Der opener noch existiert/offen ist
2. Die gesetzte Variable dort noch vorhanden ist.

...ist eines von beidem nicht der Fall, machst du das Popup zu.

Du könntest auch mit Frames arbeiten:
1 Frame von welchem aus das Popup geöffnet + geschlossen wird(muss nicht sichtbar sein)
1 Frame mit dem Formular... von wo aus die Funktionen zum Öffnen/Schliessen im anderen Frame aufgerufen werden.
 
Wie müsste das ganze dann aussehen?
Wie kann ich da eine Variable an das Popup übergeben und was noch viel wichtiger ist wie prüfe ich die Variable dann?

Sorry bin in JS nich so bewandert :-(


Javascript:
Code:
function loading() 
{ 
 var breite=400; 
 var hoehe=200; 
 var positionX=((screen.availWidth / 2) - breite / 2); 
 var positionY=((screen.availHeight / 2) - hoehe / 2); 
 var url='data/popup.php'; 
 pop=window.open('','loading ...','toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,fullscreen=0,width='+breite+',height='+hoehe+',top=0,left=0'); 
 pop.resizeTo(breite,hoehe); 
 pop.moveTo(positionX,positionY); 
 pop.location=url; 
 }
onerror = stopError;
function stopError()
{return true;}

EDIT:

Ich komm einfach auf keinen grünen Zweig :(

Ein weiterer Lösungsanatz wäre natürlich eine temporäre Datei zu erzeugen und diese nach erfolgreichem Upload zu löschen.
Dann müsste man nach erstellen des Popups alle X Sekunden prüfen ob diese Datei noch existiert.
Hab zu dem Thema aber leider nicht viel gefunden. Ist das mit Javascript überhaupt möglich?


Hier noch mal der ganze Quellcode:

Das Popup wird mittels des obigen Javascripts erzeugt und die Datei wird hochgeladen:
PHP:
echo '<form name="upload" onsubmit="loading();" action="data/upload/upload.php" method=post enctype="multipart/form-data">';

Hier das Upload-Script:
PHP:
<?php

  require('../dbconnect.php');

  $artist = $_POST["artist"];
  $title = $_POST["title"];
  $genre = $_POST["genre"];
  $file = $HTTP_POST_FILES["file"]["name"];

  if ((empty($artist)) OR (empty($title)) OR (empty($genre)) OR (empty($file)))
    {
      header ("Location: ../../index.php?sid=78e731027d8fd50ed642340b7c9a63b3&message=7");
    }
  else
    {


      // Variabeln festlegen
      $max_byte_size = 10485760;
      $allowed_types = "(mp3|wav|wmv|rar|zip)";

      // Wurde wirklich eine Datei hochgeladen?
      if(is_uploaded_file($_FILES["file"]["tmp_name"])) {

      // Gültige Endung? ($ = Am Ende des Dateinamens) (/i = Groß- Kleinschreibung nicht berücksichtigen)
      if(preg_match("/\." . $allowed_types . "$/i", $_FILES["file"]["name"])) {

      // Datei auch nicht zu groß
      if($_FILES["file"]["size"] <= $max_byte_size) {

      // Alles OK -> Datei kopieren
      if(copy($_FILES["file"]["tmp_name"], $_FILES["file"]["name"])) {

        header ("Location: ../../index.php?sid=78e731027d8fd50ed642340b7c9a63b3&message=2");
      }
      else {
        header ("Location: ../../index.php?sid=78e731027d8fd50ed642340b7c9a63b3&message=3");
      }
      }
      else {
        header ("Location: ../../index.php?sid=78e731027d8fd50ed642340b7c9a63b3&message=4");
      }
      }
      else {
        header ("Location: ../../index.php?sid=78e731027d8fd50ed642340b7c9a63b3&message=5");
      }
      }
      else {
        header ("Location: ../../index.php?sid=78e731027d8fd50ed642340b7c9a63b3&message=6");
      }


      $output = "SELECT g_id FROM genre WHERE g_genre = '$genre'";
      $get = mysql_query($output);

      while($array = mysql_fetch_array($get))
      {
        $gid = $array['g_id'];
      }

      $input = "INSERT INTO song (s_artist, s_title, g_id, s_file) VALUES ('$artist', '$title', '$gid', '$file')";
      $write = mysql_query($input);
      header ("Location: ../../index.php?sid=78e731027d8fd50ed642340b7c9a63b3&message=8");

    }

  require('../dbdisconnect.php');

?>
 
Zuletzt bearbeitet:
So nachdem ich mir Gumbos Signatur nochmal durchgelesen habe bin ich zum Entschluss gekommen dass ich das mit dem Popup mal lieber sein lasse.

Ich blende jetzt einfach ein <div> ein welches den Ladebalken enthält.
Ist eigentlich auch viel besser da viele Popupblocker unterwegs sind.

Sorry für die Belästigung :D
Würde mich aber trotzdem interresieren wie man sowas lösen könnte.

Hier noch der Code:

PHP:
...
  echo '<form name="upload" onsubmit="load();" action="data/upload/upload.php" method=post enctype="multipart/form-data">';
...
  echo '<div id="popup" style="display:none">';
  echo '<p align="center">Uploading song!<br>';
  echo 'stay tuned ...<br><br>';
  echo '<img src="data/load.gif"></p>';
  echo '</div>';
...

Code:
function load() {
    document.getElementById("popup").style.display = "inline";
    return true;
}

MFG
d-braun
 
Würde mich aber trotzdem interresieren wie man sowas lösen könnte.

...Hier mal nen Beispiel als einzelne Datei:
PHP:
<html>
<head>
<title>Test</title>
</head>
<body>
<?php
  
  if(isset($_GET['irgendwas']))//Das Popup
     {?>
        <script type="text/javascript">
        <!--
        function zu()
        {
          self.focus();
          if(!opener || opener.closed || typeof opener.variable=='undefined')
            {
              self.close();
            }
          
        }
        window.setInterval('zu()',1000);
        //-->
        </script>
        Ich bin das Popup. Ich gehe zu, wenn die Datei gesendet wurde.
      <?php
     }
  
  elseif(isset($_FILES['datei']))//Der Upload
     {?>
        
        Datei ist angekommen.
        <script type="text/javascript">
        <!--
        document.write('Das Popup sollte gleich zugehen');
        //-->
        </script>        
      
      <?php
     }
   
   else//Das Formular
     {?>
        <script type="text/javascript">
        <!--
        variable=true;
        //-->
        </script> 
        <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" onsubmit=window.open('<?php echo $_SERVER['PHP_SELF'];?>?irgendwas','popper','width=200,height=200')>
          <input name="datei" type="file">
          <input type="submit" >
        </form>

      
      <?php
     }
    
?>
</body>
</html>
 
Zurück