Zur Navigation

Datei wird sofort hochgeladen, obwohl Formular noch nicht abgesendet ist

1 Marko

Hallo
Danke für diese Antwort, ich werde das einmal testen.

Eine weitere Frage:

Ich habe ein upload "upload.php"

<?php
echo "<pre>";

echo "</pre>";
if ( $_FILES['uploaddatei']['name']  <> "" )
{
    	
    move_uploaded_file (
         $_FILES['uploaddatei']['tmp_name'] ,
         'uploaddateien/'. $_FILES['uploaddatei']['name'] );
 
    echo "<center>Hochladen war erfolgreich.</center>";
}
?>

diesen habe ich includiert

require_once ('func.inc.php');
require_once ('upload.php');

Die Datei wird aber sofort hochgeladen, obwohl das Formular noch nicht abgesendet ist? Ich habe die upload.php ja hinter die 1. Datei gelegt.

Es erscheint die Meldung "Hochladen war erfolgreich" und das Formular öffnet darunter, stimmt etwas nicht bei den Eingaben kommen auch die Fehlermeldungen "email falsch usw." Das Formular geht also
Ich finde dann die Datei auf dem Server in "uploaddateien".

Ich hoffe mein Vorhaben ist verständlich.

Gruß
Marko

09.03.2017 14:38 | geändert: 09.03.2017 14:40

2 Jörg Kruse

Hast du vielleicht ein JavaScript integriert, das nach Auswahl der Datei das Formular absendet?

09.03.2017 15:27

3 Marko

Hallo

Danke für das verschieben.

Mein form:
<div style="text-align:center;">

<form name="upload" enctype="multipart/form-data" 
action="http://www.usw.....upload2.php" method="post">

Ihr Name*:
<p></p>
<input name="name" size="30">
<p></p>

Ihre Profilnummer*:
<p></p>
<input name="betreff" size="30">
<p></p>

Ihre E-mail Adresse*:
<p></p>
<input name="email" size="30">
<p></p>
<input type="file" name="uploaddatei">
<p></p>

<input class="buttonsend" type="submit" name="submit" value="Zum Datei hochladen">
</form>
</div>
<p></p>

<img class="displayed" src="http://www..ein kleines Bild..Icon.png" align="center" width="100" height="100">

</html>

Der upload funktioniert einwandfrei, nur das 2. form.php wird nicht beachtet (upload nur für reg. Nutzer.)

Ich weiß jetzt nicht genau was Du meinst?

Gruß
Marko

09.03.2017 19:05

4 Jörg Kruse

Was ist denn das "2. form.php"?

Der upload funktioniert einwandfrei

Ja, aber im ersten Posting hast du geschrieben, dass der Upload funktioniert, obwohl das Formular nicht abgesendet wurde. Wenn du nicht selbst auf den Button "Zum Datei hochladen" geklickt hast, kann eigentlich nur ein JavaScript den Upload in Gang setzen. Vielleicht postest du zum besseren Verständnis mal den gesamten Code (also inklusive Headbereich) aller relevanten Seiten oder verlinkst alternativ eine Demoseite, an der man das Problem nachvollziehen kann

09.03.2017 19:35 | geändert: 09.03.2017 19:42

5 Marko

Hallo

Ja schlecht erklärt, ich habe natürlich auf "absenden" geklickt.

Somit startet der Upload, (welcher einwandfrei geht) dieses sollte aber die

require_once ('func.inc.php'); beachten (Kontrolle email und betreff) wie im normalen Kontaktformular.

Es lädt aber sofort auf den Server, dass Formular mit den übergebenen Daten öffnet und kann weiterhin abgesendet werden.

<?php

date_default_timezone_set('Europe/Berlin');

$ihre_email 				= "email@email.email";
$betreff_der_nachrichten 	= "Sie haben ein Bild zur Kontrolle erhalten.";

require_once ('func.inc.php');
require_once ('upload.php');



$meldungen = "";

array_escape_and_strip($_POST);
array_unescape($_POST);

if(isset($_POST['action'])){

	switch($_POST['action']){

		case 'submit':
			
			if(empty($_POST['name'])){
				$meldungen .= "Bitte geben Sie Ihren Namen an.<br>";
				$error = 1;
			}
			
			if(empty($_POST['betreff'])){
				$meldungen .= "Bitte geben Sie Ihre Profilnummer (Beispiel Profil-1 = 1) ein.<br>";
				$error = 1;
			}
			
			if(empty($_POST['email'])){
				$meldungen .= "Bitte geben Sie Ihre E-mail Adresse an.<br>";
				$error = 1;
			}
			
			if(empty($_POST['uploadfile'])){
				$meldungen .= "Bitte geben Sie eine Bilddatei an.<br>";
				$error = 1;
			}
			
		   elseif(! check_profile_email($_POST['betreff'], $_POST['email'])) {
            $meldungen .= "Die Emailadresse ist unbekannt oder die          Profilnummer ist falsch. Bilddatei kontrollieren!<br>";
            $error = 1;
			}
			
			
			

			if($error) { break; }
			

			$message = "Sie haben ein Bild zur Kontrolle bekommen.:\n\n".
						"Kontaktdaten:\n".
						"Name: $_POST[name]\n".
						"Profilnummer: $_POST[betreff]\n".												
						
						"Uhrzeit: ".date('d.m.Y - H:i:s');

			$x = @mail($ihre_email,addslashes($betreff_der_nachrichten),$message,"from: $ihre_email");
			
			

			if($x){
				$meldungen2 .= "Hochladen erfolgreich, das Bild wird nach Kontrolle im Profil angezeigt!";
				$_POST = array();
				break;
			}

			$meldungen .= "Aufgrund eines technischen Fehlers konnten wir Ihre Nachricht nicht empfangen.<br>".
						  "Bitte setzen Sie sich anderweitig mit uns in Verbindung.<br>Vielen Dank!";
			break;



	}


}
// ----- ENDE PHP Sourcecode ----- //
?>

10.03.2017 14:21 | geändert: 10.03.2017 14:24

6 Jörg Kruse

Was ist das für eine Datei - die upload2.php, an welche das Formular abgesendet wird?

if(isset($_POST['action'])){

	switch($_POST['action']){

		case 'submit':

Diese Bedingung wird nicht erfüllt, es wird mit dem Formular oben kein Parameter action übertragen. Du müsstest da noch ein entsprechendes hidden input einbauen:

<input type="hidden" name="action" value="submit">
<input class="buttonsend" type="submit" name="submit" value="Zum Datei hochladen">

10.03.2017 15:18

7 Marko

Hallo

Das ist die selbe Datei (email.php) nur mit anderem Namen von der Post Email-Betreff Kontrolle.

wo ich schon die "require_once ('func.inc.php');" drin habe

Nur die Namen sind etwas abgeändert.

Habe die input hidden Zeile in die upload.html zugefügt.

Jetzt zeigt die upload.2php " hochladen war erfolgreich" gleich ganz oben erste Meldung, darunter das Formular Datei ist auch auf dem Server angekommen.

Der Upload wird sofort ausgeführt, ohne die "require_once ('func.inc.php');" mit dem Formular zusammen zu beachten (Ich habe wohl einen großen Denkfehler....)

Aber im Formular die Fehlermeldung "Bitte wählen sie eine Bilddatei" Bei Datei steht keine gewählt. Wenn ich eine wähle kommt nach absenden
"Hochladen war erfolgreich usw." Meldung aus dem Formular upload.2php

upload2.php
<?php

date_default_timezone_set('Europe/Berlin');



$ihre_email 				= "email@email.email";
$betreff_der_nachrichten 	= "Sie haben ein Bild zur Kontrolle erhalten.";


require_once ('func.inc.php');
require_once ('upload.php');



$meldungen = "";

array_escape_and_strip($_POST);
array_unescape($_POST);

if(isset($_POST['action'])){

	switch($_POST['action']){

		case 'submit':
			
			if(empty($_POST['name'])){
				$meldungen .= "Bitte geben Sie Ihren Namen an.<br>";
				$error = 1;
			}
			
			if(empty($_POST['betreff'])){
				$meldungen .= "Bitte geben Sie Ihre Profilnummer (Beispiel Profil-1 = 1) ein.<br>";
				$error = 1;
			}
			
			if(empty($_POST['email'])){
				$meldungen .= "Bitte geben Sie Ihre E-mail Adresse an.<br>";
				$error = 1;
			}
			
			if(empty($_POST['uploadfile'])){
				$meldungen .= "Bitte geben Sie eine Bilddatei an.<br>";
				$error = 1;
			}
			
		   elseif(! check_profile_email($_POST['betreff'], $_POST['email'])) {
            $meldungen .= "Die Emailadresse ist unbekannt oder die Profilnummer ist falsch.
                           Bilddatei kontrollieren!<br>";
            $error = 1;
			}
			
			
			

			if($error) { break; }
			

			$message = "Sie haben ein Bild zur Kontrolle bekommen.:\n\n".
						"Kontaktdaten:\n".
						"Name: $_POST[name]\n".
						"Profilnummer: $_POST[betreff]\n".												
						
						"Uhrzeit: ".date('d.m.Y - H:i:s');

			$x = @mail($ihre_email,addslashes($betreff_der_nachrichten),$message,"from: $ihre_email");
			
			

			if($x){
				$meldungen2 .= "Hochladen erfolgreich, das Bild wird nach Kontrolle  angezeigt!";
				$_POST = array();
				break;
			}

			$meldungen .= "Aufgrund eines technischen Fehlers konnten wir Ihre Nachricht nicht empfangen.<br>".
						  "Bitte setzen Sie sich anderweitig mit uns in Verbindung.<br>Vielen Dank!";
			break;



	}


}

?>

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="utf-8" />
  <link rel="stylesheet" href="../../../styles.css">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
<title>Bild hochladen</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 14px;
	color: #000000;
}
body {
	background-color: #F5BCA9;
}
.Stil1 {
	color: #FF0000;
	font-weight: bold;
	font-size: 17px;
}
.Stil2 {
	color: #088A29;
	font-weight: bold;
	font-size: 17px;
	text-align: center;
   }      
-->
a:link, a:visited {
    background-color: #610B38;
    color: white;
    padding: 3px 11px;
    text-align: center;
    font-size: 14px;
    font-weight: bold;
    text-decoration: none;
    display: inline-block;
}

.buttonsend {
    background-color: #610B38;
    color: white;
    padding: 4px 12px;
    text-align: center;
    font-size: 16px;
    font-weight: bold;
    text-decoration: none;
    display: inline-block;
}

h2 {
    color: #000000;
    font-family: verdana;
    font-size: 150%;
    text-align: center;
    }

h3 {
    color: #000000;
    font-family: verdana;
    font-size: 120%;
    text-align: center;
    }    

</style>

</head>

<h3>Sie übermitteln ein Bild?</h3>

<h3>Wählen Sie Ihre Bilddatei?</h3>

<body>
<div style="text-align: center">
<div align="center">

<p>
<tr>
    <td colspan="3"><span class="Stil1"><?=$meldungen?></span></td>
</tr>
</p>

<p>
<tr>
    <td colspan="3"><span class="Stil2"><?=$meldungen2?></span></td>
</tr>
</p>

<form name="form1" method="post" action="<?=$_SERVER['PHP_SELF']?>">
  
  <p align=center>  </p>
      <p align=center style="font-size:12pt;"> Ihr Name:* </centre>
      </p>
      <input name="name" type="text" size=30" id="name" value="<?=$_POST['name']?>">
  </tr>
     
  <tr><td valign="middle" align="center">
  <p align=center>  </p>
      <p align=center style="font-size:12pt;"> Ihre Profilnummer?:* </centre>
      </p>
      <input name="betreff" type="text" size=30" id="betreff" value="<?=$_POST['betreff']?>">
  </tr>
  <p></p>
     
  <tr><td valign="middle" align="center">
  <p align=center>  </p>
      <p align=center style="font-size:12pt;"> Ihre E-Mail Adresse:* </centre>
      </p>
      <input name="email" type="text" size=30" id="email" value="<?=$_POST['email']?>">
  </tr>
  <p></p>
  
  <tr><td valign="middle" align="center">
  <p align=center>  </p>
      <p align=center style="font-size:12pt;"> Datei* (jpg,png,...) </centre>
      </p>
      <input type="file" name="uploadfile">    
    </tr>
  
  <p align=center>  </p>
      <p align=center style="font-size:12pt;"> Pflichtfelder* </centre>
      </p>
      
      <input class="buttonsend" type="submit" name="submit" value="Bild hochladen">
      <input name="action" type="hidden" id="action" value="submit"></td>

</form>
</div>

<img class="displayed" src="bilder/Icon.png" align="center" width="100" height="100" />


</body>
</html>

11.03.2017 13:33 | geändert: 11.03.2017 13:47

8 Jörg Kruse

Der Upload wird sofort ausgeführt, ohne die "require_once ('func.inc.php');" mit dem Formular zusammen zu beachten (Ich habe wohl einen großen Denkfehler....)

Ja, ich weiß nicht, was in der func.inc.php drinsteht? dem Namen nach sollte die Datei nur Funktionsdefinitionen enthalten. Da gibt es erst einmal gar nichts zu beachten. Du kannst allenfalls dort definierte Funktionen aufrufen, und die sollten dann natürlich ausgeführt werden.

Wenn du auf den Button drückst, wird der Upload in Gang gesetzt - auch wenn andere Felder noch gar nicht oder falsch ausgefüllt worden sind. Wenn du den Upload in so einem Fall verhindern möchtest, kannst du dies nur mit JavaScript (oder in begrenztem Umfang mit HTML5). Die PHP-Überprüfung setzt erst auf der folgenden Seite ein, wenn der Upload bereits erfolgt ist.

Das HTML enthält übrigens einige gröbere Fehler, z.B. <h3> außerhalb von <body> oder <tr> und <td> außerhalb von <table>. Auch kaputtes HTML kann Browser mal zum Stolpern bringen.

11.03.2017 15:27

9 Marko

Hallo

Danke für Deiene Ausführungen, ich habe es aufgelöst.

Die Antwort lag so nahe. Dein Tip mit dem " <input .... "
hat mich zur Lösung geführt.

Beste Grüße
Marko

13.03.2017 08:51

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]