[PHP] de if en else if vervangen door actions

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Ik heb een script waarin een aantal acties aangeroepen worden uit een functie lijst. Ik verwerk deze nu door middel van if/if else.
geen probleem zou je zeggen.

Maar er komen in de toekomst meer functies bij wat ervoor gaat zorgen dat het erg lastig word om overzicht te behouden.
Het script gaat gebruikt worden door mijn opdracht gever dus die zal er later ook graag aan willen sleutelen. Nu heb ik gehoord dat ik met behulp van 'actions' de if-jes kan vervangen. Maar ik heb geen idee hoe en waar ik op moet zoeken om de oplossing te vinden. al heb ik dat natuurlijk traditie getrouw al wel gedaan, maar dan krijg ik alleen maar gebazel over de Method Post en Get..en dat wil ik volgens mij niet
De kennis die ik heb is net iets beter dan de basis..dus een duidelijk uitleg zou erg prettig zijn.

hier een stukje van de code

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Bericht toevoegen als er op de knop 'bericht opslaan' wordt gedrukt
if ($REQUEST_METHOD=="POST") {
    if ($onzin==1) {
        
        myInsertScheld ($fout_tekst, $goed_tekst);  
    
    } elseif ($id!=""){
        adminEdit ($id, $naam, $email, $bericht, $commentaar);
    
    } else{
    myInsert ($naam, $email, $bericht, $ip, $email_tonen);
    }
}

// Bericht verwijderen als je op 'verwijderen' drukt
if ($did){
adminDelete($did);
}

// Scheldwoord en bijbehorende vervanging verwijderen als je op 'verwijderen'  drukt
if ($del_scheld){
adminDeleteScheld($del_scheld);
}


// Bericht bewerken als je op 'bewerken' drukt
if ($eid){
$getdata2=mysql_query("SELECT * FROM gastenboek_berichten WHERE id = $eid");
$data2=mysql_fetch_array($getdata2);
}


alvast bedankt..
ooh en ik verwacht niet een kant en klare oplossing maar een aantal duidelijke tips of voorbeelden zou erg prettig zijn.

[ Voor 20% gewijzigd door WebTwister op 03-03-2004 13:18 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Het lijkt me handig om het ongeveer als volgt te doen: $switch :)

Even op php.net kijken en bij elke case: kun je bepalen wat er gebeurt, bijvoorbeeld op basis van de via $_POST binnengekomen informatie. Je zou bij grotere scripts bij elke case een include kunnen opnemen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

X-Lars schreef op 03 maart 2004 @ 11:44:
Het lijkt me handig om het ongeveer als volgt te doen: $switch :)

Even op php.net kijken en bij elke case: kun je bepalen wat er gebeurt, bijvoorbeeld op basis van de via $_POST binnengekomen informatie. Je zou bij grotere scripts bij elke case een include kunnen opnemen.
Switch kan alleen als het om dezelfde variabele gaat.
PHP:
1
2
3
4
5
6
if ($a == 1)
  //bla
elseif ($a == 2)
  //bla
elseif ($a == 3)
  //bla

Dit kan vervangen worden door:
PHP:
1
2
3
4
5
switch ($a) {
  case 1: /*doe iets*/ break;
  case 2: /*doe iets*/ break;
  case 3: /*doe iets*/ break;
}


Maar het volgende kan niet met een switch:
PHP:
1
2
3
4
5
6
7
8
9
10
    if ($onzin==1) {
        
        myInsertScheld ($fout_tekst, $goed_tekst);    
    
    } elseif ($id!=""){
        adminEdit ($id, $naam, $email, $bericht, $commentaar);
    
    } else{
    myInsert ($naam, $email, $bericht, $ip, $email_tonen);
    }

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

I know, maar je moet je script dan ook zo bouwen dat dat wel kan (bijvoorbeeld met hidden fields o.i.d.). Het lijkt me an sich namelijk wel de juiste constructie. Maar goed dat je het even meldt.

Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
oke... *switch* is dus het magische word. nou bedankt voor de snelle reactie en ik ga er gelijk weer mee aan de slag. ik laat in de loop van de dag even weten of het allemaal lukt en kom ik er niet uit weet ik jullie te vinden ;)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

X-Lars schreef op 03 maart 2004 @ 11:51:
I know, maar je moet je script dan ook zo bouwen dat dat wel kan
Das niet altijd even makkelijk, maar ik zou het inderdaad ook gewoon met een case gedaan hebben. Wellicht dat de topicstarter doordat hij het switch commando niet kende de structuur niet op de goede manier overdacht heeft en dat het aan te passen is. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
NMe84 schreef op 03 maart 2004 @ 11:49:
[...]

Switch kan alleen als het om dezelfde variabele gaat.
PHP:
1
2
3
4
5
6
if ($a == 1)
  //bla
elseif ($a == 2)
  //bla
elseif ($a == 3)
  //bla

Dit kan vervangen worden door:
PHP:
1
2
3
4
5
switch ($a) {
  case 1: /*doe iets*/ break;
  case 2: /*doe iets*/ break;
  case 3: /*doe iets*/ break;
}


Maar het volgende kan niet met een switch:
PHP:
1
2
3
4
5
6
7
8
9
10
    if ($onzin==1) {
        
        myInsertScheld ($fout_tekst, $goed_tekst);    
    
    } elseif ($id!=""){
        adminEdit ($id, $naam, $email, $bericht, $commentaar);
    
    } else{
    myInsert ($naam, $email, $bericht, $ip, $email_tonen);
    }
Je kunt dit wel met switch doen. Je kunt namelijk ook op true evalueren:
PHP:
1
2
3
4
5
6
7
8
switch(true){
     case($aap=='chimpansee'):
          echo "Het is een chimpansee";
     break:
     case($aap=='baviaan'):
           echo "het is een baviaan";
     break;
}

[ Voor 68% gewijzigd door beetle71 op 03-03-2004 12:21 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Dat is een aardige tip beetle71, had ik nog niet aan gedacht.

In de veronderstelling dat TS met form(s) werkt, lijkt het mij het herschrijven zeker waard. Ook omdat het script nu vast nog niet van grote omvang is.

Simpel voorbeeld: Zoekfunctie hier rechtsonder, radio buttons om te kiezen waar je wilt zoeken en in inputfield "Zoeken:" de zoekstring. In je case "GoT": gaat-ie lekker hier zoeken, anders op Google, etc.

[ Voor 4% gewijzigd door X-Lars op 03-03-2004 12:24 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

beetle71 schreef op 03 maart 2004 @ 12:20:
Je kunt dit wel met switch doen. Je kunt namelijk ook op true evalueren:
PHP:
1
2
3
4
5
6
7
8
switch(true){
     case($aap=='chimpansee'):
          echo "Het is een chimpansee";
     break:
     case($aap=='baviaan'):
           echo "het is een baviaan";
     break;
}
Das waar, maar dat vind ik (persoonlijk dus :P) net zo rommelig als een if..elseif..else constructie. Ik probeer het meestal toch met een 'nette' switch op te lossen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
NMe84 schreef op 03 maart 2004 @ 12:17:
[...]

Das niet altijd even makkelijk, maar ik zou het inderdaad ook gewoon met een case gedaan hebben. Wellicht dat de topicstarter doordat hij het switch commando niet kende de structuur niet op de goede manier overdacht heeft en dat het aan te passen is. :)
Kende idd deze optie niet en ben daarom zo te werk gegaan, maar nu ik ook een reactie van beetle heb gezien blijkt toch dat er een andere mogelijkheid is dus ga ik daar ook even naar kijken..

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Ik denk dat de TS er goed aan doet om ook even na te denken op de manier van de switch :) Dus probeer eens zoiets:
PHP:
1
2
3
4
5
6
7
if (...) $action = post;
elseif (...) action = edit;
elseif (...) action = postOnzin;

switch ($action){
case 'post'
}
Dan is je logica al een stukje beter gescheiden :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
nou ik ben er bijna uit..ik heb mijn script wat aangepast.

ik heb aan mijn bestaande 'oproepregels' waar ik de variabel $eid of $did mee geef een ander variabel mee namelijk &action='bewerk' enzovoorts..

nu heb ik dan deze switch.. maar als ik de functie aanroep..gebeurt er niets? wat kan dat dan zijn?

dit is de switch
PHP:
1
2
3
4
5
switch (action){ 
  case verwijder: "gbAdminDelete ($id)"; break; 
  case bewerk: "gbAdminEdit ($id, $naam, $email, $bericht, $commentaar)"; break; 
  case plaatsen: "gbInsert ($naam, $email, $bericht, $ip, $email_tonen)"; break; 
}


Als ik op de optie verwijderen van een bericht klik krijg ik netjes deze url:
../gastenboek/gastenboek.admin.beta.php?did=35&action='verwijder'

en dit zijn de functies
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Gebruiker
//Plaatst bericht in de DB
  function gbInsert ($naam, $email, $bericht, $ip, $email_tonen){
    mysql_query("INSERT INTO gastenboek_berichten (id, datum, naam, email, bericht, commentaar, ip, email_tonen) 
    VALUES (NULL, NULL, '$naam', '$email', '$bericht', NULL, '$ip', '$email_tonen')");
}


//Admin
// Verwijderd bericht uit de DB
function gbAdminDelete ($id){
mysql_query("DELETE FROM gastenboek_berichten WHERE id = $did");
}

// Wijzigen van bericht
function gbAdminEdit ($id, $naam, $email, $bericht, $commentaar){
mysql_query("UPDATE gastenboek_berichten 
SET naam = '$naam', email = '$email', bericht = '$bericht', commentaar='$commentaar' WHERE id = '$id'");
}

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Volgens mij mogen er geen spaties tussen functies / parameters:
[php]
function gbAdminDelete($id){
[/php]
Dat geldt dan natuurlijk ook voor de aanroep ervan.


Edit: uiteraard, die quotes moeten daar weg, zoals in de post hieronder. Was me niet direct opgevallen.

[ Voor 27% gewijzigd door X-Lars op 05-03-2004 16:15 ]


Acties:
  • 0 Henk 'm!

  • bigben04
  • Registratie: December 2001
  • Laatst online: 30-08 20:47
Als ik goed begrijp wat je wil, moet je van:
PHP:
1
2
3
4
5
6
7
<?
switch (action){ 
  case verwijder: "gbAdminDelete ($id)"; break; 
  case bewerk: "gbAdminEdit ($id, $naam, $email, $bericht, $commentaar)"; break; 
  case plaatsen: "gbInsert ($naam, $email, $bericht, $ip, $email_tonen)"; break; 
}
?>


dit maken:

PHP:
1
2
3
4
5
6
7
<?
switch ($action){ 
  case "verwijder": gbAdminDelete ($id); break; 
  case "bewerk": gbAdminEdit ($id, $naam, $email, $bericht, $commentaar); break; 
  case "plaatsen": gbInsert ($naam, $email, $bericht, $ip, $email_tonen); break; 
}
?>


X-Lars: Dat maakt niet uit, volgens mij mag je het zelfs op de volgende regel zetten als je dat wil.

edit: Inderdaad, de $ miste ook nog...

[ Voor 37% gewijzigd door bigben04 op 05-03-2004 17:05 ]


Acties:
  • 0 Henk 'm!

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Nou dat is het dus niet ;)

Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

Domme vraag, maar ben je niet gewoon de $ voor action vergeten in je switch statement?

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

ATS schreef op 05 maart 2004 @ 16:52:
Domme vraag, maar ben je niet gewoon de $ voor action vergeten in je switch statement?
Nogal ja. En inderdaad ook de quotes om de strings bij de cases zelf. 2 fouten dus. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1