Audio in php
Je moet er iets van maken als "https://domeinnaam.tld/Muziek/AMP3/Artiest%20-%20Liedje.mp3". Hoe moet een browser (anders dan misschien Internet Explorer of Edge) het anders snappen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
session_start();
if(isset($_SESSION['username']))
{
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="../../sidebar3.css">
<link rel="icon" href="../../../../../favicon.ico" type="image/x-icon"/>
<title>Muziek A</title>
</head>
<body>
<div id="container">
<div id="sidebar">
<ul>
<li><a href= "../../userhome.php">Home</a></li>
<li><a href= "0.php">0</a></li>
<li><a href= "1.php">1</a></li>
<li><a href= "2.php">2</a></li>
<li><a href= "3.php">3</a></li>
<li><a href= "4.php">4</a></li>
<li><a href= "5.php">5</a></li>
<li><a href= "6.php">6</a></li>
<li><a href= "7.php">7</a></li>
<li><a href= "8.php">8</a></li>
<li><a href= "9.php">9</a></li>
<li><a href= "A.php">A</a></li>
<li><a href= "B.php">B</a></li>
<li><a href= "C.php">C</a></li>
<li><a href= "D.php">D</a></li>
<li><a href= "E.php">E</a></li>
<li><a href= "F.php">F</a></li>
<li><a href= "G.php">G</a></li>
<li><a href= "H.php">H</a></li>
<li><a href= "I.php">I</a></li>
<li><a href= "J.php">J</a></li>
<li><a href= "K.php">K</a></li>
<li><a href= "L.php">L</a></li>
<li><a href= "M.php">M</a></li>
<li><a href= "N.php">N</a></li>
<li><a href= "O.php">O</a></li>
<li><a href= "P.php">P</a></li>
<li><a href= "Q.php">Q</a></li>
<li><a href= "R.php">R</a></li>
<li><a href= "S.php">S</a></li>
<li><a href= "T.php">T</a></li>
<li><a href= "U.php">U</a></li>
<li><a href= "V.php">V</a></li>
<li><a href= "W.php">W</a></li>
<li><a href= "X.php">X</a></li>
<li><a href= "Y.php">Y</a></li>
<li><a href= "Z.php">Z</a></li>
</ul>
<div id="sidebar-content" style="height: 50px"></div>
</div><!--
--><div id="content">
<a href ="index.php"></a>
<?php
require_once "connectionmuziek.php";
$sql = "SELECT * FROM amp3 ORDER BY id ASC";
$res = mysqli_query($conn, $sql);
//print_r ($res);
if(mysqli_num_rows($res)> 0)
{
while($images = mysqli_fetch_assoc($res))
{
//print_r ($images);
?>
<div class = "alb">
<audio controls>
<source src="http://localhost:8080/website/Muziek/AMP3/<?php echo file_exists($images['mp3data']); ?>" type="audio/mpeg"><!--MP3, -->
</audio>
<?php echo $images['Mp3Naam']; ?><!--Titelliedje-->
</div>
<?php }
}
?>
</body>
</html>
<br>
<div id="main-content" style="height: 1800px"></div><br><br>
<?php
}
else
{
echo "<script>location.href='inlog.php'</script>";
}
?><br>
session_start();
if(isset($_SESSION['username']))
{
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="../../sidebar3.css">
<link rel="icon" href="../../../../../favicon.ico" type="image/x-icon"/>
<title>Muziek A</title>
</head>
<body>
<div id="container">
<div id="sidebar">
<ul>
<li><a href= "../../userhome.php">Home</a></li>
<li><a href= "0.php">0</a></li>
<li><a href= "1.php">1</a></li>
<li><a href= "2.php">2</a></li>
<li><a href= "3.php">3</a></li>
<li><a href= "4.php">4</a></li>
<li><a href= "5.php">5</a></li>
<li><a href= "6.php">6</a></li>
<li><a href= "7.php">7</a></li>
<li><a href= "8.php">8</a></li>
<li><a href= "9.php">9</a></li>
<li><a href= "A.php">A</a></li>
<li><a href= "B.php">B</a></li>
<li><a href= "C.php">C</a></li>
<li><a href= "D.php">D</a></li>
<li><a href= "E.php">E</a></li>
<li><a href= "F.php">F</a></li>
<li><a href= "G.php">G</a></li>
<li><a href= "H.php">H</a></li>
<li><a href= "I.php">I</a></li>
<li><a href= "J.php">J</a></li>
<li><a href= "K.php">K</a></li>
<li><a href= "L.php">L</a></li>
<li><a href= "M.php">M</a></li>
<li><a href= "N.php">N</a></li>
<li><a href= "O.php">O</a></li>
<li><a href= "P.php">P</a></li>
<li><a href= "Q.php">Q</a></li>
<li><a href= "R.php">R</a></li>
<li><a href= "S.php">S</a></li>
<li><a href= "T.php">T</a></li>
<li><a href= "U.php">U</a></li>
<li><a href= "V.php">V</a></li>
<li><a href= "W.php">W</a></li>
<li><a href= "X.php">X</a></li>
<li><a href= "Y.php">Y</a></li>
<li><a href= "Z.php">Z</a></li>
</ul>
<div id="sidebar-content" style="height: 50px"></div>
</div><!--
--><div id="content">
<a href ="index.php"></a>
<?php
require_once "connectionmuziek.php";
$sql = "SELECT * FROM amp3 ORDER BY id ASC";
$res = mysqli_query($conn, $sql);
//print_r ($res);
if(mysqli_num_rows($res)> 0)
{
while($images = mysqli_fetch_assoc($res))
{
//print_r ($images);
?>
<div class = "alb">
<audio controls>
<source src="http://localhost:8080/website/Muziek/AMP3/<?php echo file_exists($images['mp3data']); ?>" type="audio/mpeg"><!--MP3, -->
</audio>
<?php echo $images['Mp3Naam']; ?><!--Titelliedje-->
</div>
<?php }
}
?>
</body>
</html>
<br>
<div id="main-content" style="height: 1800px"></div><br><br>
<?php
}
else
{
echo "<script>location.href='inlog.php'</script>";
}
?><br>
Het is handig om niet lukraak wat te proberen, maar door te kijken hoe het werkt.
Hier sla je nu al compleet de plank mee mis. Lees even op www.php.net/file_exists
Ik neem aan dat je de player wilt tonen als een bestand bestaat. Als zou deze brakke constructie werken (terwijl er eigenlijk een if-statement bij hoort), blijf je die player behouden met een lege naam, wat nog niks opschiet.
Dus:
Toevoeging op 19/12/2022 15:56:51:
Als ik nog wat tips mag geven:
- Bouw je script op dat je een een lijst.php hebt, waarbij je met GET een specifieke letter op kan geven.
Zoals: lijst.php?letter=A, waarna je alles met een A ziet. Pas je SELECT-query aan met een LIKE, en haal alles op wat met $_GET['letter'] begint. Denk ook aan SQL-injectie preventie!
- Gebruik range("A","Z") (http://php.net/range) om het alfabet in een array te zetten. Een foreach is vervolgens voldoende om 26 verschillende URL"s te genereren. Herhaal dit ook met je cijfers.
- Pas de file_exists() goed toe. Maar dat had ik al uitgelegd ;-)
- Haal de excessief gebruikte enters weg. Het is bij het posten hier niet echt zinvol.
Meteen komt dit uit bij een huishoudelijke mededeling: We zien we ook liever relevante code bij een probleem. Dus geen 100 regels, maar iets van 3 tot 10. Dat maakt het topic veel leesbaarder.
- Pas goede foutafhandeling toe op je query.
- En wat doen die br's en div na je html-sluittag?
- De Javascript location kan je beter vervangen door een PHP location header. Zolang je maar geen HTML ervoor output. Als je logisch nadenkt dan kan dat prima.
Als je alles toepast zal je script veel fijner en logischer werken.
Gewijzigd op 19/12/2022 16:02:14 door - Ariën -
Toevoeging op 20/12/2022 15:02:45:
Het essentiële stukje code. Iemand een idee?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<audio controls>
<source src="http://localhost:8080/root/website/Muziek/AMP3/
<?php
if (file_exists($images['mp3data']))
{
echo "Toon player hier!";
}
; ?>" type="audio/mpeg"><!--MP3, -->
</audio>
<?php echo $images['Mp3Naam']; ?><!--Titelliedje-->
<source src="http://localhost:8080/root/website/Muziek/AMP3/
<?php
if (file_exists($images['mp3data']))
{
echo "Toon player hier!";
}
; ?>" type="audio/mpeg"><!--MP3, -->
</audio>
<?php echo $images['Mp3Naam']; ?><!--Titelliedje-->
Op ben je meer van copy/pasten?
In dat laatste geval gaat het echt niet lukken, zo!
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<div class = "alb">
<audio controls>
<source src="http://localhost:8080/root/website/Muziek/AMP3/
Toon player hier!" type="audio/mpeg"><!--MP3, -->
</audio>
1 Az Yet - Last Night.mp3<!--Titelliedje-->
</div>
<audio controls>
<source src="http://localhost:8080/root/website/Muziek/AMP3/
Toon player hier!" type="audio/mpeg"><!--MP3, -->
</audio>
1 Az Yet - Last Night.mp3<!--Titelliedje-->
</div>
Toevoeging op 20/12/2022 15:42:45:
en ps ik heb van mp3data Mp3data gemaakt dat lost wel undefined index op maar kost mijn probleem nog niet op
Je moet begrijpen wat je doet.
Weten wat er gebeurt!
Erbij stil staan.
Heb je al die echo gezien in mijn code?
Heb je al gedaan wat er stond?
Niet gek, dat je opeens deze gare output ziet:
Code (php)
1
2
2
<source src="http://localhost:8080/root/website/Muziek/AMP3/
Toon player hier!" type="audio/mpeg">
Toon player hier!" type="audio/mpeg">
Wat vind je zelf van dit pad?
http://localhost:8080/root/website/Muziek/AMP3Toon player hier!
Gewijzigd op 20/12/2022 15:51:23 door - Ariën -
Toevoeging op 20/12/2022 15:57:04:
Maar dat maakt niet uit en dat kun je ook niet weten
Toevoeging op 20/12/2022 16:05:13:
Ik snap hem gewoonweg niet!
Toevoeging op 20/12/2022 16:22:13:
Als ik op F5 duw dan is het driehoekje even zwart grjjsd daarna uit. Dat is ook een gedeekte van het probleem?
Maar om te beginnen vereist programmeren toch echt ook het belangrijke aspect logisch nadenken. Iedereen komt er wel, je moet steeds meer de logica inzien in wat je wilt, wat je doet en wat er vervolgens gebeurt. Bij de een wordt de leercurve snel opgepakt, en bij de ander duurt het nu eenmaal wat langer.
Ik heb het idee dat je momenteel op het punt zit dat je niet echt door hebt hoe HTML precies werkt, en wat je script precies doet. Ik zie je op het laatste punt eindigen met de vraag: "Wat doet het pad?" Daarin hoor je in jouw situatie de locatie van je MP3-bestand aan te geven tussen die dubbele quotes, en niet een loze tekst met 'Toon player hier!' Die tekst staat er enkel om duidelijk te maken wat daar moet gebeuren. Als je het logisch op een rijtje zou zetten dan had je gezien dat je op die plek de HTML-code van je player zou tonen, en niet het pad. En als je HTML goed begreep, dan had je kunnen zien dat die tekst er niet tussen hoorde. Ook zie ik niet dat je gebruik lijkt te maken van de documentatie op php.net omdat je file_exists() gewoon zo maar ergens neer plakt, zonder te weten op welke manier je dat moet doen.
Misschien is dit script wat je bouwt wel te hoog gegrepen. Ik weet niet waar en hoe je begonnen bent met het leren van PHP. Maar ik ben er haast zeker van dat het niet als een goede start begonnen is.
Ik raad je aan om dit script in de ijskast te stoppen. En opnieuw te beginnen met PHP, en losse proefopdrachtjes te maken. Probeer deze te combineren met eerder aangeleerde kennis uit de vorige hoofdstukken. Ook is het handig om commentaarblokken te gebruiken zodat je later zelf kan zien wat er gebeurt in je script. En gebruik ook vooral de www.php.net handleiding en sla deze op in je bookmarks. En neem vooral de tijd. PHP leer je echt niet in een paar dagen!
Als je lang genoeg oefent, dan kom je er zeker!
Dus stop liever met huidige script, en begin bij het begin:
Als je na speuren er nog niet uitkomt, dan kan je altijd op PHPhulp terecht voor vragen.
Gewijzigd op 20/12/2022 16:26:55 door - Ariën -
Mijn advies om dit in de ijskast te stoppen staat nu eenmaal. En om deze reden sluit ik dit topic.
Ik hoop dat je inziet dat je niet op deze voet verder kan werken aan je script.
Veel succes verder, en mocht je nog eventuele vragen hebben met betrekking tot het leren van PHP, dan zien we die wel verschijnen.