Ich habe deinen PHP-Code aus der txt-Datei und die beiden MP3s herunter geladen, die Pfade in meinem lokalen Verzeichnis angepasst und damit funktioniert es bei mir einwandfrei.
Ich habe festgestellt, dass deine Datei http://www.foto-finish.de/getID3-1.9.12/getid3/getid3.php zwar gefunden wird, aber leer ist. Ist da vielleicht bei Hochladen etwas schief gelaufen?
Beiträge von Sempervivum
-
-
Das wäre diese Zeile:
Würde bedeuten, dass der title-Tag in der MP3 nicht vorhanden ist. Das wundert mich, denn ich hatte mit "Here And Now And There And Then - Lenni Paul Klimek" getestet und da wurde der Titel angezeigt. Versuche es zunächst mal mit dieser Datei. -
Dieser Fehler kommt offenbar von dieser Zeile:
Offenbar hat er die MP3s noch nicht gefunden. Bist Du sicher, dass der Pfad richtig ist und dass die MP3s dort liegen?
Edit1: Doch, die MP3s sind da. Dann verstehe ich nicht, warum er sie nicht findet.
Edit2: Leider kann ich den PHP-Code nicht einsehen. Vielleicht kannst Du den Code der Seite zusätzlich mit der Endung "txt" hoch laden, dann kann ich ihn dort lesen. -
Nein, es muss natürlich nicht unbedingt "audio" sein, Du kannst den Pfad beliebig anpassen. Ich hätte ihn als Konstante ganz oben in dem Skript definieren sollen.
Und nein, Du brauchst die Bilder nicht explizit als Thumbnails abzulegen. Das Skript liest sie aus den MP3s.
Und was dieses betrifft:
ZitatFatal error: Cannot use [] for reading in /home/foto-finishde/public_html/S-Test.php on line 15
Anscheinend unterstützt deine PHP-Version die Schreibweise mit [] nicht. Verwende statt dessen dieses:
-
Du musst deine MP3s in das Verzeichnis audio legen. Hast Du das getan? Ich habe den Code natürlich getestet und bei mir hat er einwandfrei funktioniert.
Ich habe auch eine von deinen MP3s getestet und sie wird einwandfrei angezeigt, einschl. Bild, und abgespielt. -
Ich bin mal nach diesen beiden Anleitungen vorgegangen:
http://www.phpgangsta.de/moglichkeiten-…mp3s-auszulesenhttp://stackoverflow.com/questions/1674…-an-mp3-id3-tag
Damit funktioniert es einwandfrei, einschl. Auslesen des Bildes, wenn denn eines vorhanden ist:
PHP
Alles anzeigen<?php error_reporting(E_ALL); ini_set('display_errors', '1'); /* #################################################################################### Ein einfacher Audio-Player auf HTML5 Basis. Browser: IE 9+, Chrome (auch iOS), Safari (auch iOS), Firefox ab V. 21, neue Opera http://webdesign.weisshart.de 2014 Lizenz: CC BY-NC-SA 3.0 DE ##################################################################################### */ /* ################### hier die .mp3 Dateien (Streams gehen als https nicht) ######## */ $url = []; /* ################### und hier die angezeigten Titel ######################### */ $name = []; $image = []; // include getID3() library (can be in a different directory if full path is specified) require_once 'getID3-1.9.12/getid3/getid3.php'; // Initialize getID3 engine $getID3 = new getID3; $files = glob("audio/*.mp3"); foreach ($files as $filename) { $url[] = $filename; $ThisFileInfo = $getID3->analyze($filename); // Analyze file and store returned data in $ThisFileInfo $name[] = $ThisFileInfo['tags']['id3v2']['title'][0]; if(isset($ThisFileInfo['comments']['picture'][0])){ $image[] = 'data:'.$ThisFileInfo['comments']['picture'][0]['image_mime'].';charset=utf-8;base64,'.base64_encode($ThisFileInfo['comments']['picture'][0]['data']); } else { $image[] = ''; } } /* ##################### ab hier nicht mehr editieren ########################## */ $aufruf =""; $direktlink =""; function isIOS($user_agent=NULL) { if(!isset($user_agent)) { $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; } return (strpos($user_agent, 'iPhone') !== FALSE || strpos($user_agent, 'iPad') !== FALSE || strpos($user_agent, 'iPod') !== FALSE ); } /* den uebergebenen Titel abfragen */ if (isset($_REQUEST['titel'])) { $autoplay="autoplay"; /* kein Autoplay in iOS */ $neuer_titel=true; for ($i = 1; $i <= count($url); $i++) { if ($_REQUEST["titel"] == $i) {$titel = $url[$i-1];} } } else { $titel = $url[0]; $autoplay = ""; } /* die Linkliste generieren */ for ($i = 1; $i <= count($url); $i++) { $aufruf .= '<li><a href="?titel='.$i.'"> '.$name[$i-1]; if ($titel == $url[$i-1]) { $aufruf .= "<span class='star'> ✔︎</span>"; } if ($image[$i - 1] != '') $aufruf .= '<img id="FileImage" width="150" src="' . $image[$i - 1] . '" height="150">'; $aufruf .= "</a></li>\n"; $direktlink .= '<li><a style="color:#000" href="'.$url[$i-1].'"> '.$name[$i-1].'</a>'; $direktlink .= '</li>'; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> <link rel="stylesheet" type="text/css" media="screen" href="audiotest.css" /> <title>HTML5 Audio und Radio Player</title> <!-- <script src="modernizr.custom.29132.js"></script> --> <?php if(isIOS()) { echo ' <style> #player {background: #e1e1e1;border: 2px solid #aaa;} li a {color:#000 !important;} li {border-top: 1px solid #aaa} audio {margin: 10px 0 5px 0} </style> '; } ?> </head> <body onload="Lautstaerke()"> <!-- <h2>HTML5 Audio- und Radio-Player</h2> --> <div id="h2"></div> <script> if (top.location == self.location) { // Seite in einem Frame geladen document.getElementById('h2').innerHTML='<h1>HTML5 Audio- und Radio-Player</h1>'; } </script> <div id="ie_fallback"></div> <div id="player"> <!-- erstaunlich: ohne <source> tag gehts auch mit VO auf iOS --> <audio id="innerplayer" src="<?php echo $titel; ?>" controls <?php echo $autoplay; ?>></audio> <ul> <?php echo $aufruf; ?> </ul> </div> <div id="down_hinweis"></div> <!-- <p id="gemafrei" class="bem">Gemafreie Demo-mp3: <a href="http://www.MP3-GEMA-frei.de">MP3-GEMA-frei.de</a></p> --> <?php $neuer_titel = 0; if (isset($_REQUEST['titel'])) {$neuer_titel=1;} ?> <script> // if (!Modernizr.audio.mp3) { // document.getElementById('player').style.display = 'none'; // document.getElementById('ie_fallback').innerHTML='<p>Ihr Browser kann leider keine Audios im MP3-Format abspielen. Das tut uns leid. <br />Ersatzweise hier die Links zum Abspielen in einem installierten Player oder zum Download (rechte Maustaste).</p> <ul><?php echo $direktlink; ?></ul>'; // } /* Damit Screen Reader Ausgaben nicht uebertoent werden: */ function Lautstaerke() { document.getElementById("innerplayer").volume=0.7; /* Fokus auf Player setzen nach Anwahl */ var neu = <?php echo $neuer_titel; ?>; if ( neu === 1 ) { document.getElementById('innerplayer').focus(); } } </script> </body> </html>Dieses Skript liest die MP3s aus dem Unterverzeichnis audio aus.
-
Das sollte doch zu machen sein.
ZitatIch habe im Netz gesucht und wirklich einiges zum Thema gefunden, aber leider funktioniert dieses alles nicht
Poste doch mal, wonach Du vorgegangen bist und woran es gescheitert ist.
-
Hast Du dir jPlayer schon angesehen?
http://jplayer.org/latest/demos/
Edit: Ich sehe gerade, der ist von Haus aus nicht responsive, aber es gibt anscheinend Wege, das nachzurüsten:
http://stackoverflow.com/questions/2051…ayer-responsive -
Dazu musste ich das Ganze etwas umstrukturieren. Ich habe auch den roten Rahmen für das zweite Eingabefeld hinzu gefügt.
Code
Alles anzeigen<script> function toAm(str) { return str.replace(/\./g, "").replace(",", "."); } function multiply() { var val1 = document.getElementById("isk").value; var val2 = document.getElementById("fracht-msg").value; if (val1 != "" && val2 != "") { var val1 = toAm(val1); document.getElementById("endergebnis").value = formatNr(val1 * val2); } } function formatNr(nr) { str = nr.toString().replace(".", ","); var pos = str.indexOf(","); if (pos == -1) pos = str.length; var result = "", i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; return result; } function inputFracht(val) { var msgAbove = "Zu Groß"; var msgBelow = "Perfekt"; var limit = 300000; val = (toAm(val) * 500).toFixed(2); document.getElementById("isk").value = formatNr(val); var msgfield = document.getElementById("zuzahlen"); if (val > limit) msgfield.innerHTML = msgAbove; else msgfield.innerHTML = msgBelow; multiply(); } function inputFracht2(inp) { var msgBelow = "1000"; limit1 = 1000000000; var msgLimit1 = "200000"; limit2 = 2000000000; var msgLimit2 = "500000"; var val = inp.value.replace(",", "."); var val2 = document.getElementById("") var outp = document.getElementById("fracht-msg"); if (val >= limit2) outp.innerHTML = msgLimit2; else if (val >= limit1) outp.innerHTML = msgLimit1; else outp.innerHTML = msgBelow; multiply(); } </script> <form> Frachtgroesse<br> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht(this.value);"><br> <input type="reset" value="Löschen" /> <br> Isk zu zahlen:<br> <output id="isk"></output> <output id="zuzahlen"></output> Fracht: <input type="text" id="fracht2" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht2(this);"> <output id="fracht-msg"></output><br> <output id="endergebnis"></output> </form> <style> #fracht:invalid, #fracht2:invalid { border: 2px solid red; } </style> -
Ja, <style> und </style> sind HTML-Tags. Man braucht sie nur, wenn man CSS in einer HTML-Datei einbettet. In einer CSS-Datei dürfen nur CSS-Anweisungen (und Kommentare) stehen.
Wenn es bei dir trotzdem nicht funktioniert, solltest Du überprüfen, ob Pfad und Dateiname stimmen. -
Fehler gefunden. Dieses:
löscht nur den ersten Punkt, so dass ein String mit mehreren Punkten übrig bleibt. Das ist dann kein gültiges Format für eine Zahl und es ergibt NaN.
So ist es richtig: -
Poste mal die Eingaben, die zum NaN führen.
-
-
PS: Kopieren in die Zwischenablage sollte kein Problem sein:
https://clipboardjs.com/ -
Habe jetzt mal die Berechnungen, so wie ich dich verstanden habe, eingebaut. Langsam verliert man den Überblick bei den vielen Eingabefeldern. Ich empfehle, das zu überarbeiten und aussagefähige Texte für die Beschriftungen und IDs zu verwenden. Die Formatierungen mit Punkt und Komma muss ich dann noch Mal überarbeiten.
Code
Alles anzeigen<script><script> function multiply() { var val1 = document.getElementById("isk").value; var val2 = document.getElementById("fracht-msg").value; if (val1 != "" && val2 != "") { var val1 = val1.replace(".", "").replace(",", "."); document.getElementById("output3").innerHTML = val1 * val2; } } function convert(val) { var msgAbove = "Zu Groß"; var msgBelow = "Perfekt"; var limit = 5000; val = (val.replace(",", ".") * 500).toFixed(2); var msgfield = document.getElementById("zuzahlen"); if (val > limit) msgfield.innerHTML = msgAbove; else msgfield.innerHTML = msgBelow; str = val.toString().replace(".", ","); var pos = str.indexOf(","); var result = "", i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; multiply(); return result; } function inputFracht(inp) { var msgBelow = "10"; limit1 = 200; var msgLimit1 = "20"; limit2 = 500; var msgLimit2 = "50"; var val = inp.value.replace(",", "."); var val2 = document.getElementById("") var outp = document.getElementById("fracht-msg"); if (val >= limit2) outp.innerHTML = msgLimit2; else if (val >= limit1) outp.innerHTML = msgLimit1; else outp.innerHTML = msgBelow; multiply(); } </script> <form> Frachtgroesse<br> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="isk.value = convert(fracht.value);"><br> <input type="reset" value="Löschen" /> <br> Isk zu zahlen:<br> <output id="isk"></output> <output id="zuzahlen"></output> Fracht: <input type="text" id="fracht2" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht(this);"> <output id="fracht-msg"></output><br> <output id="output3"></output> </form> -
So ist es richtig mit den Code-Tags.
Sie dir noch mal meinen Post Nr. 17 an, dort wird die Funktion inputFracht() definiert und dies musst Du in dein Javascript übernehmen:HTML
Alles anzeigen<!DOCTYPE HTML><html> <head> <title>Untitled</title> </head> <body> <script> function convert(val) { var msgAbove = "Zu Groß"; var msgBelow = "Perfekt"; var limit = 150000000; val = (val.replace(",", ".") * 500).toFixed(2); var msgfield = document.getElementById("zuzahlen"); if (val > limit) msgfield.innerHTML = msgAbove; else msgfield.innerHTML = msgBelow; str = val.toString().replace(".", ","); var pos = str.indexOf(","); var result = "", i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; return result; } function inputFracht(inp) { var msgBelow = "Nachricht fuer unterhalb Limit1"; limit1 = 200; var msgLimit1 = "Nachricht fuer oberhalb Limit1"; limit2 = 500; var msgLimit2 = "Nachricht fuer oberhalb Limit2"; var val = inp.value.replace(",", "."); var outp = document.getElementById("fracht-msg"); if (val >= limit2) outp.innerHTML = msgLimit2; else if (val >= limit1) outp.innerHTML = msgLimit1; else outp.innerHTML = msgBelow; } </script> <form oninput="isk.value = convert(fracht.value);"> Frachtgroesse<br> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?"><br> <input type="reset" value="Löschen" /> <br> Isk zu zahlen:<br> <output id="isk"></output> <output id="zuzahlen"></output> </form> <style> #fracht:invalid { border: 2px solid red; } </style> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht(this);"> <output id="fracht-msg"></output> </body> </html> -
Dein Fehler ist offenbar, dass Du die Funktion inputFracht nicht in das Javascript übernommen hast.
Wenn Du Code postest, solltest Du die Code-Buttons in der Werkzeugleiste oberhalb des Eingabefeldes für eine Antwort verwenden: #, <?, SQL, CSS, <>, JS.
In deinem letzten Posting wurde dasals BB-Code für Italic interpretiert und verschluckt - etwas, das häufig vorkommt, wenn keine Code-Tags verwendet werden.
-
Soll das jetzt die frühere Abfrage nach dem Wert und die Ausgabe von Meldungen ersetzen?
HTMLFracht: <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht(this);"> <output id="fracht-msg"></output>JavaScript
Alles anzeigenfunction inputFracht(inp) { var msgBelow = "Nachricht fuer unterhalb Limit1"; limit1 = 200; var msgLimit1 = "Nachricht fuer oberhalb Limit1"; limit2 = 500; var msgLimit2 = "Nachricht fuer oberhalb Limit2"; var val = inp.value.replace(",", "."); var outp = document.getElementById("fracht-msg"); if (val >= limit2) outp.innerHTML = msgLimit2; else if (val >= limit1) outp.innerHTML = msgLimit1; else outp.innerHTML = msgBelow; }Wenn es noch mehr Abstufungen für die Werte geben soll, müsste man das besser auf ein Array umstellen.
Das Forum verschluckt z. T. die Zeilenumbrüche. Scrolle im HTML nach rechts. -
Was meinst Du mit "unterem Feld"? Das Feld, in dem die Zahl eingegeben wird, bzw. der Wert vor der Multiplikation?
-
Habe es jetzt mal so implementiert, wie ich es verstanden habe. Außerdem habe ich für das Eingabefeld eine saubere Validierung eingebaut. Prüfe mal, ob es das ist, was Du dir vorgestellt hast.
Code
Alles anzeigen<script> function convert(val) { var msgAbove = "Zu zahlen: xxx Euro"; var msgBelow = "Zu zahlen: yyy Euro"; var limit = 5000; val = (val.replace(",", ".") * 500).toFixed(2); var msgfield = document.getElementById("zuzahlen"); if (val > limit) msgfield.innerHTML = msgAbove; else msgfield.innerHTML = msgBelow; str = val.toString().replace(".", ","); var pos = str.indexOf(","); var result = "", i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; return result; } </script> <form oninput="isk.value = convert(fracht.value);"> Frachtgroesse<br> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?"><br> <input type="reset" value="Löschen" /> <br> Isk zu zahlen:<br> <output id="isk"></output> <output id="zuzahlen"></output> </form> <style> #fracht:invalid { border: 2px solid red; } </style>