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>

add else statement to to your If(file_exist)

on like 38 add something like

else {
    echo 'File SongOrganizer/songs.txt Not Found';
    die();
}

or also add on line 8, before this line $SongArray = file("SongOrganizer/songs.txt");

echo 'File Found, Continue Execution';

That way, you will know if the file has been found or not. You should also add Error handler in all of your IF Statement to make your if they execute or not

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.