rgb control not working with ethernet shield

Hi everyone ,
I am eray , I am doing projects with ethernet shields but I have a some problem about this job

first of all I have a rgb led and I must change color rgb led through internet
for example when I press "red led" at web page firstly, code will go to arduino through ethernet shield and rgb led is red.
then when I press "red led" at web page secondly,rgb led will close.

Blue and green colors will apply to same situation : When I press "green led" at web page firstly, code will go to arduino through ethernet shield and rgb led is green.
then when I press "red led" at web page secondly,rgb led will close etc... but I could not do it
by the way,
I created variable names "counter" and whenever I send code ,counter must increase one by one but counter increases three by three or two by two .I guess that after I send the code from web page, it sends another code to renovate web page .
what is your opinion about that?

#include <SPI.h> 
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address 
byte ip[] = { 192, 168, 1, 177}; // IP address in LAN – need to change according to your Network address 
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router 
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask 
EthernetServer server(80); //server port

String readString; 
int redpin = 2; 
int greenpin =3;
int bluepin= 4;
int counter=0;
void setup(){

   
    pinMode(redpin,OUTPUT);
    pinMode(greenpin,OUTPUT);
    pinMode(bluepin,OUTPUT);
    //start Ethernet 
    Ethernet.begin(mac, ip, gateway, subnet); 
    server.begin(); 
}

void loop(){ 
    // Create a client connection 
    EthernetClient client = server.available(); 
    if (client) { 
        while (client.connected()) { 
            if (client.available()) { 
                char c = client.read();

                //read char by char HTTP request 
                if (readString.length() < 100) {

                    //store characters to string 
                    readString += c; 
                }

                //if HTTP request has ended– 0x0D is Carriage Return \n ASCII 
                if (c == 0x0D) { 
                    client.println("HTTP/1.1 200 OK"); //send new page 
                    client.println("Content-Type: text/html"); 
                    client.println();

                    client.println("<HTML>"); 
                    client.println("<HEAD>"); 
                    client.println("<TITLE> ARDUINO ETHERNET SHIELD</TITLE>"); 
                    client.println("</HEAD>"); 
                    client.println("<BODY>"); 
                    client.println("<hr>"); 
                    client.println("<hr>"); 
                    client.println("
"); 
                    client.println("<H1 style=\"color:green;\">ARDUINO ETHERNET SHIELD — LED ON/OFF FROM WEBPAGE</H1>"); 
                    client.println("<hr>"); 
                    client.println("
");

                    client.println("<H2><a href=\"/?redledon\"\">Turn On Red Led</a>
</H2>"); 
                    client.println("<H2><a href=\"/?greenledon\"\">Turn On Green Led</a>
</H2>");
                     client.println("<H2><a href=\"/?blueledon\"\">Turn On Blue Led</a>
</H2>");

                    client.println("</BODY>"); 
                    client.println("</HTML>");

                    delay(10); 
                    //stopping client 
                    client.stop();
                   
                   counter=counter+1;
                    
                    // control arduino pin 
                    if(readString.indexOf("?redledon") > 0) //checks for red led on 
                    {  
                        while(counter==1)
                        {
                        digitalWrite(redpin, HIGH); // set pin HIGH
                        digitalWrite(greenpin, LOW);  // set pin LOW
                        digitalWrite(bluepin, LOW); // set pin LOW
                        
                        }
                        while(counter==2)
                        {
                        digitalWrite(redpin, LOW); // set pin HIGH
                        digitalWrite(greenpin, HIGH);  // set pin LOW
                        digitalWrite(bluepin, LOW); // set pin LOW
                        delay(5000);
                        counter=0; // for counter reset
                        
                        }
      

                        
                    } 
                    else if(readString.indexOf("?greenledon") > 0) //checks for green led on  
                        {   while(counter==1)
                        {
                            digitalWrite(redpin, LOW); // set pin LOW
                            digitalWrite(greenpin, HIGH);  // set pin HIGH
                            digitalWrite(bluepin, LOW); // set pin LOW
                        }
                           while(counter==2)
                           {
                            
                        digitalWrite(redpin, LOW); // set pin HIGH
                        digitalWrite(greenpin, HIGH);  // set pin LOW
                        digitalWrite(bluepin, LOW); // set pin LOW
                        delay(5000);
                        counter=0; // for counter reset
                            
                            }
                        
                        }

                     else if(readString.indexOf("?blueledon") > 0) //checks for blue led on  
                        { 
                          while(counter==1)
                          {
                            digitalWrite(redpin, LOW); // set pin LOW
                            digitalWrite(greenpin, LOW);  // set pin LOW
                            digitalWrite(bluepin, HIGH); // set pin HIGH
                          }

                         while(counter==2)
                           {
                            
                        digitalWrite(redpin, LOW); // set pin HIGH
                        digitalWrite(greenpin, HIGH);  // set pin LOW
                        digitalWrite(bluepin, LOW); // set pin LOW
                        delay(5000);
                        counter=0; // for counter reset
                          
                        } 
                        }
                    //clearing string for next read 
                    readString="";

                } 
            } 
        } 
    } 
}

ethernetshiledrgb.ino (5.54 KB)

This statement

while(counter==1)
                          {
                            digitalWrite(redpin, LOW); // set pin LOW
                            digitalWrite(greenpin, LOW);  // set pin LOW
                            digitalWrite(bluepin, HIGH); // set pin HIGH
                          }

will execute forever since you never change the value of counter inside the while(). You probably need to use an if() statement there, not a while()

It might also be better to rename the variable since you are really counting with 'counter' but rather using it as a variable to control the led ON or OFF - maybe something like 'state' or ...