Create a Song Organizer script that stores songs in a text file. Include functio
ID: 3671467 • Letter: C
Question
Create a Song Organizer script that stores songs in a text file. Include functionality that allows users to view the song list and prevents the same song name from being entered twice. Also, include code that sorts the songs by name, deletes duplicate entries, and randomizes the song list with the shuffle() function.
How Come my code isnt adding the song?
Formatted: http://pastebin.com/AgNRJB6Q
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://w...content-available-to-author-only...3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://w...content-available-to-author-only...3.org/1999/xhtml">
<head>
<title>PHP Code Blocks</title>
<meta http-equiv="content-type"
content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>Song Organizer</h1>
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
if (isset($_GET['action'])) {
if ((file_exists("SongOrganizer/songs.txt"))
&& (filesize("SongOrganizer/songs.txt")
!= 0)) {
$SongArray = file(
"SongOrganizer/songs.txt");
switch ($_GET['action']) {
case 'Remove Duplicates':
$SongArray = array_unique($SongArray);
$SongArray = array_values($SongArray);
break;
case 'Sort Ascending':
sort($SongArray);
break;
case ’Shuffle’:
shuffle($SongArray);
break;
} // End of the switch statement
if (count($SongArray)>0) {
$NewSongs = implode($SongArray);
$SongStore = fopen("SongOrganizer/songs.txt","wb");
if ($SongStore === false)
echo "There was an error updating the song le ";
else {
fwrite($SongStore, $NewSongs);
fclose($SongStore);
}
}
else
unlink("SongOrganizer/songs.txt");
}
}
if (isset($_POST['submit'])) {
$SongToAdd = stripslashes(
$_POST['SongName']) . " ";
$ExistingSongs = array();
if (file_exists("SongOrganizer/songs.txt")
&& filesize("SongOrganizer/songs.txt")
> 0) {
$ExistingSongs = file(
"SongOrganizer/songs.txt");
if (isset($_POST['submit'])) {
$SongToAdd = stripslashes($_POST['SongName']) . " ";
$ExistingSongs = array();
if (file_exists("SongOrganizer/songs.txt")
&& filesize("SongOrganizer/songs.txt")> 0) {
$ExistingSongs = file("SongOrganizer/songs.txt");
}
}
}
}
if ((!file_exists("SongOrganizer/songs.txt"))
|| (filesize("SongOrganizer/songs.txt")
== 0))
echo "<p>There are no songs in the
list.</p> ";
else {
$SongArray = file(
"SongOrganizer/songs.txt");
echo "<table border="1" width="100%"
> ";
foreach ($SongArray as $Song) {
echo "<tr> ";
echo "<td>" . htmlentities($Song) .
"</td>";
echo "</tr> ";
}
echo "</table> ";
}
?>
<p>
<a href="SongOrganizer.php?action=Sort%20Ascending">
Sort Song List</a><br />
<a href="SongOrganizer.php?action=Remove%20Duplicates">
Remove Duplicate Songs</a><br />
<a href="SongOrganizer.php?action=Shuf e">
Randomize Song list</a><br />
</p>
<form action="SongOrganizer.php" method="post">
<p>Add a New Song</p>
<p>Song Name: <input type="text" name="SongName"
/></p>
<p><input type="submit" name="submit"
value="Add Song to List" />
<input type="reset" name="reset"
value="Reset Song Name" /></p>
</form>
</body>
</html>
Explanation / Answer
Could you please try the below code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR...tml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Song Organizer</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>Song Organizer</h1>
<?php
// handle parameters in the URL
if (isset($_GET['action']))
{
if ((file_exists("SongOrganizer/songs.txt")) && (filesize("SongOrganizer/songs.txt") != 0))
{
$SongArray = file("SongOrganizer/songs.txt");
// menu for Deduplication, Sort, Shuffle
switch ($_GET['action'])
{
case 'Remove Duplicates':
$SongArray = array_unique($SongArray);
$SongArray = array_values($SongArray);
break;
case 'Sort Ascending':
sort($SongArray);
break;
case 'Shuffle':
shuffle($SongArray);
break;
} // end of switch statement
// save the song list after it has been modified
if (count($SongArray) > 0)
{
$NewSongs = implode($SongArray);
$SongStore = fopen("SongOrganizer/songs.txt", "wb");
if ($SongStore === false)
echo "There was an error updating the song file ";
else
{
fwrite($SongStore, $NewSongs);
fclose($SongStore);
}
}
else
unlink("SongOrganizer/songs.txt");
}
}
// read song file data into the $ExistingSongs array
if (isset($_POST['submit']))
{
$SongToAdd = stripslashes($_POST['SongName']) . " ";
$ExistingSongs = array();
if (file_exists("SongOrganizer/songs.txt") && filesize("SongOrganizer/songs.txt") > 0)
{
$ExistingSongs = file("SongOrganizer/songs.txt");
}
}
// check to see if the song name entered is already in the song list
// this is where it has a problem.
if (in_array($SongToAdd, $ExistingSongs))
{
echo "<p>The song you entered already exists!<br /> ";
echo "Your song was not added to the list.</p>";
}
// add new song to the list file
else
{
$SongFile = fopen("SongOrganizer/songs.txt", "ab");
if ($SongFile === false)
echo "There was an error saving your message! ";
else
{
fwrite($SongFile, $SongToAdd);
fclose($SongFile);
echo "Your song has been added to the list. ";
}
}
// display the song list, or empty message if song list is empty
if ((!file_exists("SongOrganizer/songs.txt")) || (filesize("SongOrganizer/songs.txt") == 0))
echo "<p>There are no songs in the list.</p> ";
else
{
$SongArray = file("SongOrganizer/songs.txt");
echo "<table border="1" width="100%"> ";
foreach ($SongArray as $Song)
{
echo "<tr> ";
echo "<td>" . htmlentities($Song) . "</td>";
echo "</tr> ";
}
echo "</table>";
}
?>
<!-- Show hyperlinks for the three functions in the switch statement (Sort, Remove Dups, Shuffle) -->
<p>
<a href="SongOrganizer.php?action=Sort%20Ascending">SortSong List</a><br />
<a href="SongOrganizer.php?action=Remove%20Duplicates">Remove Duplicate Songs</a><br />
<a href="SongOrganizer.php?action=Shuffle">Shuffle Song List</a><br />
</p>
<!-- web form for entering new song names into the song list -->
<form action="SongOrganizer.php" method="post">
<p>Add a New Song</p>
<p>Song Name: <input type="text" name="SongName" /></p>
<p><input type="submit" name="submit" value="Add Song to List" />
<input type="reset" name="reset" value="Reset Song Name" /></p>
</form>
</body>
</html>