Dan-Levi Skrevet 3. september 2013 Del Skrevet 3. september 2013 Hei! I denne tråden vil jeg at vi deler eksperimenter med hverandre. trenger ikke være noen store prosjekter. Lenke til kommentar
Dan-Levi Skrevet 3. september 2013 Forfatter Del Skrevet 3. september 2013 (endret) Begynner med første: Et script som generer 3000x3000 pseudotilfedig .PNG med litt morsom matte. header("Content-type: image/png"); $im = imagecreatetruecolor(3000, 3000) or die("Cannot Initialize new GD image stream"); $color = imagecolorallocate($im, rand(100,900), rand(100,900), rand(100,900)); for ($y = rand(1,10); $y < 3000; $y++) { for ($x = rand(1,10); $x < 3000; $x++) { if (rand(0, 1)) { imagesetpixel($im, $x, $y, $color); } } } imagepng($im); imagedestroy($im); Endret 3. september 2013 av Dan-Levi Lenke til kommentar
Dan-Levi Skrevet 3. september 2013 Forfatter Del Skrevet 3. september 2013 Et veldig enkelt spill hvor du skal gjette tallet mellom 1-10. PHP function roll ($sides) { return mt_rand(1,$sides); } function select($selname,$sides) { $selector = '<select name="'.$selname.'">'; $i = 1; while ($i <= $sides) { $selector .= '<option selected="selected" value="'.$i.'">'.$i.'</option>'; $i++; } $selector .= '</select>'; return $selector; } $computer = roll(10); if (!empty($_POST['choice']) == true) { $choice = $_POST['choice']; if (!is_numeric($choice)) { echo 'Not a integer'; } else { if ($choice == $computer) { echo 'You won!'; } else { echo 'You lost!'; } } } else { echo 'Choose a number'; } HTML <html> <head> <title></title> </head> <body> <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <?php echo select('choice',10) ?> <input type="submit"> </form> </body> </html> Lenke til kommentar
Dan-Levi Skrevet 3. september 2013 Forfatter Del Skrevet 3. september 2013 (endret) En til. Denne regner ut hvor mange år du fyller i år ut i fra fødselsdagen din. PHP function day() { $i = 1; $day = '<select name="day">'; while ($i <= 31) { $day .= '<option value="'.$i.'">'.$i.'</option>'; $i++; } $day .= '</select>'; return $day; } function month() { $i = 1; $month = '<select name="month">'; while ($i <= 12) { $month .= '<option value="'.$i.'">'.$i.'</option>'; $i++; } $month .= '</select>'; return $month; } function year() { $i = 2013; $year = '<select name="year">'; while ($i >= 1920) { $year .= '<option value="'.$i.'">'.$i.'</option>'; $i--; } $year .= '</select>'; return $year; } if (!empty($_POST['day']) == true && !empty($_POST['month']) == true && !empty($_POST['year']) == true) { $day = $_POST['day']; $month = $_POST['month']; $year = $_POST['year']; $birthDate = $day.'/'.$month.'/'.$year; $birthDate = explode('/', $birthDate); $age = (date('md', date('U', mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md") ? ((date("Y")-$birthDate[2])-1):(date("Y")-$birthDate[2])); if ($age === 0) { echo 'Velg bursdagen din.'; } else { echo 'Du fyller '.$age.utf8_decode(' år.'); } } else { echo 'Velg og kalkuler alder'; } HTML <html> <head> <title></title> </head> <body> <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <?php echo day(); echo month(); echo year(); ?> <input type="submit" value="Kalkuler alder"> </form> </body> </html> Endret 3. september 2013 av Dan-Levi Lenke til kommentar
Thorbear Skrevet 3. september 2013 Del Skrevet 3. september 2013 Begynner med første: Et script som generer 3000x3000 pseudotilfedig .PNG med litt morsom matte. header("Content-type: image/png"); $im = imagecreatetruecolor(3000, 3000) or die("Cannot Initialize new GD image stream"); $color = imagecolorallocate($im, rand(100,900), rand(100,900), rand(100,900)); for ($y = rand(1,10); $y < 3000; $y++) { for ($x = rand(1,10); $x < 3000; $x++) { if (rand(0, 1)) { imagesetpixel($im, $x, $y, $color); } } } imagepng($im); imagedestroy($im); Her savner jeg en liten beskrivelse av hva du kaller "morsom matte". Så vidt jeg kan se bruker du bare rand()-funksjonen for å velge ut én tilfeldig farge, deretter bruker du rand()-funksjonen for å velge hvilken rad du skal begynne på fra 1 til 10 (første rad vil altså alltid være uten farge), også nok en gang rand() for å finne ut hvilken kolonne du ønsker å begynne på, og nok en gang 1 til 10 (første kolonne vil alltid være uten farge). Til slutt bruker du rand() for å bestemme "50/50" om pikselen det er snakk om skal få farge. De vilkårlige verdiene du lager for farge er også litt feil, da du henter et tilfeldig tall mellom 100 og 900, mens funksjonen du bruker forventer verdier mellom 0 og 255. Om du ønsket å legge til litt morsom matte kunne du heller alltid startet med x og y lik 0, og heller gjort det mindre sannsynlig at en piksel ble farget nær kanten av bildet, for eksempel: header("Content-type: image/png"); $size = 3000; $im = imagecreatetruecolor($size, $size) or die("Cannot Initialize new GD image stream"); $color = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)); for ($y = 0; $y < $size; $y++) { for ($x = 0; $x < $size; $x++) { $sum = 0; $sum += ($x > $size/2) ? $size-$x : $x; $sum += ($y > $size/2) ? $size-$y : $y; if (rand(0, $sum) > $size/2) { imagesetpixel($im, $x, $y, $color); } } } imagepng($im); imagedestroy($im); Eventuelt kan man dra inn noe trigonometri for å få til en sirkel/kule-effekt. Mulig jeg kommer tilbake i morgen med kommentarer på de andre kodesnuttene også, eller deler noen helt nye :-) 1 Lenke til kommentar
Dan-Levi Skrevet 4. september 2013 Forfatter Del Skrevet 4. september 2013 (endret) Her savner jeg en liten beskrivelse av hva du kaller "morsom matte". Så vidt jeg kan se bruker du bare rand()-funksjonen for å velge ut én tilfeldig farge, deretter bruker du rand()-funksjonen for å velge hvilken rad du skal begynne på fra 1 til 10 (første rad vil altså alltid være uten farge), også nok en gang rand() for å finne ut hvilken kolonne du ønsker å begynne på, og nok en gang 1 til 10 (første kolonne vil alltid være uten farge). Til slutt bruker du rand() for å bestemme "50/50" om pikselen det er snakk om skal få farge. De vilkårlige verdiene du lager for farge er også litt feil, da du henter et tilfeldig tall mellom 100 og 900, mens funksjonen du bruker forventer verdier mellom 0 og 255. Om du ønsket å legge til litt morsom matte kunne du heller alltid startet med x og y lik 0, og heller gjort det mindre sannsynlig at en piksel ble farget nær kanten av bildet, for eksempel: header("Content-type: image/png"); $size = 3000; $im = imagecreatetruecolor($size, $size) or die("Cannot Initialize new GD image stream"); $color = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)); for ($y = 0; $y < $size; $y++) { for ($x = 0; $x < $size; $x++) { $sum = 0; $sum += ($x > $size/2) ? $size-$x : $x; $sum += ($y > $size/2) ? $size-$y : $y; if (rand(0, $sum) > $size/2) { imagesetpixel($im, $x, $y, $color); } } } imagepng($im); imagedestroy($im); Eventuelt kan man dra inn noe trigonometri for å få til en sirkel/kule-effekt. Mulig jeg kommer tilbake i morgen med kommentarer på de andre kodesnuttene også, eller deler noen helt nye :-) Den ble utrolig tøff den du postet tilbake! Jeg mente morsom matte fordi den er basert på random, men ser nå at det var noen feil der. Takk for at du tok tiden til å forklare! Endret 4. september 2013 av Dan-Levi Lenke til kommentar
trondes Skrevet 7. september 2013 Del Skrevet 7. september 2013 En til. Denne regner ut hvor mange år du fyller i år ut i fra fødselsdagen din. [....] Viktig å leke seg litt Du gjorde enkelte valg jeg ikke ville ha gjort. Litt tilbake meldinger til koden din, jeg sier ikke at det jeg nevner her er rett. Men for å utvikle oss må vi høre hva andre synes Du hardkodet inn årstallet i dag ( 2013 ) jeg ville ha brukt date("Y") så hadde den vært uptodate neste år også. Du bruker også while() der jeg ville ha brukt for( $i = 1; $i >=31; $i++ ) Du gjentar også litt kode her, nesten identisk 3 plasser. Liker ikke gjøre det selv Denne her forstår jeg ikke helt hvorfor du gjør: $birthDate = $day.'/'.$month.'/'.$year; $birthDate = explode('/', $birthDate); Er det ikke like greit å bruke $day osv lenger ? Hvis du absolutt skal ha dem inn i en array() gjør det slik: $birthDate = array( $day, $month, $year ); // da kan du bruke echo $birthDate[0]; // gir deg dagen Eller $birthDate = array( 'day'=>$day, 'month'=>$month, 'year'=>$year ); // der du kan bruke echo $birthDate['day']; Jeg liker heler ikke funksjoner som skriver ut noe ( echo / print ) for neste gang du skal bruke en av disse funksjonene du har laget deg. Så er det ikke sikkert du ønsker at innholdet skal bli skrevet ut. Bruk heler "return" og velg å echo'e det etter på. Jeg har også laget min versjon av denne koden. kom gjerne med spørsmål eller tilbakemeldinger hvis det er noe du lurer på hvorfor jeg valgte å gjøre det slik Du finner også en "live" versjon her: http://tronds.net/example/fodt.php Jeg har valgt å plassere alt inni en fil. <?php // sjekker om alle $_POST feltene er satt if( isset( $_POST['day'], $_POST['month'], $_POST['year'] ) ){ $day = $_POST['day']; $year = $_POST['year']; $month = $_POST['month']; // henter alderen $age = how_old( $day, $month, $year ); } else{ $age = 0; $day = 0; $year = 0; $month = 0; } // lager <option> for oss. function mk_option_value( $selected, $start, $stop){ $back = ""; // plusser på en ekstra her slik at den kan telle opp/ned til rett $stop tall if( $start < $stop ) $stop += 1; else $stop -= 1; for( $i = $start; $i != $stop; ( $start < $stop ?$i++:$i-- ) ){ $back .= '<option value="'.$i.'" '; if( $i == $selected ) $back .= ' selected '; $back .= '>'.$i.'</option>'; } return $back; } // regner ut hvor gammel personen er function how_old( $day, $month, $year ){ $age = date("Y")-$year; // finner ut hvor mange år if( time() < mktime( 0,0,0,$month, $day, date("Y"))) // hvis personen ikke har hatt bursdag enda, så fjerner vi et år. $age--; return $age; } ?> <html> <head> <title></title> <meta charset="UTF-8"> </head> <body> <h1>Hvor gammel er du hvis du var født i:</h1> <form method="POST" action=""> <select name="day"> <?php echo mk_option_value( $day, 1, 31); ?> </select> <select name="month"> <?php echo mk_option_value( $month, 1, 12); ?> </select> <select name="year"> <?php echo mk_option_value( $year, 1970, date("Y")); ?> </select> <input type="submit" value="Kalkuler alder"> </form> <?php if( $age >= 0 ) echo "<h1>Du er da ".$age."</h1>"; ?> </body> </html> 1 Lenke til kommentar
Dan-Levi Skrevet 16. september 2013 Forfatter Del Skrevet 16. september 2013 (endret) Enda en liten doodle, QR kode generator ved hjelp av Google Charts. HTML - index.html <form id="qrgenerator" name="qrgenerator" action="genqr.php" method="POST"> <label>Skriv inn data her</label> <input name="qrdata" type="text" placeholder="Skriv inn data her" /> <br> <br> <label>Størrelse</label> <select name="qrsize"> <option value="100x100">100x100</option> <option value="200x200">200x200</option> <option value="300x300">300x300</option> </select> <br> <input type="submit" value="Lag QR-kode" /> </form> <br> <div id="qrresult" /> <script src="http://ajax.googleapis.com/ajax/libs/jquery/latest/jquery.js" /> <script src="script.js" /> jQuery - script.js jQuery(document).ready(function() { $('#qrgenerator').submit(function() { var data = $('#qrgenerator').serialize(); $.ajax({ url: 'genqr.php', type: 'POST', data: data, }) .done(function(data) { $('#qrresult').html(data); }) return false; }); });</pre> PHP - genqr.php if (empty($_POST['qrdata'])) { echo 'Data empty'; } else { $qrsize = urlencode($_POST['qrsize']); $qrdata = urlencode($_POST['qrdata']); function getqr($qrsize, $qrdata){ $qrresult = '<img src="http://chart.apis.google.com/chart?chs='.$qrsize.'&cht=qr&chl='.$qrdata.'&choe=%20UTF-8&chld=M|0" />'; return $qrresult; } echo getqr($qrsize, $qrdata); Link til fungerende eksempel: http://www.dan-levi.no/qr/ Endret 16. september 2013 av Dan-Levi Lenke til kommentar
Dan-Levi Skrevet 19. september 2013 Forfatter Del Skrevet 19. september 2013 (endret) Hei, Enda en liten morsom sak jeg eksperimenterte med, dynamiske $_POST tilordnet dynamiske variabler. HTML <!DOCTYPE html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>POST</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <h1>POST</h1> <form method="POST" action="test.php"> <label>firstname</label> <br> <input type="text" name="firstname" /> <br><br> <label>lastname</label> <br> <input type="text" name="lastname" /> <br><br> <label>email</label> <br> <input type="email" name="email" /> <br><br> <label>street</label> <br> <input type="text" name="street" /> <br><br> <label>company</label> <br> <input type="text" name="company" /> <br><br> <label>phone</label> <br> <input type="text" name="phone" /> <input type="submit" value="POST" /> </form> </body> </html> PHP <?php // Sett opp Array $data = array(); $i = 0; // For hver $_POST ( eks. $_POST['email'] ) foreach ($_POST as $key => $value) { // lag dynamisk variabel basert på $_POST['navn'] // og tildel dynamisk variabel informasjonen ${$key} = utf8_decode($value); $i++; } // Da kan informasjonen lett brukes slik. echo $firstname.'<br>'; echo $lastname.'<br>'; echo $email.'<br>'; echo $street.'<br>'; echo $company.'<br>'; echo $phone.'<br><br>'; echo '<b>Antall: '.$i.'</b>'; ?> Kjekk forutsatt at du kjenner POST navnene? :-) Endret 19. september 2013 av Dan-Levi Lenke til kommentar
trondes Skrevet 19. september 2013 Del Skrevet 19. september 2013 [...] ${$key} = utf8_decode($value); Kjekk forutsatt at du kjenner POST navnene? :-) Kan være farlig også, for du vet aldri hva brukeren putter inn av nye felt i <form> før han sender tilbake til deg men det er jo en smart løsning..... hva om vi gjorde slik i stede for: <?php // Sett opp Array $data = array(); $i = 0; // For hver $_POST ( eks. $_POST['email'] ) $wanted = array( "firstname", "lastname", "email", "street", "company", "phone" ); foreach ($wanted as $nr=> $key) { // lag dynamisk variabel basert på $_POST['navn'] // og tildel dynamisk variabel informasjonen ${$key} = utf8_decode( $_POST[$key] ); $i++; } // Da kan informasjonen lett brukes slik. echo $firstname.'<br>'; echo $lastname.'<br>'; echo $email.'<br>'; echo $street.'<br>'; echo $company.'<br>'; echo $phone.'<br><br>'; echo '<b>Antall: '.$i.'</b>'; ?> ( Uprøvd kode ) For da har du bedre kontroll på hva som kommer inn. Lenke til kommentar
GeirGrusom Skrevet 19. september 2013 Del Skrevet 19. september 2013 En reimplementasjon av register globals. Nydelig. 1 Lenke til kommentar
Dan-Levi Skrevet 19. september 2013 Forfatter Del Skrevet 19. september 2013 Kan være farlig også, for du vet aldri hva brukeren putter inn av nye felt i <form> før han sender tilbake til deg men det er jo en smart løsning..... hva om vi gjorde slik i stede for: <?php // Sett opp Array $data = array(); $i = 0; // For hver $_POST ( eks. $_POST['email'] ) $wanted = array( "firstname", "lastname", "email", "street", "company", "phone" ); foreach ($wanted as $nr=> $key) { // lag dynamisk variabel basert på $_POST['navn'] // og tildel dynamisk variabel informasjonen ${$key} = utf8_decode( $_POST[$key] ); $i++; } // Da kan informasjonen lett brukes slik. echo $firstname.'<br>'; echo $lastname.'<br>'; echo $email.'<br>'; echo $street.'<br>'; echo $company.'<br>'; echo $phone.'<br><br>'; echo '<b>Antall: '.$i.'</b>'; ?> ( Uprøvd kode ) For da har du bedre kontroll på hva som kommer inn. Den likte jeg! En reimplementasjon av register globals. Nydelig. Mulig det ligner på noe annet, jeg er ingen PHP spesialist så du må gjerne demonstrere register globals med samme utfall. Jeg ser dog at register globals er deprecated og fjernet fra php etter versjon 5.4.0 Lenke til kommentar
trondes Skrevet 19. september 2013 Del Skrevet 19. september 2013 En reimplementasjon av register globals. Nydelig. Opps, helt rett. Min feil, får skylde på at jeg startet med programmering for tidlig på dagen linjen ${$key} = utf8_decode( $_POST[$key] ); Skal selvfølgelig være: ${$key} = utf8_decode( (isset( $_POST[$key] ) ? $_POST[$key]:"" ) ); Takk for at du pekte ut feilen, men neste gang synes jeg du heler kan gi noen eksempler, i stede for bare å være ironisk Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå