WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Else if sats (https://www.wn.se/forum/showthread.php?t=13062)

Iceyes 2006-03-20 23:27

Nu vet jag inte riktigt om det här är rätt forum att lägga upp den här typen av frågor,
men jag gör ett försök.
Har lite problem med med en else if sats här nedan syftet är att den ska skriva vad man gjort för fel om satsen inte går igenom och även se till att medelandet inte skickas.
Den skriver ut felmedelandena men den trots det skickar den upp allt till databasen.
nu är säkert det här jättelätt att lösa men jag är nybörjare inom php.

Kod:

if (isset($_POST['post'])) {
        $nick = strip_tags($_POST['nick']);
        $message = strip_tags($_POST['message']);
        $ip = $_SERVER['REMOTE_ADDR'];
        $nicklength = strlen($nick);
        $messagelength = strlen($message);
       
        if ($nicklength > 15) {
 echo 'Nickname was too long.';
 }
        elseif ($nicklength < 3) {
 } else {
  echo 'Nickname was too short.';
        }
        if ($messagelength > 200) {
 echo 'Message was too long.';
 }
        elseif ($messagelength < 5) {
 echo 'Message was too short.';
        }
        if (isset($nick) && empty($message)) {
 echo 'Please fill in both fields.';
        } 
        $nick = strip_tags($_POST['nick']);
        $message = strip_tags($_POST['message']);


Netikett 2006-03-20 23:38

if bla bla bla then

elseif bla bla bla then

else
'Här hamnar allt annat
End if

Lundstedt 2006-03-21 00:58

Anledning till ditt problem är att du säger bara åt scriptet att skriva ut text om det hittas några fel, men du säger inte åt det att samtidigt inte lägga in uppgifterna i databasen. Ett enkelt sätt du kan göra är att innan din a if-satser sätta $error = FALSE; och i varje if-sats, under felmeddelandet, sätta $error = TRUE;. När det väl är dags att skicka uppgifterna till databasen gör du:
Kod:

if ($error === FALSE) {
  ... kod som ska köras om inga fel hittats ...
}

Ett annan strategi, som jag ofta använder, är att stoppa varje felmeddelande i en vektor. Då kan du på slutet antingen godkänna uppgifterna eller lista ALLA fel. Ett exempel tillsammans med din kod skulle kunna vara följande för dina if-satser:
Kod:

if ($nicklength > 15) {
  $error[] = 'Nickname was too long.';
}
if ($nicklength < 3) {
  $error[] = 'Nickname was too short.';
}
if ($messagelength > 200) {
  $error[] = 'Message was too long.';
}
if ($messagelength < 5) {
  $error[] = 'Message was too short.';
}
if (isset($nick) && empty($message)) {
  $error[] = 'Please fill in both fields.';
}

Följande för att godkänna eller lista fel:
Kod:

if (count($error) == 0) {
  ... inga fel ...
} else {
  echo 'The following errors were found in your submission:';
  echo '<ul>';
  foreach ($error as $fel) {
    echo '<li>' . $fel . '</li>';
  }
  echo '</ul>'
}


Netikett 2006-03-21 01:02

Hmm. Jag missuppfattade tråden helt va? ;-)

Iceyes 2006-03-21 10:33

Tack Lundstedt ska testa det där så fort jag kommer hem.
Återkommer om det blir några problem :( vilket jag inte hoppas

Iceyes 2006-03-21 19:42

nu efter timmars grejande känns det som jag inte lyckas komma fram till nån lösning om inte annat har jag missuppfattat dig
jag testade flytta om koden osv det leder bara till alla möjliga problem
det här är det jag får att fungera bäst nu skickar den ingenting alls hur man än skriver men den skriver felmedelandena

Kod:

if (isset($_POST['post'])) {
        $nick = strip_tags($_POST['nick']);
        $message = strip_tags($_POST['message']);
        $ip = $_SERVER['REMOTE_ADDR'];
        $nicklength = strlen($nick);
        $messagelength = strlen($message);
}
       
if ($nicklength > 15) {
  $error[] = 'Nickname was too long.';
}
if ($nicklength < 3) {
  $error[] = 'Nickname was too short.';
}
if ($messagelength > 200) {
  $error[] = 'Message was too long.';
}
if ($messagelength < 5) {
  $error[] = 'Message was too short.';
}
if (isset($nick) && empty($message)) {
  $error[] = 'Please fill in both fields.';
}
if (count($error) == 0) {
} else {
  echo 'The following errors were found in your submission:';
  echo '<ul>';
  foreach ($error as $fel) {
    echo '<li>' . $fel . '</li>';
  }
  echo '</ul>';
}

Här är koden som går till databasen där även if ($error === FALSE) { ligger
Kod:

}if ($error === FALSE) {
        $ip = $_SERVER['REMOTE_ADDR'];
        if (($nick == $loginname) || ($message == $loginpass)) {
 mysql_connect($host, $user, $pass) or die ();
 mysql_select_db($name) or die ();
 $query = "SELECT nickname, message, id FROM shoutbox ORDER BY id DESC";
 $result = mysql_query($query);
 while ($res = mysql_fetch_array($result)) {
        echo '<b>'.$res[nickname].'</b>says:<br />'.$res[message].'<br /><form method="post" action=""><input type="submit" name="delete" value="Delete" /><input type="hidden" name="id" value="'.$res[id].'" /></form><hr width="90%" size="1" color="#000000" align="left">';
 }
        exit();
        }
        mysql_connect($host, $user, $pass) or die ();
        mysql_select_db($name) or die ();
        $query = "INSERT INTO shoutbox (nickname, message, ip) VALUES ('$nick','$message','$ip')";
        mysql_query($query);
 echo 'Thanks for the shout!<br /><br />';
        mysql_close();
        mysql_connect($host, $user, $pass) or die ();
        mysql_select_db($name) or die ();
        $query = "SELECT nickname, message FROM shoutbox ORDER BY id DESC";
        $result = mysql_query($query);
        while ($res = mysql_fetch_array($result)) {
 echo '<b>'.$res[nickname].'</b>says:<br />'.$res[message].'<hr width="90%" size="1" color="#000000" align="left">';
 }
} else {
        mysql_connect($host, $user, $pass) or die ();
        mysql_select_db($name) or die ();
        $query = "SELECT nickname, message FROM shoutbox ORDER BY id DESC";
        $result = mysql_query($query);
        while ($res = mysql_fetch_array($result)) {
 echo '<b>'.$res[nickname].'</b>says:<br />'.$res[message].'<hr width="90%" size="1" color="#000000" align="left">';
        }
}

Koden är väldigt rörig men men
hoppas någon vet vad som är fel

martine 2006-03-22 03:00

ja, lite rörigt...
Vad är poängen med att ha:
Citat:

or die ();
(i synnerhet om du har problem med koden är det ju bra att få felmeddelanden)
varför
Citat:

$error === FALSE
istället för if($error) …?
varför ha en tom if-sats
Citat:

if (count($error) == 0) {
} else {

istället för if(count($error)) { echo 'The following errors … eller if($error)

ps. snygg lösning med lista på fel man knappat in.

martine 2006-03-22 03:10

Citat:

Originally posted by Killen@Mar 21 2006, 00:38
if bla bla bla then

elseif bla bla bla then

else
'Här hamnar allt annat
End if

jag har en känsla av att du pratar asp och inte php...

Iceyes 2006-03-22 12:38

lyckades lösa problemet igenom att ersätta
Citat:

$error === FALSE }
med
Citat:

if (count($error) == 0)

bivald 2006-03-22 19:31

Om jag inte missat något vissentligt? Var validerar du din input (GET/POST)? strip_tags tar väl inte bort single/double quotes och således är det rätt lätt att köra en SQL injection?


Alla tider är GMT +2. Klockan är nu 16:15.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson