Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP: Php muuttujan arvoista

Sivun loppuun

Clacier [20.01.2010 17:45:32]

#

Helppo ratkasu varmaan.

eli, vieraskirjaan pistetään kommentteja omalla nimimerkillä.


kuintekin jotkut peelot laittavat myös viestejä nimimerkkillä "Admin", ja ärsyttävät.


tähän itse kehitin sellaisen "salakoodin" jolla koodin abc123 saa vaihdettua Adminiksi, mutta siihen tarvisin vielä semmosen lisäyksen että jos joku postaa nimellä "Admin" se vaihtuu vaikka pelleksi.

<?php
  if($nick == "abc123"){
    $nick = "Jorma";
}

kokelin itse lisätä jotenkin näin elseiffiä sinne:

<?php
  if($nick == "abc123"){
    $nick = "Admin";
}
  elseif($nick == "Admin"){
    $nick = "pelle";

kiitän avusta

Macro [20.01.2010 18:18:01]

#

elseif noin kirjoitettuna antaa minulla ainakin virheen. Oikea muoto on else if. Koitappas näin:

<?php
$nick = $_POST["nick"];
if($nick == "abc123") {
	$nick = "Admin";
} else if($nick == "Admin") {
	$nick = "Pelle";
}
?>

Clacier [20.01.2010 18:47:22]

#

jeesh. kiitti

jo123 [21.01.2010 11:20:06]

#

PHP:ssä se on kyllä "elseif", eikä "else if". Se että "elseif" antaa Macrolla virheen on kyllä kovin omituinen juttu... xD Nähtävästi kuitenkin "else if":kin toimii, joten hällä väliä.

JoonasK [21.01.2010 11:25:08]

#

Switch-lause kunniaan.

<?php
$nick = $_POST['nick'];

switch($nick) {
	case 'abc123':
		$nick = 'Admin';
		break;
	case 'Admin':
		$nick = 'Pelle';
		break;
}
?>

Chiman [21.01.2010 11:25:15]

#

Ehkei Macro ymmärtänyt lisätä puuttuvaa aaltosulkua loppuun.

Muoks: Jos korvattavia nimimerkkejä on useita, tekisin itse arraylla:

<?php

$nick = "Admin";

$korvaukset = array("abc123" => "Admin",
                    "Admin" => "Pelle");
if (array_key_exists($nick, $korvaukset)) {
    $nick = $korvaukset[$nick];
}

JoonasK [21.01.2010 11:56:06]

#

<?php

$nick = $_POST['nick'];

$nickit = array(array('Admin', 'abc123'), array('Pelle', 'Admin'));
$nick = str_replace($nickit[0], $nickit[1], $nick);

?>

Kaipa tän voi aika monella tapaa tehdä, ole varuillasi jos käytät tuota postaamaani sillä:

<?php

// Tulostaa F:n koska A korvataan B:llä, B korvataan C:llä, jne...
// F tulee siis siksi koska arvot on laitettu järjestykseen vasemmalta oikeelle
// (Sama koodinpätkä php.net:stä)
$search  = array('A', 'B', 'C', 'D', 'E');
$replace = array('B', 'C', 'D', 'E', 'F');
$subject = 'A';
echo str_replace($search, $replace, $subject);

?>

Macro [21.01.2010 14:13:15]

#

jo123 kirjoitti:

PHP:ssä se on kyllä "elseif", eikä "else if". Se että "elseif" antaa Macrolla virheen on kyllä kovin omituinen juttu... xD Nähtävästi kuitenkin "else if":kin toimii, joten hällä väliä.

Molemmat ovat oikein manuaalin mukaan.

Chiman kirjoitti:

Ehkei Macro ymmärtänyt lisätä puuttuvaa aaltosulkua loppuun.

En voinut edes kuvitella, että joku saa aikaan noin tyhmän virheen eikä osaa korjata. Kun virheestä ei mainittu mitään, niin tein sen miten se omalla palvelimellani toimi.

Metabolix [21.01.2010 14:25:48]

#

jo123 kirjoitti:

PHP:ssä se on kyllä "elseif", eikä "else if".

PHP:ssä on todella erillinen sana elseif. Ei kuitenkaan ole millään tavalla väärin kirjoittaa else if, jossa siis on else-lohko ja sen sisällä if-lause. Ilmaisuilla ei sinänsä ole mitään eroa, mutta jos käytetään PHP:n vaihtoehtoista syntaksia, täytyy muistaa sisentää jälkimmäinen if-lause:

<?php
// Yhteen:
if ($a > $b):
    echo "Jee!\n";
elseif ($a == $b):
    echo "Joo.\n";
endif;

// Erikseen:
if ($a > $b):
    echo "Jee!\n";
else:
    if ($a == $b):
        echo "Joo.\n";
    endif;
endif;

vehkis91 [21.01.2010 14:51:58]

#

mikä ihmeen endif? mistä lähtien tuollaista on php:ssä käytetty? Vai onko kyseessä php.net?

RQ [21.01.2010 15:05:52]

#

vehkis91 kirjoitti:

mikä ihmeen endif? mistä lähtien tuollaista on php:ssä käytetty? Vai onko kyseessä php.net?

https://www.php.net/manual/en/control-structures.alternative-syntax.php

jo123 [21.01.2010 22:03:12]

#

Ja miksi ihmeessä täytyy olla "kaikki mahdolliset" syntaksit mahdollisia? On se php ihme kieli... :D

Edit: Mahtaakohan muuten "elseif":n ja "else if":n nopeuksissa olla eroja? :p

tsuriga [21.01.2010 22:28:13]

#

Mainittu vaihtoehtoinen syntaksi on selkeä, kun sekoitetaan sivupohjaan yksinkertaisia PHP-lausekkeita, ts. templateissa.

<?php if (isAdmin()): ?>
<ul>
 <?php foreach ($users as $user): ?>
 <li><?php echo $user; ?></li>
 <?php endforeach; ?>
</ul>
<?php endif; ?>

Elseif vaikuttaisi olevan minimaalisesti nopeampi (10000 kiekkaa, ~5ms), mutta sen tuoma tärkeämpi etu on koodin selkeys.

jo123 [21.01.2010 22:38:53]

#

tsuriga kirjoitti:

, mutta sen tuoma tärkeämpi etu on koodin selkeys.

Tämäkin etu on kyllä tasan yhtä minimaalinen.

Edit: No myönnetään ehkä että se on kaksi jo123:n tärkeysyksikköä tärkeämpi. O.O

tsuriga [21.01.2010 23:22:03]

#

Katsopa uudestaan Metabolixin esimerkkiä ja mieti eroa koodin sisennyksissä vaikkapa jo toisen elseif/else if:n kohdalla, varsinkin jos ollaan jo valmiiksi metodin sisällä. Toki voidaan argumentoida, että toimintalogiikkaa olisi jo ehkä aika jakaa useammalle toimitsijalle (funktio/metodi/luokka) jos sisennystasoja alkaa olla hankalan paljon. Molemmat merkintätavat ovat syntaksiltaan aivan hyväksyttyjä, mutta semanttisestihan nämä eroavat toisistaan. Else if:n käyttö on hyvin perusteltua, kun halutaan suorittaa jokin toiminto aina kun ei päästä ensimmäisen vertailulohkoon sisään. Elseif-rakenteella tuo toiminto jouduttaisiin toistamaan koodissa. Esim.:

<?php

/* else if */
if ($id === 1) {
    echo 'Admin';
} else {
    // Suoritetaan em. toiminto
    echo 'Not an admin';

    if ($id === 2) {
        echo '... but an admin in training!';
    }
}

/* elseif */
if ($id === 1) {
    echo 'Admin';
} elseif ($id === 2) {
    echo 'Not an admin';
    echo '... but an admin in training!';
} else {
    echo 'Not an admin'; // turhaa toistoa
}

?>

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta