[PHP] Stukjes code, met een paar vragen.

Pagina: 1
Acties:

  • sebastius
  • Registratie: September 2000
  • Laatst online: 09-09 19:18

sebastius

Laten we lekker link gaan doen

Topicstarter
Hieronder een stukje PHP wat ik heb geschreven. Het maakt van 8 bits (8 checkboxen) oftewel één byte, een decimale waarde. Dit is om later te gebruiken bij groepberichten, voor welke groep(en) het bestemd is. Mijn vraag is nu, kan het PHP gedeelte nog netter en compacter worden geschreven? Hebben jullie nog tips/trucs?
PHP:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?
<form name="form1" method="post" action="test_byte.php">
  <input type="checkbox" name="c0" value="1">
  <input type="checkbox" name="c1" value="1">
  <input type="checkbox" name="c2" value="1">
  <input type="checkbox" name="c3" value="1">
  <input type="checkbox" name="c4" value="1">
  <input type="checkbox" name="c5" value="1">
  <input type="checkbox" name="c6" value="1">
  <input type="checkbox" name="c7" value="1">
  <input type="submit" name="Submit" value="Bereken">
</form>

<?php

$e = array("c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7");

foreach ($e as $d) {
    if (empty($$d)) {
            $$d=0;
    }
}

/* Controleer eerst of de variabelen van de
checkboxen een waarde hebben, anders 0 geven. */

$a = array($c0, $c1, $c2, $c3, $c4, $c5, $c6, $c7);

$b = 0;

for ($c = 0; $c <= 7; $c++) {
    $b += $a[$c] * pow(2, 7-$c);
}

/* Maak nu uit de array met losse elementen met de
berekening $a[$c]*2^7-$c een waarde voor die ene bit,
en tel die bij $b op. Als de routine alle 8 de 
elementen heeft gehad, dan bevat $b de decimale 
waarde van de array $a */

echo "De byte ";

foreach ($a as $d) {
    echo $d;
}

echo " staat voor $b";

/* Een simpele routine om de byte te laten zien, 
en de waarde die erbij hoort.*/
?>

En hieronder nog een stukje PHP, om te kijken of een gebruiker dan wel genoeg rechten heeft om een document te openen (beide getallen zijn weer decimaal)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
if (empty($rechten)) {
            $rechten=0;
    }
if (empty($eisen)) {
            $eisen=0;
    }

if ($eisen==0 | $eisen &amp;amp;amp; $rechten) {
    ?>Het bericht mag getoond<?php
} else {
    ?>Het bericht mag niet getoond.<?php
}

/* 
Als de eis "0" is (iedereen) of als de rechten van de
gebruiker voldoende zijn, dan mag het bericht getoond
worden.
*/
?>

Hoe is dit voor een eerste poging? Weliswaar heel simpel, maar ik miste deze functies in PHP, dus heb ik ze zelf gemaakt. Misschien heb je er wat aan?

  • Joove
  • Registratie: Januari 2001
  • Laatst online: 12:38
waarom werk je eerst met bit en dan pas decimaal?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Op verzoek van |HunterPro| in #tweakers.net, een andere versie van hetzelfde:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
<html>
<body>
<form name="form1" method="post">
  <input type="checkbox" name="c0" value="1">
  <input type="checkbox" name="c1" value="2">  
  <input type="checkbox" name="c2" value="4">  
  <input type="checkbox" name="c3" value="8">  
  <input type="checkbox" name="c4" value="16">  
  <input type="checkbox" name="c5" value="32">  
  <input type="checkbox" name="c6" value="64">  
  <input type="checkbox" name="c7" value="128">  
  <input type="hidden" name="action" value="bereken">
  <input type="submit" name="Submit" value="Bereken">
</form>
<?php
  if($action=="bereken") {
    $waarde=$c0+$c1+$c2+$c3+$c4+$c5+$c6+$c7;
    print("Waarde: $waarde");
  }
?>
</body>
</html>
?>

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • HunterPro
  • Registratie: Juni 2001
  • Niet online
Op dinsdag 15 januari 2002 22:58 schreef Gerco het volgende:
Op verzoek van |HunterPro| in #tweakers.net, een andere versie van hetzelfde:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
<html>
<body>
<form name="form1" method="post">
  <input type="checkbox" name="c0" value="1">
  <input type="checkbox" name="c1" value="2">  
  <input type="checkbox" name="c2" value="4">  
  <input type="checkbox" name="c3" value="8">  
  <input type="checkbox" name="c4" value="16">  
  <input type="checkbox" name="c5" value="32">  
  <input type="checkbox" name="c6" value="64">  
  <input type="checkbox" name="c7" value="128">  
  <input type="hidden" name="action" value="bereken">
  <input type="submit" name="Submit" value="Bereken">
</form>
<?php
  if($action=="bereken") {
    $waarde=$c0+$c1+$c2+$c3+$c4+$c5+$c6+$c7;
    print("Waarde: $waarde");
  }
?>
</body>
</html>
?>
Geen fratsen, dat scheelt >:)

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Nou vooruit ik ga er nog een keer overheen: :P

Ik heb hier een stukje code voor jouw eerste probleem:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
<form name="form1" method="post">
  <input type="checkbox" name="c[]" value="1">
  <input type="checkbox" name="c[]" value="2">
  <input type="checkbox" name="c[]" value="4">
  <input type="checkbox" name="c[]" value="8">
  <input type="checkbox" name="c[]" value="16">
  <input type="checkbox" name="c[]" value="32">
  <input type="checkbox" name="c[]" value="64">
  <input type="checkbox" name="c[]" value="128">
  <input type="submit" name="Submit" value="Bereken">
</form>

<?php
    if (isset($Submit))
    {
        $decimal = array_sum($c);
        
        printf ("De byte %08d staat voor %d",decbin($decimal),$decimal);
    }
?>

Dit geeft dezelfde uitvoer als jouw scriptje en als extra feature heb ik toegevoegd, dat de tekst pas getoond wordt, wanneer het formpje gesubmit is.

Ik weet natuurlijk niet of het een probleem is, dat de namen en values van de checkboxen zijn veranderd. Door nml c[] als naam te kiezen, komt deze als array binnen in het PHP-script.
Op dinsdag 15 januari 2002 22:34 schreef sebastius het volgende:
Hoe is dit voor een eerste poging? Weliswaar heel simpel, maar ik miste deze functies in PHP, dus heb ik ze zelf gemaakt. Misschien heb je er wat aan?
Vrij aardig. Maak vooral veel gebruik van de documentatie op www.php.net voor functies zoals decbin of bindec ed.

Succes verder.

edit:

Eigenlijk moeten de waarden andersom, om het logisch te laten kloppen; linker-bit = 128, rechter-bit = 1.

  • *CableGuy*
  • Registratie: April 2001
  • Laatst online: 25-02 13:14
En ik ga er nog een keertje overheen. *D
OK, deze is misschien een beetje over-the-top, maar door de eerste $msb variabele te wijzigen krijg je het aantal gewenste bits. Volledig Dynamisch dus! En als klapper op de vuurpijl zorgt 'ie ook nog voor het juiste aantal voorloopnullen.

Veel plezier ermee...
PHP:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?
<html>
<head>
</head>
<body>
<form name='form1' method='post'>
  <table border="1" cellspacing="0" cellpadding="3">
    <tr align="center">
<?php
      // verander deze waarde voor het aantal bits
$msb = 32;

for($i = $msb-1 ; $i >= 0 ; $i--)
{
printf ("<td>\n\t<input type=\"checkbox\" name=\"bit[c%s]\" value=\"%s\">\n</td>", $i, pow(2,$i));
}
?>
    </tr>
    <tr align="center">
<?php

for($i = $msb-1 ; $i >= 0 ; $i--)
{
printf("\t<td>%s</td>\n", pow(2,$i));
}
?>
    </tr>
  </table>
  <input type="submit" name="Submit" value="Bereken">
</form>

<?php
$decimal = 0;

foreach($bit AS $value)
{
$decimal += $value;
}

$binary = decbin($decimal);
$lead = $msb - strlen($binary);
for($i = 0; $i < $lead; $i++)
$binary = "0".$binary;

printf ("Dec: %s equals Bin: %s",$decimal, $binary);

?>
</body>
</html>
?>

EOS 300 & EOS 300D + 18-55,28-80,75-300; iBook12", 1.33Ghz, 1Gb, 60Gb, BT+AX; XP3000+, 512Mb, 160Gb+250Gb, NEC 3500A; P3 750, 256Mb, 80Gb; Samsung LE32M61B


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op dinsdag 15 januari 2002 23:07 schreef RdeTuinman het volgende:
Ik heb hier een stukje code voor jouw eerste probleem:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
<form name="form1" method="post">
  <input type="checkbox" name="c[]" value="1">
  <input type="checkbox" name="c[]" value="2">
  <input type="checkbox" name="c[]" value="4">
  <input type="checkbox" name="c[]" value="8">
  <input type="checkbox" name="c[]" value="16">
  <input type="checkbox" name="c[]" value="32">
  <input type="checkbox" name="c[]" value="64">
  <input type="checkbox" name="c[]" value="128">
  <input type="submit" name="Submit" value="Bereken">
</form>

<?php
    if (isset($Submit))
    {
        $decimal = array_sum($c);
        
        printf ("De byte %08d staat voor %d",decbin($decimal),$decimal);
    }
?>

[....]
Source demolishing! :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
?>
<form name="form1" method="post">
<?php
  $bit=1;
  for ($t=1;$t<=8;$t++) {
    echo "<input type='checkbox' name='c[]' value='$bit'>";
    $bit=$bit*2;
  }
  echo "<input type='submit' name='Submit' value='Bereken'>";
  echo "</form>";
  if (isset($Submit))
  {
      $decimal = array_sum($c);
      
      printf ("De byte %08d staat voor %d",decbin($decimal),$decimal);
  }
?>

:+

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Het gaat bijna op een programmeer-wedstrijd lijken :D

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

ipv $value = 0;
kan je ook zeggen:
$value = (int)$value...

zo kan je je al wat loopjes besparen iig :)

Klaar voor een nieuwe uitdaging.


  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Fatality for dusty! >:)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
  for ($bit=128;$bit>=1;$bit/=2) {
    echo "<input type='checkbox' name='c[]' value='$bit'>";
  }
  echo "<input type='submit' name='Submit' value='Bereken'>";
  echo "</form>";
  if (isset($Submit))
  {
      $decimal = array_sum($c);
      printf ("De byte %08d staat voor %d",decbin($decimal),$decimal);
  }
?>

Met meteen de logische volgorde van de bits :P
Pagina: 1