12. april 2004 - 12:20Der er
46 kommentarer og 1 løsning
Hvor mange gange kan jeg bruge "else"?
Hejsa.. Jeg har denne dejlige vidunderlige kode *S* Jeg har lavet et "bot-system" på en meget NEM måde..
Jeg har lavet det sådan at den tjekker nogle ord hvis de ikke er rigtige bruger den "else" og hvis de ER rigtige laver den en funktion som siger dem..
Men mit problem er at man skal kunne sige flere forskellige ting til min bot og han skal svare forskelligt.. så ville det være næmest at bruge nogle flere "else" - Men kan man det??
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Men måske skulle du overveje at bruge en switch i stedet.
// ved brug af if og elseif: if($i == 1){ echo "i er lig med 1"; }elseif($i == 2){ echo "i er lig med 2"; }elseif($i == 3){ echo "i er lig med 3"; }
// ved brug af switch: switch($i){ case 1: echo "i er lig med 1"; break; case 2: echo "i er lig med 2"; break; case 3: echo "i er lig med 3"; break; }
Statements i en switch-sætning bliver kun udført hvis der findes en 'case' der passer til det angivne udtryk ($i her). Altså - hvis du i ovenstående sætter $i til f.eks. 4, vil ingen af dem udføres. Hvis der derimod findes en case som passer til $i, så fortsætter PHP med at eksekvere statements indtil slutningen af switch-sætningen, eller indtil den møder et 'break' statement. Hvis man derfor ikke tilføjer et break statement i slutningen af en case, så bliver de eventuelle efterfølgende cases også udført.
mysql_query("INSERT INTO chat (mes,fra,til,time,rum,vaerelse) VALUES('$mes','$username','$til','time()','{$row_info['rum']}','{$row_info['vaerelse']}')"); mysql_query("INSERT INTO chat (mes,fra,til,time,rum,vaerelse) VALUES('Chatten er ejet af direktøren','Piccolo','$til','time()','{$row_info['rum']}','{$row_info['vaerelse']}')");
1. Du kan ikke lave flere if's efter hinanden (se mit eksempel) 2. Du kan ikke lave en elseif uden at tjekke et udtryk, ligesom du ikke kan lave en if uden at tjekke et udtryk.
De tre ovenstående eksempler er herunder beskrevet med en abstraktion på godt dansk:
//eksempel 1 hvis (dette udtryk er sandt) { ... så udfør dette }
//eksempel 2 hvis (dette udtryk er sandt) { ... så udfør dette } ellers { ... så udfør dette }
//eksempel 3 hvis (dette udtryk er sandt) { ... så udfør dette } ellers hvis (dette udtryk er sandt) ... så udfør dette } ellers { ... så udfør dette }
dvs. default: // Er null print "Jeg fatter ikke hvad du siger";
Det kunne jeg egentlig godt putte min del af koden ind.. (Altså den hvor han IKKE går efter hvad man siger til bot'en.. Altså hvis ingen af ordene matcher mine $respondTo[BOT_GREETING][] osv?
> Dennismp, nu går det lidt for stærkt ;) Er lidt lost... Man kan da "snakke" men den går ikke helt efter kommandoerne... Hvis jeg fkes bare skriver "test" så skriver den "hej kasper" selvom den bare skulle skrive "test" fordi test ikke er nogen "kommando"
mysql_query("INSERT INTO chat (mes,fra,til,time,rum,vaerelse) VALUES('$mes','$username','$til','time()','{$row_info['rum']}','{$row_info['vaerelse']}')"); mysql_query("INSERT INTO chat (mes,fra,til,time,rum,vaerelse) VALUES('Det gør direktøren','Piccolo','$til','time()','{$row_info['rum']}','{$row_info['vaerelse']}')");
Koden er hermed smidt ind og den første fejl er konstateret ;D
Når jeg fkes. skriver: "Hvem ejer chatten" så svare botten korrekt nok.. Men hvis jeg bare skriver "test" som IKKE er nogen kommando den burde reagere på.. (dvs. ganske alm chat hvor bot'en bare skal holde mund" så skriver den: 'Hej $username'
Den skal kun skrive "'Hej $username'" Hvis jeg siger hej til den.. Så hvis jeg skriver "test" eller "letmælk" skal jeg SELV skrive teksten det skal bot´'en ike gøre en pind ved... det skal den faktisk bare ignorere hvis det ikke er nogle af de "magiske ord"
mysql_query("INSERT INTO chat (mes,fra,til,time,rum,vaerelse) VALUES('$reply','$username','$til','time()','{$row_info['rum']}','{$row_info['vaerelse']}')");
Forøvrigt skelner den ikke mere mellem stor og små i mine "gyldne spørgsmål" jeg skal skrive det direkte som det står i "boksne" $respondTo[BOT_GREETING][]
Så fint så godt *S* :) Den reagere på stort og småt.. Den svare når man spørger om ejer og siger hej til den.. Men så er der lige en ting mere.. Hvis man skriver "mælk" "ost" eller andet chat som botten ikke skal blande sig i er den rapkæftet ;)
"Hej Kasper" Hej Kasper.. Og sådan bliver den ved hvergang jeg siger noget :(
kig på linjerne 14-20 - der skriver den hvad der kommer ind (både via javascript og indsætter i databasen). Det kan være du skal fjerne noget af det (enten javascript eller database, eller begge) - jeg kender ikke dit system godt nok til at kunne sige hvad der er rigtigt..
14-20 - Der uploader den det i databasen jeg SELV Siger som bruger..
Nej den gentager ikke det jeg siger! Altså hvis jeg skriver fkes: "dennis er vist rå til php" Så svare den mig: "Hej $Username" Selvom at: "dennis er vist rå til php slet ikke er nogen kommando den skulle reagere på... Altså hvis teksten ikke står i $respondTo, så er det at jeg bare vil have bot'en til at holde mund
Havde jeg glemt.. Det har jeg gjort nu.. MEEEN! (Lykken er ikke kommet endnu)
Når jeg spørger den om $respondTo[BOT_OWNER][] = 'hvem ejer chatten?'; $respondTo[BOT_OWNER][] = 'hvem er ejer af chatten'; $respondTo[BOT_OWNER][] = 'hvem ejer chatten';
Så svarer den overhovedet ikke.. Kun det jeg spørger om der kommer frem.. Men jeg kan godt sige hej til den hvor den svarer og jeg kan godt chatte alm. uden at den siger hej nu.. Bare lige hvorfor den ikke svare på:
$respondTo[BOT_OWNER][] = 'hvem ejer chatten?'; $respondTo[BOT_OWNER][] = 'hvem er ejer af chatten'; $respondTo[BOT_OWNER][] = 'hvem ejer chatten';
mysql_query("INSERT INTO chat (mes,fra,til,time,rum,vaerelse) VALUES('$reply','Piccolo','$til','time()','{$row_info['rum']}','{$row_info['vaerelse']}')");
BOT_GREETING er 1 og BOT_OWNER er 2. se på denne linje; for($i=0;($i< count($respondTo)) && ($found === null);$i++) { Der bruger den 0 og 1. så derfor få den aldrig set på den sidste i array'et.
Hurtig løsning ville være at tilføje: $respondTo[0][] = '';
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.