I can't figure out what's wrong with this. The program works, but the deduplication doesn't work. The error I get is :
Notice: Undefined variable: SongToAdd in C:\ITEC315\htdocs\users\ramojumder0\Reinforcement Exercises\Ch. 6\R.E.6-1_SongOrganizer.php on line 54
Notice: Undefined variable: ExistingSongs in C:\ITEC315\htdocs\users\ramojumder0\Reinforcement Exercises\Ch. 6\R.E.6-1_SongOrganizer.php on line 54
Warning: in_array() expects parameter 2 to be array, null given in C:\ITEC315\htdocs\users\ramojumder0\Reinforcement Exercises\Ch. 6\R.E.6-1_SongOrganizer.php on line 54
Warning: fopen(SongOrganizer/songs.txt): failed to open stream: No such file or directory in C:\ITEC315\htdocs\users\ramojumder0\Reinforcement Exercises\Ch. 6\R.E.6-1_SongOrganizer.php on line 72
There was an error saving your message!
I bolded line 67 below, which is an if (in_array ) statement.
line 54 is:
if (in_array($SongToAdd, $ExistingSongs))
echo "<p>The song you entered already exists!<br />\n";
echo "Your song was not added to the list.</p>";
}
in_array wants an array for the second argument, which I have, so don't see the problem. Any suggestions?
<?php
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 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 file\n";
else
{
fwrite($SongStore, $NewSongs);
fclose($SongStore);
}
}
else
unlink("SongOrganizer/songs.txt");
}
}
if (isset($_POST['submit']))
{
$SongToAdd = stripslashes($_POST['SongName']) . "\n";
$ExistingSongs = array();
if (file_exists("SongOrganizer/songs.txt")
&& filesize("SongOrganizer/songs.txt") > 0)
{
$ExistingSongs = file("SongOrganizer/songs.txt");
}
}
// this is where it has a problem.
if (in_array($SongToAdd, $ExistingSongs))
{
echo "<p>The song you entered already exists!<br />\n";
echo "Your song was not added to the list.</p>";
}
else
{
$SongFile = fopen("SongOrganizer/songs.txt", "ab");
if ($SongFile === false)
echo "There was an error saving your message!\n";
else
{
fwrite($SongFile, $SongToAdd);
fclose($SongFile);
echo "Your song has been added to the list.\n";
}
}
if ((!file_exists("SongOrganizer/songs.txt"))
|| (filesize("SongOrganizer/songs.txt") == 0))
echo "<p>There are no songs in the list.</p>\n";
else
{
$SongArray = file("SongOrganizer/songs.txt");
echo "<table border=\"1\" width=\"100%\"
style=\"background-color:lightgray\">\n";
foreach ($SongArray as $Song)
{
echo "<tr>\n";
echo "<td>" . htmlentities($Song) . "</td>";
echo "</tr>\n";
}
echo "</table>";
}
?>
<!-- Display hyperlinks for the three functions in the switch statement
(Sort Ascending, Remove Duplicates, and Shuffle) -->
<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=Shuffle">
Randomize 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>