Hey,
vielen Dank. Hab es nun hinbekommen.
EDIT: Beim Überprüfen ob ein Bild gesendet wurde habe ich nicht die else-Variante genommen, weil der error dann sofort ausgegeben wird nach dem wiederladen der Seite.
Habe es so umgesetzt :
Hey,
vielen Dank. Hab es nun hinbekommen.
EDIT: Beim Überprüfen ob ein Bild gesendet wurde habe ich nicht die else-Variante genommen, weil der error dann sofort ausgegeben wird nach dem wiederladen der Seite.
Habe es so umgesetzt :
Hey,
Jav : Ok. Alles klar. Habe jetzt um den suffix (das suffix ist dann z.b. .jpg, .png, .... ?) zu bestimmen die function exif_imagetype() benutzt. In diese soll der Name der Bilddatei rein. Habe ich nun auch so gemacht :
Nun kommt aber jedes mal folgende Fehlermeldung :
Warning: exif_imagetype(turm_schwarz.jpg): failed to open stream: No such file or directory in G:\xampp\htdocs\bilder_upload\bilder_upload.php on line 37
In dieser Zeile liegt die variable datei_endung. Ok ich denke auch, dass wenn man z.b. mehrer Bilderordner hat (verschiedener Themen, für verschiedene Sachen), dass man den Pfad mit den bilder namen in die db speichert.
Habe schon nach der Warnung geschaut. Da wird gesagt, dass man den realen Pfad mal mit der function realpath() ermitteln soll. Habe ich jetzt auch gemacht und dies kommt da raus: G:\xampp\htdocs\bilder_upload . Das ist nicht der ordner, den ich als Speicherordner (wo die Bilder rein kommen) angegeben habe. So sollte die Verzichnissstruktur aussehen : G:\xampp\htdocs\bilder_upload\bilder\
cottton : Mhm... stimmt ja. Danke
Stef
Hey zusammen,
ich habe ein Bilderupload erstellt. Funktioniert auch.
Ein Problem habe ich dennoch. Wenn ich nun überprüfen möchte ob der index bild leer ist kommt nie die Fehlermeldung, obwohl man nix abgesendet hat. Oder es kommt die Fehlermeldung aber diese bleibt dauerhaft bestehen. Ich weiß nich warum das so ist...
Mein Code:
<?php
/*
$_FILES['userfile']['name'] = liefert den Dateinamen
$_FILES['userfile']['type'] = Mime-Type der Datei
$_FILES['userfile']['size'] = Die Größe der hochgeladenen Datei in Bytes.
$_FILES['userfile']['tmp_name'] = Pfad zum Temp-Verzeichnis
*/
if (isset($_FILES['bild'])) {
//Error als array
$error = array();
//Array Daten von $_FILES in Variablen speichern
$mime_type = $_FILES['bild']['type'];
$size = $_FILES['bild']['size'];
$tmp_pfad = $_FILES['bild']['tmp_name'];
$name = $_FILES['bild']['name'];
// Folder, in den die Bilder hochgeladen werden sollen
$upload_folder = 'bilder/';
// Hochzuladende Datei
$upload_data = $upload_folder . $_FILES['bild']['name'];
//Zugelassene Endungen & Größe
$erlaubte_endungen = array('image/jpg', 'image/jpeg', 'image/png', 'image/gif');
$erlaubte_size = 500 * 2048; // = 1,024 mb
//Errorbehandlung
/* Hier die erste if-anweisung */
if(empty($_FILES['bild'])){
$error[] = '<p class="fehler">Bitte fügen sie ein Bild zum hochladen ein!</p> ';
} else
if(!in_array($mime_type, $erlaubte_endungen)){
$error[] = '<p class="fehler">Sie dürfen nur Bilder mit folgenden Endungen hochladen : jpg, jpeg, png, gif!</p> ';
} else if(file_exists($upload_data)){
$error[] = '<p class="fehler">Das Bild ist mit diesem Namen schon vorhanden! </p> ';
}
if($size > $erlaubte_size){
$error[] = '<p class="fehler">Sie dürfen nur Bilder mit einer maximalen Größe von 1,024mb hochladen! </p> ';
}
//Keine Fehler vorhanden ? Upload in Folder
if(count($error) === 0){
if(move_uploaded_file($tmp_pfad, $upload_data)){
$erfolgreich = '<p class="erfolgreich"> Ihr Bild <span class="bold">' . htmlspecialchars($name) . '</span> wurde erfolgreich hochgeladen!</p>';
} else{
$error[] = '<p class="fehler">Das Bild konnte nich hochgeladen werden! </p> ';
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Bilderupload</title>
<style>
span.bold{
font-weight: bold;
}
p.fehler{
color: red;
}
p.erfolgreich{
color: green;
}
</style>
</head>
<header>
<h3>Bilderupload</h3>
</header>
<main>
<form method="post" enctype="multipart/form-data">
<label for="bild_input">Bild hochladen: <input type="file" name="bild" id="bild_input"></label>
<input type="submit" name="image" value="Bild hochladen!">
<p> Info: Sie dürfen Bilder mit den Endungen <span class="bold">jpg</span>, <span class="bold">jpeg</span>, <span class="bold">png</span> und <span class="bold">gif</span> hochladen. <br>
Die Größe darf maximal <span class="bold">500kb</span> sein!</p>
</form>
<?php
if(isset($error) && count($error) > 0){
echo implode('', $error);
} else if (isset($erfolgreich) && count($error) == 0){
echo $erfolgreich;
}
?>
</main>
<body>
</body>
</html>
Alles anzeigen
Eine weiter Frage habe ich. Was haltet ihr davon wenn man die Dateipfade zu den Bildern in die DB speichert ?
Gruß,
Stef
Hey,
danke für das Tutorial. Kann gut weiterhelfen.
Eine Frage habe ich dennoch. Wenn der User jetzt z.b. sein Beitrag noch mehrere Male ändert, wird die spalte, updated_at, immer aktualisiert ?
Stef
Hey,
diese Notiz kommt, wenn die variable nicht definiert ist. Was ich dir vorschlagen würde bei der Variable ist folgendes:
Dies weist $idimage, wenn kein Bild mit dem Formular über GET gesendet wurde, null zu. Somit ist sie auch definiert, wenn kein Bild gesendet wurde.
PDO::FETCH_BOTH ? Meintest du nicht PDO::FETCH_OBJ ?
Bitte berücksichtige das, was cotton geschrieben hat. Dies ist sehr wichtig.
Stef
Hey,
bitte poste deine Scripts in den BB-Codes das nächste Mal.
Weißt du was du machst ? Scheint nicht so teilsweise.
In dem <head> tag kommten nur der seitentittel, die verlinkung zu CSS- JS-Dateien, meta tags, style und script rein. Alles andere, was zum Aufbau der Seite gehört in den <body>.
Zu deinem Problem:
Es kommt bei dir bestimmt folgender Fehler : Kein Video mit unterstütztem Format und MIME-Type gefunden.
Ist das Video welches du abspielen willst wirklick vom typ mp4 ?
Sprichst du den richtigen Ordner und die richtige Datei an?
Mit dem HTML-Code soll es gehen (getestet) , ändere nur nur die source :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Video / Audio abspielen</title>
<style>
article#microsoft_anzeige{
clear: both;
text-align:center;
position: relative;
z-index:100;
}
</style>
</head>
<body>
<!-- Hier kommt der ganze seiteninhalt rein-->
<main>
<section>
<article id="microsoft_anzeige">
<a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home?ocid=ie6_countdown_bannercode">
<img src="http://storage.ie6countdown.com/assets/100/images/banners/warning_bar_0000_us.jpg" border="0" height="42" width="820" alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today.">
</a>
</article>
</section>
<section>
<video width="100%" autoplay controls>
<source src="test.mp4" type="video/mp4" />
</video>
<audio autoplay>
<source src="http://nikita.hostmania.de:8422/stream" type="audio/mp3">
<p>ihr browser kennt das html5-element noch nicht.</p>
</audio>
</section>
</main>
</body>
</html>
Alles anzeigen
Gruß,
Stef
Hi,
du möchtest bei klick auf ein Bild dieses Bild vergrößert darstellen und dann dieses auch schließen können ?
Dafür würde ich dir eine JS-Gallerie empfehlen wie z.b highslide (http://highslide.com/). Ist modern und man kann einiges mit der machen.
Gruß,
Stef
Hey,
ja genau so ist.
Weiters Beispiel:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS</title>
</head>
<body>
<header id="kopfbereich">
<section id="kopf_abteil">
<h1>CSS</h1>
<p>CSS ist eine Websprache mit welcher man eine Webseite gestalten kann</p>
</section>
</header>
</body>
</html>
Alles anzeigen
header#kopfbereich{
/*Damit sprichst du den header an mit der id kopfbereich*/
}
#kopfbereich section#kopf_abteil{
/*Damit sprichst du das section an mit der id kopf_abteil welches innerhalb des header mit id #kopfbereich ist*/
}
/*usw........*/
Gruß,
Stef
Hey,
1. Mit diesem CSS-Code sprichst du ja nur das div mit der class header an. Und sagst das der Inhalt von header die textfarbe weiß und ein innenabstand von 15pixel haben soll. Der border und die background color beschränkt sich dabei nur auf das div. Wenn du möchtest das auch h1 ein border hat, musst du h1 individuell ansprechen.
<div class="col-3"> /* Die class 'menu' hier entfernt */
<ul class="menu">
<li class="menu">The Flight</li>
<li class="menu">The City</li>
<li class="menu">The Island</li>
<li class="menu">The Food</li>
</ul>
</div>
.menu ul { /* Dieser hat keinen Effekt mehr so. Entfernt man jedoch '.menu' dann funktioniert das wieder. */
[...]
}
.menu li {
[...]
}
2. Warum funktioniert dies nicht ? Schau dir mal den HTML-Aufbau an. Du gibst dem ul die classe menu und tust dann in css nicht dem ul die class menu geben sondern dem div welches aber die class col-3 hat. Bzw. schau mal was da als Kommentar in den /* */ steht.
Beispiel wie es funktioniert:
<div class="col-3">
<ul class="menu">
<li class="menu">The Flight</li>
<li class="menu">The City</li>
<li class="menu">The Island</li>
<li class="menu">The Food</li>
</ul>
</div>
.col-3 ul.menu {
background-color: yellow;
list-style-type: none;
}
.menu li {
color: red;
display: inline;
}
Gruß,
Stef
Hey,
du hast ja 1 externes Formular und 1 internes Formular, das sind ja 2 Formulare.
Und für jedes Formular brauchst du eine eigene php-datei.
Dies kann auch sein das es an dem shortcode liegt. Ist das externe Formular auf keine Wordpress seite ?
Wendest du für beide Formular das gleiche PHP-Script an ?
Und du brauchst nicht unbedingt bei dem absenden eines Formulares eine neue seite aufzurufen. Du kannst beim <form>-tag das action="" entfernen. Dann ruft es keine weitere seite auf.
Zitat
Wie soll ich denn meinen Code aufteilen?
Du kannst 2 PHP-dateien machen. IM 1sten ist dann z.b. das externe Formular drin und im 2ten das interne Formular.
Du kannst die Formularauswertung auch mit arrays machen:
<?php
if (isset($_GET['abgesendet'])) {
$formulardaten = isset($_GET['formulardaten']['daten']) ? $_GET['formulardaten']['daten'] : null;
if(!is_null($formulardaten)) {
filter_var_array($formulardaten, FILTER_SANITIZE_STRING);
}
$fehler = array_filter(
array_map(
function($daten, $key){
return empty(trim($daten)) ? '<p class="fehler"> Bitte ' . $key . ' eingeben!</p>' : null;
},
$formulardaten,
array_keys($formulardaten)
)
);
$datum = date('H:i:s');
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Kontaktformular</title>
<style>
input{
display: block;
}
p.fehler{
color: red;
}
</style>
</head>
<body>
<form method="get">
<label>Vorname:</label>
<input type="text" name="formulardaten[daten][Vornamen]" class="eingabefeld" ">
<label>Nachname:</label>
<input type="text" name="formulardaten[daten][Nachnamen]" class="eingabefeld" ">
<label>Strasse Nr.:</label>
<input type="text" name="formulardaten[daten][Straße]" class="eingabefeld" ">
<label>PLZ Ort:</label>
<input type="text" name="formulardaten[daten][Postleitzahl]" class="eingabefeld" ">
<input type="hidden" name="datum" id="datum" value=" <?php echo isset($datum) ? $datum : null; ?>" >
<input type="submit" name="abgesendet" value="Absenden!">
</form>
<?php
if (isset($formulardaten) && count($fehler) === 0){
echo '<p>Folgendes wurde eingegeben:</p>';
echo implode('<br>', $formulardaten);
echo '<p>Heute um: ' . $datum .'</p>';
//print_r($formulardaten);
} else if(isset($fehler) && !is_null($fehler)){
echo implode('', $fehler);
}
?>
</body>
</html>
Alles anzeigen
Das ist ein Beispiel wie ich es machen würde, also das php und html in eine datei. Anstatt der array-auswertung kannst du es auch mit if-statements, ... machen
Stef
Hey,
wollte grad eben mir das mal ansehen jedoch kommt folgende Meldung:
Fehler 403 Zugriff nicht gestattet
Der Zugriff auf die von Ihnen angeforderte Seite ist nicht erlaubt.
Mögliche Ursachen für diese Fehlermeldung finden Sie in den easyname FAQ.
Hey,
Axel : Ich denke er möchte den Text über das Bild als Textbeschreibung haben.
@TE : Du kannst wir Axel gesagt hat das Bild über CSS einbauen und den Text dann darüber positionieren. Was man auch machen kann ist Unterhalb des Bildes eine Beschreibung. Ich sehe, dass du anstatt den vorgegebenen Containern in HTML wie z.b. <header>, <main>, <article>, <section>, <aside>, <footer> , einfach nur divs benutzt. <div>-container sollte man nur benutzen wenn die anderen container nicht zum vorhaben passen.
Ich habe dir mal ein Beispiel erstellt wie ich die Bildbeschreibung machen würde https://jsfiddle.net/mkrth2h9/5/:
<header id="kopfbereich">
<h1>
Testseite1
</h1>
</header>
<nav id="nav">
<ul>
<li><a href="index.html">Starseite</a></li>
<li><a href="ueberuns.html">Über Uns</a></li>
<li><a href="kontakt.html">Kontakt</a></li>
</ul>
</nav>
<main>
<article class="bilder">
<figure>
<img src="https://www.haus-ohrbeck.de/fileadmin/_processed_/csm_Raum-der-Stille-01_9dc3ecf334.jpg" alt="raum">
<figcaption>Das ist ein wunderschöner Raum</figcaption>
</figure>
</article>
<article id="inhalt">
<p>
Text Text Text
</p>
</article>
</main>
<footer id="footer">
<p>1 Satz Fußleiste </p>
</footer>
Alles anzeigen
*{
margin: 0;
padding: 0;
}
#kopfbereich {
background-color: red;
}
#kopfbereich h1 {
color:white;
font-size:2em;
padding: 2%;
}
#nav {
background-color:#ceb98e;
padding:2%;
}
#nav ul {
padding:0px;
}
#nav li {
background-color:orange;
list-style-type: none;
display: inline;
height: 1.5em;
padding: 0 1em;
line-height: 1.5em;
border-right: black 1px solid;
}
article.bilder{
margin: 1% 1%;
}
.bilder figure img{
width:350px;
height:300px;
}
.bilder figure{
border: 1px solid black;
width: 350px;
text-align: center;
}
#inhalt {
background-color:green;
}
#footer {
background-color: #ceb98e;
}
Alles anzeigen
Stef
Hi,
Ja das externe formular funktioniert. Das interne nicht.
Ich denke das dein Problem daran liegt, dass du für 2 Formulare die gleiche Datei aufrufst. Estelle mal bitte für jedes Formular eine eigenes PHP-Skript und ändere dann im code das action="ausführlink".
Ich benutze pro Formular immer ein eigenes script. Habe nochnie 1 Script für 2 Formulare gehabt. Denn intern ist ja von extern abgegrenzt (nicht das selbe).
Stef
Hey,
kannst du mal bitte die beiden php-scripts + Html scripts (formular intern und formular extern) hier posten. Dann kann ich dir besser helfen.
Stef
Hey,
Ja genau. Dies erreichst du indem du in der beitragsleiste, neben dem zitat (spechblase) , das </> klickst und dann dort code einfügst. Und wenn du darüberfährst wird auch code angezeigt.
Stef
Hey,
es kann nicht sein das mein Beispiel nicht funktioniert.
Schön das du es nun hinbekommen hast. Ich habe jetzt trotzdem mal ein script geschrieben, so wie ich es dir versucht habe zu erklären:
<?php
if(isset($_GET['Button'])) //hier überpürfen ob formular abgesendet wurde
{
$fehler = array();
//wenn ja mache dies
$vorname = trim($_GET['vorname']); //alle Lehrzeichen entfernen
$vorname = filter_var($vorname, FILTER_SANITIZE_STRING); //eingabe aufjedenfall filtern bevor du sie ausgiebst. Ich mache das meistens am anfang
$ausgabe = '<p>Ihr eingegebener Vorname: <span class="ausgabe"> ' . $vorname . '</span></p>';
$datum = date("H:i:s");
if(empty($vorname)){
$fehler[] = '<p class="fehler">Bitte geben sie ihren Vornamen an!</p>';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP ausgabe designen</title>
<style>
span.ausgabe{
color: green;
}
p.fehler{
color: red;
}
input{
display: block;
}
</style>
</head>
<body>
<form method="get">
<label for="vorname">Ihr Vorname: </label> <input type="text" name="vorname" id="vorname" value="">
<input type="hidden" name="datum" id="datum" value=" <?php echo $datum ?> ">
<input type="submit" name="Button" id="Button" value="Absenden">
</form>
<?php
if(isset($vorname) && count($fehler) == 0){
echo $ausgabe;
} else if (isset($fehler) && count($fehler) > 0){
echo implode('<br>', $fehler);
}
?>
</body>
</html>
Alles anzeigen
Habe da nun auch die Fehlerbehandlung und Filterung der Eingabe welche sehr wichtig ist noch hinzugefügt.
Stef
sluggy eröffne bitte dafür ein neues Thema. Dann kann man dir auch weiterhelfen.
Hey,
Was du machen könntest ist, dass du die ganzen Bilder in PHP in einem Array tust und bei jedem seitenaufruf diesen Array mischst mit der PHP funktion shuffle();
Beispielscript:
<?php
$bilder = array();
//in $bilder[] deine ganzen bilder reinmachen
$bilder[] = '<img class="bilder" src="bild1.jpg" alt="bild1">';
$bilder[] = '<img class="bilder" src="bild2.jpg" alt="bild2">';
$bilder[] = '<img class="bilder" src="bild3.jpg" alt="bild3">';
$bilder[] = '<img class="bilder" src="bild4.jpg" alt="bild4">';
$bilder[] = '<img class="bilder" src="bild5.jpg" alt="bild5">';
$bilder[] = '<img class="bilder" src="bild6.jpg" alt="bild6">';
//hier vermischen der bilder
shuffle($bilder);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Bilder mischen</title>
<style>
img.bilder{
width: 250px;
height: 250px;
}
</style>
</head>
<body>
<?php
//hier ausgabe des arrays $bilder mit einem zeilenumbruch (<br>)
echo implode('<br>', $bilder);
?>
</body>
</html>
Alles anzeigen
Stef
Hey,
wenn du Sachen in php ausgibst und diese designen möchtest sollst du die Daten die du durch das Formular übermittelt bekommst zuerst mal in eine variable stecken.
Nun kannst du $_GET['vorname']; in den <p>-Tag aus HTML reinschreiben und diesem p tag eine klasse geben.
<?php
$vorname = '<p class="ausgabe">' . $_GET['vorname'] . '</p>';
$datum = '<p class="datum">' . date("H:i:s") . '</p>';
?>
Und nun kannst du diese 2 klassen über css designen.
Gruß,
Stef
Hey,
ja so gefällt es mir auch deutlich besser. Sieht schon ansprechender aus. Bist du aus der Branche IT was mit HTML5, CSS3 , PHP, Javascript, ... arbeitet ?
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.