<script language="javascript">
var lagerstatus = '<?=$item_data['ID1']['in_stock'];?>';
if (lagerstatus == "j" || lagerstatus == "J") {
document.write("<p>Produkten finns i lager");
if (lagerstatus == "n" || lagerstatus == "N" ) {
document.write("<p>Produkten finns EJ i lager");
}
if (lagerstatus == "") {
document.write("<p>Status saknas");
}
}
</script>
Jag kan inte se vad jag gör för fel.
Sen hade jag tänkt mig en igenkänning av datum i lagerstatusvariabeln. Formatet är ÅÅÅÅ-MM-DD. Kan en så annorlunda (jämfört med "j", "n" och "") sträng användas i en if-sats?
Ledel: för att jag inte vet tyvärr. Ser jag hur man gör en sådan if-sats i PHP _och_ hur man stoppar in php-kod i en sida (såvida man inte gör på annat sätt än <? ... ?>).
Ericz: PHP koden gör inte mycket mer än att den printar ut värden, tex något av följande: j, J, n, N, "" (alltså inget), eller ett datum med formatet 2009-10-22.
Det är bar ett värde alltså.
Du har placerat ett } fel. Flytta det sista } till efter document.write("<p>Produkten finns i lager");.
Sen kanske du utöver det har skräptecken i strängen Prova:
alert("x<?=$item_data['ID1']['in_stock'];?>x");
Om alerten säger något i stil med x Jx så har du ett extra mellanslag i strängen. Säger den t ex xJx så har du bara J'et.
Du kan också göra så här:
var lagerstatus = "<?=$item_data['ID1']['in_stock'];?>";
switch(lagerstatus){
case 'j':
case 'J':
document.write("<p>Produkten finns i lager");
break; // OBS viktigt! Annars fortsätter koden rakt ner till nästa alternativ!
case 'n':
case 'N':
document.write("<p>Produkten finns EJ i lager");
break; // OBS viktigt! Annars fortsätter koden rakt ner till nästa alternativ!
case '':
document.write("<p>Status saknas");
break; // OBS viktigt! Annars fortsätter koden rakt ner till nästa alternativ!
default: // Om inget av de andra alternativen matchar
document.write("<p>Beräknat lagerdatum: " + lagerstatus);
}
Denna kod kan även skrivas i PHP:
<?PHP
$lagerstatus = $item_data['ID1']['in_stock'];
switch($lagerstatus){
case 'j':
case 'J':
echo "<p>Produkten finns i lager";
break; // OBS viktigt! Annars fortsätter koden rakt ner till nästa alternativ!
case 'n':
case 'N':
echo "<p>Produkten finns EJ i lager";
break; // OBS viktigt! Annars fortsätter koden rakt ner till nästa alternativ!
case '':
echo "<p>Status saknas";
break; // OBS viktigt! Annars fortsätter koden rakt ner till nästa alternativ!
default: // Om inget av de andra alternativen matchar
echo "<p>Beräknat lagerdatum: " + $lagerstatus;
}
?>
Jag hoppas för din egen skull att du har ett </p> efter koden. Annars kommer kod-tomten och slår dig på fingrarna. (Ett <p> måste stängas med ett </p>)
Nu kan jag dessvärre inte PHP något vidare, men följande översatta kod bör puffa dig i rätt riktning :) (Om du vill göra det i PHP vill säga)
<?php
$inStock = strtolower($item_data['ID1']['in_stock']);
if ($inStock == 'j')
{
echo "<p>Produkten finns i lager";
}
else if ($inStock == 'n')
{
echo "<p>Produkten finns EJ i lager";
}
else if ($inStock == '')
{
echo "<p>Status saknas";
}
?>
Ett alternativ är annars att köra en switch-sats!
EDIT: Var visst tvåa, och nitro2k01 förslår en switchsats!
Tack båda!
Jag förstår nu varför min kod inte funkade.
Och även tack för PHP exemplen; det ser ju inte så svårt ut. Kanske ska jag hädanefter gå över från Javascript till PHP.
Skulle ni rekommendera mig en sådan övergång? Är det för att PHP är serverside, att besökaren inte ser hur koden är gjord, eller har du andra skäl till att rekommendera PHP framför JS?
Och så undrar jag skillnaden mellan if / else if och switch lösningen. Är det för att i samma veva bunta ihop flera likvärdiga val, tex j/J/y/Y?
Vad gäller PHP istället för javascript skulle man ju kunna säga att PHP är att föredra eftersom:
* Besökaren kanske inte har javascript aktiverat
* Använder du PHP skriver du bara ut det besökaren behöver se (I lager, Ej i lager osv), vilket sparar bandbredd och lite prestanda åt besökaren
* Det ger dig fler möjligheter.
Skillnaden på en switch och en if-sats är att en switch jämför samma variabel mot flera olika värden (vilket är ju det du gör). Därför blir det enklare att använda switch än att skriva en lång if-sats.
Okej, då vet jag. Det är bara det att break-raden upplever jag som gammaldags. Var det inte så man gjorde på basic-tiden och jag minns när jag tog lektioner i lite modernare programmeringsspråk så sa man att man hädanefter aldrig mer gör så, då det finns andra sätt att jobba på.
Så detta var bara min reaktion och därför upplevde jag som att if-metoden var "modernare".
Nitro: jag förstår att den bryter hela scriptet, stämmer det? Så om man har flera script, ska man då precis som i javascript skapa funktioner som alltså ramar in dem?
förresten, det var lite fel i anvisningen. Det ska visst vara så här:
echo "<p>Beräknat lagerdatum: $lagerstatus";
Nja... break agerar bara lokalt inom en switch-sats. Anledningen att man behöver break är för att case-satserna inte stoppar körningen. Skulle du inte ha break någonstans i koden ovan skulle koden köra rakt ner till sista raden inom switch och du skulle få tillbaka "<p>Beräknat lagerdatum: ..." oavsett värde på variabeln. Varför designa systemet så att man alls behöver break? Varför inte låta varje alternativ köras var för sig, och sen stoppas vid nästa case?
Det första svaret på det är att då skulle man inte kunna gruppera ihop alternativ som det går med break, utan koden för likadana alternativ skulle behöva upprepas för varje alternativ. Så är det i ASP t ex. Där skulle koden ha fått se ut typ så här:
SELECT CASE lagerstatus
CASE 'Y'
Response.Write "<p>Produkten finns i lager"
CASE 'y'
Response.Write "<p>Produkten finns i lager"
CASE 'N'
Response.Write "<p>Produkten finns INTE i lager"
CASE 'n'
Response.Write "<p>Produkten finns INTE i lager"
CASE ''
Response.Write "<p>Status saknas"
CASE ELSE
Response.Write "<p>Beräknat lagerdatum: " & lagerstatus
END SELECT
Med reservation för att det kanske går att göra bättre i ASP, samt att min exempel-kod kan innehålla fel. Det jag vill visa är bara att man principen att man inte kan gruppera alternativ på samma sätt.
Andra anledningen är att man kan använda mer avancerade strukturer, där man drar nytta av att koden kör vidare, och att man ibland kanske inte vill ha break. Typ:
$antal_ut = 0;
switch($antal_in){
case 3:
$antal_ut++:
case 2:
$antal_ut++:
case 1:
$antal_ut++:
case 0:
break;
case 7:
$antal_ut = "seven";
break;
default:
$antal_ut = "Invalid";
}
echo $antal_ut;
Det exemplet är visserligen värdelöst i praktiken, men visar principen. Om $antal_in är 0,1,2,3 kommer $antal_ut få samma värde genom gradvis ökning, sedan hamnar man på break, och switchen avslutas. Är värdet 7 får man tillbaka "seven". Vid alla andra värden får man "Invalid".
Och du har rätt angående plustecknet. Det används bara för addition i PHP, inte strängsammanslagning. Jag kopierade ju bara koden och korrigerade vartefter. Det jag tänkte göra egentligen var att ersätta + med . som är vad som används för att slå ihop strängar. Men "<p>Beräknat lagerdatum: $lagerstatus" funkar så klart också.
Jag stötte på punkt innan på diverse tutorials, men det framgick inte så tydligt om det var som javascriptens plustecken.
En sista fundering; kan man påstå att PHP tar över javascipt i och med ovannämna resonemang?
Det finns säkert fall där man vill fortsätta med javascript antar jag. Fast så finns ju numera ajax.. nå, jag låter er som kan svara på min fråga :)
För att uttrycka sig enkelt. Det du har gjort hittills är att använda Javascript som ett fulhack för att du inte visste hur man gör det du vill i PHP. Inget fel med Javascript, men var sak på sin plats.
135 ms totalt · 3 externa anrop · v20260731065814-full.55e59744