Antworten auf deine Fragen:
Neues Thema erstellen

Checkbox mit PHP auswerten + Datei aus Ordner löschen

d3mueller

PC-Freak :D

EDIT: sry, der Titel ist noch falsch! nicht Chekbox sondern Selection.
tut mir Leid. Kann es nicht ändern.



Hi, also ich möchte, das man mit einem kleinen Formular, Dateien(Bilder) aus einem Ordner löschen kann.
Und zwar so:
(Diesen Code verwende ich auch um die Bilder auszugeben. Hier habe ich nur die ausgabe( also das echo ""; ) geändert.)
Code:
<?php
$verzeichnis = "fotos/mannschaftsfotos/";

$ordner = openDir($verzeichnis);

$bilder = array();
while ($file = readDir($ordner)) {
 	if ($file != "." && $file != ".." && !is_dir($file)) {
  		if (strstr($file, ".png") || strstr($file, ".gif") ||  strstr($file, ".jpg") ||  strstr($file, ".jpeg")) {
   			$info = getImageSize($verzeichnis . $file);
   			array_push($bilder, array(fileMtime($verzeichnis . $file) ,
    		$verzeichnis . $file , $info[0] , $info[1]));
  		}
 	}
}
closeDir($ordner);

rsort($bilder);


  echo "<form action='bilder-loeschen.php' method='POST'>";
  echo "<select name='bildnamen' size='3'>";

foreach ($bilder as $zaehlen => $element) {
 if ($zaehlen  <= 20) { 
  echo "<option value='Name des Bildes'>Name des Bildes</option>";
 }
}
  echo "<input type='submit' value='Absenden'>";
  echo "</form>";
?>
Also dort sollen halt soviele <option> generiert werden, wie Bilder im Ordner sind.
Bloss brauch ich bei jedem ja ein value, das gesendet werden kann. Es muss halt der komplette dateiname sein, inklusive Endung. Geht das irgendwie so?
Code:
    $name = $_FILES['file']['name'];  
    $type = $_FILES['file']['type'];
Geht das? Und wie könnt ich das da oben einbauen?

Mal angenommen, das funktioniert dann. Dann kann man ja via PHP das ausgeben:


Code:
<?php
$wahl = $_POST['auswahl']; 
echo $wahl;
?>


Jetzt kann man ja per PHP, eine Datei löschen:

Code:
<?php
 unlink("test.txt");
?>


Man könnte dann doch einfach als Dateinamen eine Variable $wahl nehmen:


Code:
<?php
$wahl = $_POST['auswahl']; 
unlink("fotos/mannschaftsfotos/" . $wahl);  
?>
Weil, mal angenommen, man wählt die Option "Urlaubfoto1.png" mit dem value="Urlaubfoto1.png", dann würde er ja den Pfad "fotos/mannschaftsfotos/Urlaubfoto1.png" haben und die Datei löschen.


Oder?
Denk ich hier richtig, oder hab ich was komplett falsch gemacht^^


Wenn es so geht, könnte man das ganze ja noch irgendwie erweitern:
Code:
<?php
$wahl = $_POST['auswahl']; 
unlink("fotos/mannschaftsfotos/" . $wahl);  


$pfad = "fotos/mannschaftsfotos/" . $wahl;
if (file_exists($pfad)) {
   echo "Da ist was schiefgelaufen";
} else {
   echo "Erfolgreich gelöscht";
}
?>
Geht das so?

Danke schon mal für eure Hilfe. Bin halt noch ein Anfänger in PHP, aber jeder fängt mal klein an ;)

Viele Grüße,
Dennis
 

Duddle

Posting-Frequenz: 14µHz

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Zu deinem ersten Punkt:
Ich vermute, du hast die while-Schleife irgendwoher kopiert. Das ist kein Problem, falls du verstehst was dort passiert.
Die Elemente von $bilder sind wieder Arrays, von denen das erste Element die Modifikationszeit, das zweite der vollständige Pfad, die letzten beiden Höhe und Breite sind. Du könntest also problemlos jeweils das zweite Element vom derzeitigen $element in der Formular-Schleife als value ausgeben lassen.

$_FILES ist etwas ganz anderes und überhaupt nicht nützlich in diesem Fall.

Zu deinem zweiten Punkt:
Ja, du denkst da richtig. Du könntest den Dateinamen des Parameters für unlink mit $wahl reinsetzen. Du kannst danach auch separat prüfen, ob diese Datei noch existiert.

Aber: erstens solltest du bei Funktionen, die schädlich sein könnten besondere Vorsicht walten lassen. Setze ich als Angreifer z.B. das $_POST['auswahl'] auf einen Wert wie "../index.php" (den POST-Wert zu ändern ist kein Problem) steht im unlink() plötzlich
PHP:
unlink("fotos/mannschaftsfotos/" . "../index.php");
was dann als relativer Pfad aufgelöst wird zu
PHP:
unlink("fotos/index.php");
und schon ist deine index.php weg (falls diese Datei existiert). Deshalb solltest du niemals Nutzereingaben blind vertrauen. Prüfe alle vom Nutzer beeinflussbaren Daten. In diesem konkreten Fall könntest du bspw. vorher testen, ob dieser Dateiname in $bilder vorhanden ist.

Zweitens brauchst du nach unlink() nicht gesondert testen, ob es erfolgreich war. Jede Funktion hat einen Rückgabewert, der im Handbuch dokumentiert ist. Für unlink() ist das
Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Du kannst also schon direkt am Rückgabewert erkennen, ob die Funktion erfolgreich war.
PHP:
<?php
$wahl = $_POST['auswahl']; 
$unlinkErfolgreich = unlink("fotos/mannschaftsfotos/" . $wahl);  

if ($unlinkErfolgreich) {
   echo "Erfolgreich gelöscht";
} else {
   echo "Da ist was schiefgelaufen";
}
?>
oder kürzer
PHP:
<?php
$wahl = $_POST['auswahl']; 

if (unlink("fotos/mannschaftsfotos/" . $wahl)) {
   echo "Erfolgreich gelöscht";
} else {
   echo "Da ist was schiefgelaufen";
}
?>


Duddle
 

d3mueller

PC-Freak :D

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Die Elemente von $bilder sind wieder Arrays, von denen das erste Element die Modifikationszeit, das zweite der vollständige Pfad, die letzten beiden Höhe und Breite sind. Du könntest also problemlos jeweils das zweite Element vom derzeitigen $element in der Formular-Schleife als value ausgeben lassen.
Ui, klingt kompliziert.
Das blöde ist halt, dass ich nicht sehe, wie $element definiert wird. Es taucht hier einfach auf
PHP:
foreach ($bilder as $zaehlen => $element) {
Und diese Zeile ist glaub ich mein Hauptproblem. Da verstehe ich nicht, was man jetzt mit dem $element anfangen kann, und wie man den Dateinamen einfügt.






Aber: erstens solltest du bei Funktionen, die schädlich sein könnten besondere Vorsicht walten lassen
Ja, eigentlich hast du recht. Aber dazu muss man sagen, ich habe vornedran ja noch ein kleines Login script, also man muss sich erst einloggen um da was machen zu können. Klar, das ist nicht wirklich sicher, und ich glaub deine Methode wär hier besser. Aber auch hier hab ich leider keine Ahnung, wie.
Wie man direkt prüft ob die Datei in $bilder existiert weiß ich nicht. aber könnte man nicht so was machen?

PHP:
<?php
$wahl = $_POST['auswahl']; 

if(file_exists("fotos/mannschaftsfotos/" . $wahl)) {

 if (unlink("fotos/mannschaftsfotos/" . $wahl)) {
    echo "Erfolgreich gelöscht";
 } else {
   echo "Da ist was schiefgelaufen";
   }

} else {
   echo "Diese Datei existiert nicht.";
}
?>
EDIT: Ups. Okay, mein Fehler. Sehs gerade^^ man kann das genauso manipulieren. Aber anders wüsste ich es jetzt nicht

Zweitens brauchst du nach unlink() nicht gesondert testen, ob es erfolgreich war. Jede Funktion hat einen Rückgabewert, der im Handbuch dokumentiert ist. Für unlink() ist das
Okay, das wusste ich nicht :D Praktisch.


LG
Dennis
 
Zuletzt bearbeitet:

d3mueller

PC-Freak :D

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Hi okay.

Würde das dann irgendwie so gehen?
value='$element[1]'
? so hab ich das jetzt verstanden.

Lg
Dennis
 

Duddle

Posting-Frequenz: 14µHz

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Nein, das ist nicht korrekt. Es ist auch ein recht erstaunlicher Ansatz, finde ich doch keinerlei vergleichbares Beispiel im verlinkten Tutorial.

Statt zu raten und zu fragen solltest du entweder a) eines der zahlreichen Grundlagentutorials lesen oder b) deine Ideen Schritt für Schritt ausprobieren, sie ausführen lassen und dir die Fehlermeldungen anschauen oder am besten c) eine Kombination aus a) und b) fahren.

Falls du konkrete Fragen zu Algorithmen oder Funktionen hast, werden dir diese hier beantwortet. Für Syntax-Fragen und ähnliche absolute Grundlagen sind Tutorials tausendmal besser geeignet.


Duddle
 

d3mueller

PC-Freak :D

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Hi, habe mich ein bisschen eingelesen in diese Grundlagen tutorials.
Auch wenn ich den Zusammenhang nicht ganz verstehe^^

Aber ich habe zumindest einen kleinen Fortschritt gemacht
PHP:
<?php
$verzeichnis = "fotos/mannschaftsfotos/";

$ordner = openDir($verzeichnis);

$bilder = array();
while ($file = readDir($ordner)) {
 	if ($file != "." && $file != ".." && !is_dir($file)) {
  		if (strstr($file, ".png") || strstr($file, ".gif") ||  strstr($file, ".jpg") ||  strstr($file, ".jpeg")) {
   			$info = getImageSize($verzeichnis . $file);
   			array_push($bilder, array(fileMtime($verzeichnis . $file) ,
    		$verzeichnis . $file , $info[0] , $info[1]));
  		}
 	}
}
closeDir($ordner);

rsort($bilder);


  echo "<form action='bilder-loeschen.php' method='post'>";
  echo "<select name='bildnamen' size='3'>";

foreach ($bilder as $zaehlen => $element) {
 if ($zaehlen  <= 20) { 
  echo "<option value='test'>" . $element[1] . "</option>";
 }
}
  echo "<input type='submit' value='Absenden'>";
  echo "</form>";
?>
er zeigt zumindest als einzelne optionen die Pfade der Bilder, inklusive Dateinamen an. Nur leider funktioniert es nicht, wenn ich eines auswähle, und auf absenden klicke. Ich wollte auch der anderen Seite dann das hier machen:

PHP:
<?php
	$bildname = $_POST['bildnamen'];
	echo $bildname;
?>
Aber er zeigt mir nur eine <selection> mit 6 optionen bei denen überall steht "Name des Bildes".
Wahrscheinlich liegt es an dem value, da es immer gleich ist(nämlich test) Aber da finde ich echt keine Lösung.

EDIT:
Eigentlich müsste es ja so gehen:
PHP:
  echo "<option value='" . $element[1] . "'>" . $element[1] . "</option>";
ich habe es mit <form method="get"> probiert, in der statusleiste wird exakt der Pfad angegeben. aber mit method="post" kommt das irgendwie nicht richtig an, weil er, wie oben schon gesagt, so was komisches anzeigt.
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Dein Code sieht richtig aus. Du scheinst aber nirgends das <select> zu schließen. Ich weiß nicht, wie tolerant PHP dort ist, aber das könnte schon die Fehlerursache sein.



Duddle
 

d3mueller

PC-Freak :D

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Hi, stimmt das hatte ich vergessen. Jetzt geht es :D
Hier man alles zusammen:
PHP:
<?php
$verzeichnis = "fotos/mannschaftsfotos/";

$ordner = openDir($verzeichnis);

$bilder = array();
while ($file = readDir($ordner)) {
 	if ($file != "." && $file != ".." && !is_dir($file)) {
  		if (strstr($file, ".png") || strstr($file, ".gif") ||  strstr($file, ".jpg") ||  strstr($file, ".jpeg")) {
   			$info = getImageSize($verzeichnis . $file);
   			array_push($bilder, array(fileMtime($verzeichnis . $file) ,
    		$verzeichnis . $file , $info[0] , $info[1]));
  		}
 	}
}
closeDir($ordner);

rsort($bilder);
  echo "<form action='bilder-loeschen.php' method='post'>";
  echo "<select name='bildnamen' size='3' multiple>";
  $zahl = 1;
foreach ($bilder as $zaehlen => $element) {
 if ($zaehlen  <= 20) { 
  echo "<option value='" . $element[1] . "'>" . $element[1] . "</option>";
 }
}
  echo "</select>";
  echo "<input type='submit' value='Absenden'>";
  echo "</form>";
?>
Und die Auswertung:
PHP:
<?php
	$bildname = $_POST['bildnamen'];
	if(unlink($bildname)) {
		echo "<p>Folgendes Bild wurde erfolgreich gel&ouml;scht:</p>";
                echo "<p>" . $bildname . "</p>";
	} else {
		
		echo "Da ist was schiefgelaufen";
	}
	
?>
Aber ich hab immer noch nicht rausbekommen, wie man das nun sicherer machen kann.
Geht das vllt so:
PHP:
if (in_array($bildname, $bilder)) {
 	if(unlink($bildname)) {
		echo "<p>Folgendes Bild wurde erfolgreich gel&ouml;scht:</p>";
                echo "<p>" . $bildname . "</p>";
	} else {
		
		echo "Da ist was schiefgelaufen";
	}
} else {
    Dieses Bild ist nicht in dem Ordner vorhanden.
}
Weil so prüft man das ja, aber ich weiß nicht, ob in $bilder der komplette Pfad angegeben wird.
Außerdem ist hier das problem, dass $bilder ja gar nicht mehr vorhanden ist, da es eine andere Datei ist.
 

Duddle

Posting-Frequenz: 14µHz

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Wenn du nicht weißt, was in einer Variable steht, lass sie dir ausgeben (print_r() ist dein Freund).
Es wird dich niemand davon abhalten, $bilder neu erstellen zu lassen. Um dabei Code-Duplizierung zu vermeiden, kannst du diese Funktion in eine extra Datei werfen und diese später einbinden.


Duddle
 

d3mueller

PC-Freak :D

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Hi, danke: es kommt dann:

Array ( [0] => Array ( [0] => 1247549551 [1] => fotos/mannschaftsfotos/Penguins.jpg [2] => 1024 [3] => 768 ) [1] => Array ( [0] => 1247549551 [1] => fotos/mannschaftsfotos/Lighthouse.jpg [2] => 1024 [3] => 768 ) [2] => Array ( [0] => 1247549551 [1] => fotos/mannschaftsfotos/Jellyfish.jpg [2] => 1024 [3] => 768 ) [3] => Array ( [0] => 1247549551 [1] => fotos/mannschaftsfotos/Hydrangeas.jpg [2] => 1024 [3] => 768 ) [4] => Array ( [0] => 1247549551 [1] => fotos/mannschaftsfotos/Desert.jpg [2] => 1024 [3] => 768 ) [5] => Array ( [0] => 1247549551 [1] => fotos/mannschaftsfotos/Chrysanthemum.jpg [2] => 1024 [3] => 768 ) )

Damit hab ich das hier erstellt:
PHP:
<?php
if (in_array("fotos/mannschaftsfotos/Penguins.jpg", $bilder[0])) { 
	echo "<p>";
	echo "Penguins.jpg ist vorhanden. Datei darf gelöscht werden";
	echo"</p>";
}

?>
(den Pfad könnt ich dann mit $bildname ersetzen)
Das Problem ist, das dort immer mehr arrays kommen. Also ganz viele arrays in arrays. Und da funktioniert das halt nicht mehr.
Ich könnte zwar mit "or" arbeiten, aber wenn es mehr oder weniger Bilder gibt(also auch mehr oder weniger arrays) dann funktioniert das auch nicht mehr.
Gibt es da einen trick?
 

Duddle

Posting-Frequenz: 14µHz

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Da gibt es mehrere Wege:
a) iteriere über alle Elemente von $bilder und prüfe die
b) erstelle $bilder gleich nur mit den Namen (dazu müsstest du aber verstehen, was in der entsprechenden Schleife überhaupt passiert)
c) arbeite rekursiv - PHP bietet zwar kein rekursives in_array(), aber jede Funktion hat einen Kommentarbereich, in dem Nutzer ihre Lösungen für häufige Probleme vorstellen, darunter auch auch rekursive Varianten wo es sinnvoll ist



Duddle
 

d3mueller

PC-Freak :D

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Da gibt es mehrere Wege:
a) iteriere über alle Elemente von $bilder und prüfe die
b) erstelle $bilder gleich nur mit den Namen (dazu müsstest du aber verstehen, was in der entsprechenden Schleife überhaupt passiert)
c) arbeite rekursiv - PHP bietet zwar kein rekursives in_array(), aber jede Funktion hat einen Kommentarbereich, in dem Nutzer ihre Lösungen für häufige Probleme vorstellen, darunter auch auch rekursive Varianten wo es sinnvoll ist



Duddle


a) mienst du so was?:
PHP:
<?php

foreach($bilder as $werte){
if (in_array("fotos/mannschaftsfotos/Desert.jpg", $werte)) { 
	echo "<p>";
	echo "Desert ist da ! :D";
	echo"</p>";
} else {
	echo "<p> Dieses Bild ist leider nicht vorhanden</p>";
}
}

?>
Bloß, dann kommt da halt:
Dieses Bild ist leider nicht vorhanden

Dieses Bild ist leider nicht vorhanden

Dieses Bild ist leider nicht vorhanden

Dieses Bild ist leider nicht vorhanden

Desert ist da ! :D

Dieses Bild ist leider nicht vorhanden




zu b)
Habe es mal versucht. Also bei mir funktioniert es :D
Vllt gehts aber noch einfacher?
PHP:
...

$bilder = array();
while ($file = readDir($ordner)) {
 	if ($file != "." && $file != ".." && !is_dir($file)) {
  		if (strstr($file, ".png") || strstr($file, ".gif") ||  strstr($file, ".jpg") ||  strstr($file, ".jpeg")) {
   			array_push($bilder, fileMtime($verzeichnis . $file) ,
    		$verzeichnis . $file);
  		}
 	}
}

...

Dann schreibt er bei print_r

Array ( [0] => 1247549551 [1] => 1247549551 [2] => 1247549551 [3] => 1247549551 [4] => 1247549551 [5] => 1247549551 [6] => fotos/mannschaftsfotos/Penguins.jpg [7] => fotos/mannschaftsfotos/Lighthouse.jpg [8] => fotos/mannschaftsfotos/Jellyfish.jpg [9] => fotos/mannschaftsfotos/Hydrangeas.jpg [10] => fotos/mannschaftsfotos/Desert.jpg [11] => fotos/mannschaftsfotos/Chrysanthemum.jpg )
also keine verschachtelten Arrays mehr. Ich glaub das ist so, da ich (siehe oben im Code) bei array_push bei fileMtime(...) das array davor weggemacht habe, oder (also array(fileMtime))?

Und dann habe ich noch die variable $info entfernt, da man die ja dann auf diesem Weg nicht mehr braucht.

Und dann noch das nachschauen, ob die datei vorhanden ist:
PHP:
...
if (in_array("fotos/mannschaftsfotos/Jellyfish.jpg", $bilder)) { 
	echo "<p>";
	echo "Jellyfish ist da ! :D";
	echo"</p>";
} else {
	echo "<p> Dieses Bild ist leider nicht vorhanden</p>";
}
...

c)
Da hab ich leider keine Ahnung.

Lg
Dennis

EDIT:
Okay, hab es noch einfacher gemacht(denke ich):
PHP:
...
$bilder = array();
while ($file = readDir($ordner)) {
 	if ($file != "." && $file != ".." && !is_dir($file)) {
  		if (strstr($file, ".png") || strstr($file, ".gif") ||  strstr($file, ".jpg") ||  strstr($file, ".jpeg")) {
   			array_push($bilder, $verzeichnis . $file);
  		}
 	}
}
...
Man muss ja nicht noch die Modifikationszeit(heißt das so?) anzeigen. So ist das alles noch kompakter.

Array ( [0] => fotos/mannschaftsfotos/Penguins.jpg [1] => fotos/mannschaftsfotos/Lighthouse.jpg [2] => fotos/mannschaftsfotos/Jellyfish.jpg [3] => fotos/mannschaftsfotos/Hydrangeas.jpg [4] => fotos/mannschaftsfotos/Desert.jpg [5] => fotos/mannschaftsfotos/Chrysanthemum.jpg )
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Für a) könntest du dir entweder merken, ob ein Treffer gefunden wurde. Dafür könntest du bspw. einen einfachen Booleschen Wert mit der richtigen logischen Operation verknüpfen:
PHP:
$gefunden = false;
foreach($bilder as $bild) {
  $imArray = in_array($dateiname, $bild);
  $gefunden = $gefunden || $imArray;
}

//bzw. kürzer
$gefunden = false;
foreach($bilder as $bild) {
  $gefunden = $gefunden || in_array($dateiname, $bild);
}

//und später
if($gefunden) {
  echo "Bild gefunden";
}
Schau dir die Wahrheitstabelle vom logischen Oder / der Disjunktion an, dann solltest du das verstehen. $gefunden wird wahr, sobald entweder im derzeitigen Durchlauf in_array() wahr wird oder falls $gefunden vorher schon wahr war.

Oder du könntest einfach die Schleife abbrechen, falls du etwas findest:
PHP:
$gefunden = false;
foreach($bilder as $bild) {
  if(in_array($dateiname, $bild)) {
    $gefunden = true;
    break;
  }
}
"break" wird hier beschrieben.

b) hast du ja schon selbst geschafft, obwohl es da auch noch gibt.

Über c) brauchst du dir erstmal wohl keine Gedanken machen. Rekursion ist ein sehr wichtiges Prinzip, aber es ist in diesem Beispiel nicht notwendig.


Duddle
 

Tr3icio

Nicht mehr ganz neu hier

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

PHP:
if (strstr($file, ".png") || strstr($file, ".gif") ||  strstr($file, ".jpg") ||  strstr($file, ".jpeg")) {

Kann man vereinfachen durch:

PHP:
if (preg_match('/\.(gif|jpeg|jpg|png)$/', $file)) {

So könnte man sogar einen Array von Dateierweiterungen machen, den man mit implode() und | zu einem passenden String macht.

Und aus:

PHP:
     if ($file != "." && $file != ".." && !is_dir($file)) { 
          if (strstr($file, ".png") || strstr($file, ".gif") ||  strstr($file, ".jpg") ||  strstr($file, ".jpeg")) { 
               array_push($bilder, $verzeichnis . $file); 
          } 
     }

könnte man machen:

PHP:
    if (is_dir($file) || !preg_match('/\.(gif|jpeg|jpg|png)$/', $file))
        continue; // . und .. sind auch Verzeichnisse ;-)

    array_push($bilder, $verzeichnis . $file);

Aber das ist jedem selbst überlassen.
 

d3mueller

PC-Freak :D

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Hi, danke für die Antworten.

@Duddle
zu a)
Klingt logisch, aber ich denke ich nehme b)^^ Aber ich lese es mir mal trotzdem durch.

zu b)
Hm.. müsste das nicht so gehen?
PHP:
...
  $dir = "/fotos/mannschaftsfotos/";
foreach(glob($dir) as $zaehlen => $datei)  {
 if ($zaehlen  <= 20) { 
  echo "<option value='" . $datei . "'>" . $datei . "</option>";
...
Geht aber iwie nicht


@Tr3icio

Cool. viel kürzer^^


das 2.:
Das verstehe ich iwie nicht so^^
Und wieso muss man diese if-abfrage nicht hinpacken:
PHP:
	if ($file != "." && $file != ".." && !is_dir($file)) {
kann man so nicht noch sichergehen, dass keine irgendwie schreibt ../fotos/mannschaftsfotos
oder so?






Aber echt, vielen Dank :D

Lg
Dennis
 

Tr3icio

Nicht mehr ganz neu hier

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

@d3mueller

Ganz einfach :)
1. Du schaust ob der Name nicht . und nicht .. ist. "." ist das Verzeichnis selbst und ".." das "Elternverzeichnis" (mir fällt grade nicht ein was ich schreiben soll xD), es sind also beides Verzeichnisse, weswegen is_dir() auch "." und ".." erkennt. Deswegen reicht:

is_dir($file) || !preg_match('/\.(gif|jpeg|jpg|png)$/', $file)

Und wegen dem "../fotos/mannschaftsfotos" kannst du einfach ein trim anwenden.
Ein Beispiel:

PHP:
$var = trim('../fotos/mannschaftsfotos', ' ./');
$var == 'fotos/mannschaftsfotos' // Es wurden vorne und hinten alle Leerzeichen, Punkte und Slashes entfernt :-)

Und was mir gerade noch aufgefallen ist:
PHP:
echo "<option value='" . $datei . "'>" . $datei . "</option>";

Du kannst value='" . $datei . "' weglassen.
Wenn bei <option> das Attribute value weggelassen wird, wird einfach der Inhalt genommen. (<option>test</option> ist das selbe wie <option value="test">lol</option>)
 

Duddle

Posting-Frequenz: 14µHz

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

Dein Muster ist nicht vollständig. In deinem Beispiel wird exakt der angegebene Ordner gefunden/zurückgegeben, nicht seine Inhalte. Sobald du eine Wildcard "*" dranhängst, findet er alle darauf passenden Inhalte.
Problematisch werden dabei aber nicht-Bilder, und bisher arbeitest du ja nur mit Bildern. Du müsstest dann genauer angeben, welche Dateiendungen du akzeptieren willst und dabei mit geschweiften Klammern und der Option GLOB_BRACE spielen. Das wird in dem verlinkten Tutorial erklärt.



Duddle
 

d3mueller

PC-Freak :D

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

@d3mueller

Ganz einfach :)
1. Du schaust ob der Name nicht . und nicht .. ist. "." ist das Verzeichnis selbst und ".." das "Elternverzeichnis" (mir fällt grade nicht ein was ich schreiben soll xD), es sind also beides Verzeichnisse, weswegen is_dir() auch "." und ".." erkennt. Deswegen reicht:

is_dir($file) || !preg_match('/\.(gif|jpeg|jpg|png)$/', $file)

Und wegen dem "../fotos/mannschaftsfotos" kannst du einfach ein trim anwenden.
Ein Beispiel:

PHP:
$var = trim('../fotos/mannschaftsfotos', ' ./');
$var == 'fotos/mannschaftsfotos' // Es wurden vorne und hinten alle Leerzeichen, Punkte und Slashes entfernt :-)

Und was mir gerade noch aufgefallen ist:
PHP:
echo "<option value='" . $datei . "'>" . $datei . "</option>";

Du kannst value='" . $datei . "' weglassen.
Wenn bei <option> das Attribute value weggelassen wird, wird einfach der Inhalt genommen. (<option>test</option> ist das selbe wie <option value="test">lol</option>)
Okay. Danke :D
Nur was bedeutet dieses
continue;?
Und warum sind da keine eschweiften klammern in dem Code? oder find ich die nur nicht.




Dein Muster ist nicht vollständig. In deinem Beispiel wird exakt der angegebene Ordner gefunden/zurückgegeben, nicht seine Inhalte. Sobald du eine Wildcard "*" dranhängst, findet er alle darauf passenden Inhalte.
Problematisch werden dabei aber nicht-Bilder, und bisher arbeitest du ja nur mit Bildern. Du müsstest dann genauer angeben, welche Dateiendungen du akzeptieren willst und dabei mit geschweiften Klammern und der Option GLOB_BRACE spielen. Das wird in dem verlinkten Tutorial erklärt.
Duddle
Oookay^^, wie mache ich eine Wildcard, bzw. was ist eine Wildcard? Muss ich einfach nur ein * hinten an den Pfad hängen? Weil das funktioniert nicht, habs probiert.


Danke schon mal,
Liebe Grüße
Dennis
 

Tr3icio

Nicht mehr ganz neu hier

AW: Checkbox mit PHP auswerten + Datei aus Ordner löschen

continue; heißt, dass die Schleife ab dem Punkt wieder von vorne beginnt.
Ein Beispiel:

PHP:
$i = 0; // blödes beispiel ;-)
while ($i < 5)
{
    $i++; 
    if ($i < 3) continue;

    echo $i;
}

Wenn $i kleiner als 3 ist wird continue; ausgeführt und die Schleife beginnt von vorne.
Das heißt am ende gibt die Schleife nur aus: 34 anstatt 1234.
Bei break; würde die Schleif komplett abgebrochen werden, das heißt es würde mit dem Code nach der Schleife (nach dem }) weitergemacht werden.

Und die geschweiften Klammern sind unnötig (in diesem Fall).
Wenn du nur 1 Sache in der if-Abfrage ausführst, kannst du die Klammern weglassen.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.452
Mitglieder
67.557
Neuestes Mitglied
Charal
Oben