Autor Zpráva
laik
Profil *
Ahoj, pokúšam sa vyrobiť jeden autotester.. vytvoril som si funkciu na generovanie náhodnej IP
  function randomip(){
   $ip = array();
   for($i = 0; $i < 4; $i++) 
   { 
      $ip[] = rand(0,255); 
   } 
   return implode('.', $ip);
  }

následne chcem prvé číslo zaradiť k určitej hodnote cez funkciu:
          function Trieda($ip){
        $trieda = '';
        if($ip[0] > 0 && $ip[0] < 128) {
                $trieda = 'A';
              }            
        elseif($ip[0] > 127 && $ip[0] < 192) {
                $trieda = 'B';
              }            
        elseif($ip[0] > 191 && $ip[0] < 224) {
                $trieda = 'C';
              }
        elseif($ip[0] > 223 && $ip[0] < 240) {
                $trieda = 'D';
              }  
        elseif($ip[0] > 239 && $ip[0] < 256) {
                $trieda = 'E';
              } 
             return $trieda;
            }

Užívateľ potom vyberá nasledovne:
      <p>Vyber triedu siete:<select size="1" name="Trieda siete: ">
                            <option value='A'>A</option>
                            <option value='B'>B</option>
                            <option value='C'>C</option>
                            <option value='D'>D</option>
                            <option value='E'>E</option>
                            </select></p> 

potom chcem aby po odoslaní, užívateľovi napísalo či vybral správnu hodnotu.. (A, B.. atď)
vráti true alebo false..toto však už neviem správne urobiť.. vedeli by ste mi pomôcť?
Str4wberry
Profil
Budeš porovnávat $_POST["Trieda siete: "] s výstupem funkce Trieda.
BuGeR
Profil
laik:
Je to trochu mimo téma.
Podle tvé funkce random(), může být v IP adrese i číslo 0. Pokud tato situace nastane, tak jaká bude "třída"?
( if($ip[0] > 0 && $ip[0] < 128) )
laik
Profil *
BuGeR:
vďaka za postreh ;-)

Str4wberry:
ďakujem, urobil som to a myslím že by to malo fungovať..
problém však nastal, že po odoslaní na kontrolu sa vygeneruje zase ďalšia IP a tým nemôže fungovať kontrola údajov..

formulár mám riešený :
<form name="autotest" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">

bude treba zmeniť $_SERVER['PHP_SELF']; a odoslané údaje kontrolovať v inom súbori?
BuGeR
Profil
laik:
Není zač :-)
Str4wberry
Profil
Vypiš si tu IP adresu (přesněji řečeno její první oktet) do skrytého pole (<input type=hidden> a to potom předáš funkci Trieda na porovnání.
laik
Profil *
prototypne to vypadá takto.. všetky výpočty a porovnávania mi už funguju..doladovať to bude neskor

http://helpsiet.wz.cz/SOC/testet.php

tam nebude stačiť predať to do skryteho pola.. potrebujem tam dať niečo take, aby po odoslaní na skontrolovat nevygenerovalo nove udaje..
možem poskytnut aj cely php dokument
nightfish_
Profil *
laik:
prototypne to vypadá takto.. všetky výpočty a porovnávania mi už funguju
- mám pocit, že mícháš dohromady classful networking (třídy A..E) a CIDR (prefixy)
- adresa gateway není závislá na adrese sítě/prefixu, obvykle se volí .1 nebo .254, ale samozřejmě je možné si zvolit jakoukoliv platnou adresu z rozsahu

tam nebude stačiť predať to do skryteho pola.. potrebujem tam dať niečo take, aby po odoslaní na skontrolovat nevygenerovalo nove udaje..
při načítání stránky kontroluj, jestli byl formulář odeslán tlačítkem "Skontrolovat"
if (isset($_POST['submit1'])) {
  // proved kontrolu zadanych udaju
} else {
  // vygeneruj novou IP adresu
}
laik
Profil *
nightfish:
- mám pocit, že mícháš dohromady classful networking (třídy A..E) a CIDR (prefixy)
-nerozumiem čo máš konkrétne na mysli

při načítání stránky kontroluj, jestli byl formulář odeslán tlačítkem "Skontrolovat"

kontrolu vstupných údajov budem doladovať neskor

v kontrole odoslania mám toto:
<?php

         include ("functiontester.php");                                                              

             if (isset($_POST['submit1'])) {
            $triedasiete = $_POST['Triedasiete'];
            $maskav = array($_POST['maska1'], $_POST['maska2'], $_POST['maska3'], $_POST['maska4']);
            $sietv =  array($_POST['adrs1'], $_POST['adrs2'], $_POST['adrs3'], $_POST['adrs4']);
            $broadcastv = array($_POST['broadc1'], $_POST['broadc2'], $_POST['broadc3'], $_POST['broadc4']);
            $gatewayv = array($_POST['gat1'], $_POST['gat2'], $_POST['gat3'], $_POST['gat4']);
            
               echo ptrieda($ip, $triedasiete);
              echo pmaska($prefix, $maskav);
              echo psiet($sietv, $prefix, $ip, $maska);
              echo pbroadcast($broadcastv, $prefix, $ip, $maska);
                          echo pgateway($gatewayv, $prefix, $ip, $maska, $siet);            
            
       }
?>

vo functiontester.php mám funkcie pre výpočty a pre ich porovnania so vstupnými hodnotami..
cez tlacidlo skontrolovat chcem vlastne vyhodnotit test.. to sa podarí, lenže vygeneruje nové hodnoty do IP a prefix
nightfish_
Profil *
laik:
cez tlacidlo skontrolovat chcem vlastne vyhodnotit test.. to sa podarí, lenže vygeneruje nové hodnoty do IP a prefix
tak tu novou IP a prefix negeneruj v případě, že byl formulář odeslán tlačítkem "submit1"

- mám pocit, že mícháš dohromady classful networking (třídy A..E) a CIDR (prefixy)
-nerozumiem čo máš konkrétne na mysli
mám konkrétně na mysli to, že při zadání: IP adresa: 98.247.99.232, Prefix: 5 platí: IP adresa je z třídy A (0.0.0.0-127.255.255.255), ke které je (z definice) přiřazena maska sítě 255.0.0.0, tedy prefix 8 (a ne 5). Pokud tedy stanovíš prefix jinak, než je definován pro jednotlivé třídy (A - 8, B - 16, C - 24), tak používáš tzv. beztřídní adresování (classless inter-domain routing - CIDR), ve kterém nemá smysl nad jednotlivými třídami uvažovat.
laik
Profil *
nightfish:
tak tu novou IP a prefix negeneruj v případě, že byl formulář odeslán tlačítkem "submit1"

a to je ten môj problém, že neviem ako to urobiť..
v podmienke if (isset($_POST['submit1'])) {..

mám iba to čo som napísal vyššie..

celé to vyzerá takto:
<?php

 function GenerPrefix(){
  global $prefix;
  $prefix = 0;     
  $prefix = rand(1, 32);
  return $prefix;
}

   function randomip(){
    $ip = array();
    global $ip;
   for($i = 0; $i < 4; $i++) 
   { 
      $ip[] = rand(0,255); 
   } 
   return implode('.', $ip);
  }
  
 echo "<p>IP adresa: ".randomip()."</p>";
echo "<p>Prefix: ".GenerPrefix()."</p>";            

 ?>
    <form name="autotest" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
html výpis formulára...

 <?php
kontrola odoslania:
if (isset($_POST['submit1'])) {..
nightfish_
Profil *
if (isset($_POST['submit1'])) {
  // kontrola odoslania
  ...
} else {
  echo "<p>IP adresa: ".randomip()."</p>";
  echo "<p>Prefix: ".GenerPrefix()."</p>";            
 
  ?>
    <form name="autotest" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
html výpis formulára...
<?php
}
laik
Profil *
vďaka bolo to dobre myslené, len mojou chybou som zabudol podotknúť že chcem aby tam IP, prefix a html formulár zostali vypísané..
html formulár tam nechám tak, že zátvorku za else ukončím ešte pred formulárom, ale s tou IP a prefix sa v tomto riešení asi nebude dať vysporiadať
nightfish_
Profil *
laik:
vďaka bolo to dobre myslené, len mojou chybou som zabudol podotknúť že chcem aby tam IP, prefix a html formulár zostali vypísané..
tak si je přidej do formuláře jako pole typu hidden

celé to bude vypadat takto:
if (isset($_POST['submit1'])) {
  // kontrola odoslania
  echo "<p>IP adresa: ".$_POST['ip_adresa']."</p>";
  echo "<p>prefix: ".$_POST['prefix']."</p>";
  ...
} else {
  $ip_adresa = randomip();
  $prefix = GenerPrefix();
  echo "<p>IP adresa: ".$ip_adresa."</p>";
  echo "<p>Prefix: ".$prefix."</p>";            
 
   ?>
    <form name="autotest" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
html výpis formulára...
<input type='hidden' name='ip_adresa' value='<?php echo $ip_adresa;?>'>
<input type='hidden' name='prefix' value='<?php echo $prefix;?>'>
<?php
}
laik
Profil *
tak klobúk dole, obrovská vďaka !

trochu som to upravil nasledovne a nastal mi jeden problémik:
      else{
        global $ip_adresa;
        $ip_adresa = randomip();
        $prefix = GenerPrefix();
        echo "<p>IP adresa: ".$ip_adresa."</p>";
        echo "<p>Prefix: ".$prefix."</p>";
                                                                   

 ?>

     <form name="autotest" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
    <input type='hidden' name='ip_adresa' value='<?php echo $ip_adresa;?>'>
    <input type='hidden' name='prefix' value='<?php echo $prefix;?>'>                         

 <?php

    }   
?>

 html vypis...


že po odoslaní submit1, sa stane submit1 neaktívne (nedá sa naň viacej kliknúť) ..
nevedel by si poradiť ako odstrániť tento posledný problém?

chcem to takto, aby si užívatel ktorý sa testuje mohol po kontrole opraviť chybne udaje a znova odoslať na kontrolu...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0