Magic Pen

http://www.candystand.com/play.do?id=18387

Magic drawing tools are in every other fairytale – here you can get your own. The red circle (or square) has to collect all the flags, and to move it around you’ll use your magic pen to create physical objects. Draw a pyramid shape, pin a long board on top of it – here’s a teeter-totter for you. And so on… The levels here are few, but every one of them can be completed in many, many ways!

Programistom urywam rączki. Tanio.

Właśnie na nowo odkrywam uroki poprawiania kodu po kimś. Ot, typowa robota – coś nie działa, weź napraw. Cóż można jednak znaleźć w cudzym kodzie? Panie i panowie, scyzoryki w kieszeń, zaraz będą się same otwierać.

Eksponat pierwszy – pole formularza typu checkbox, zaznaczone, jeśli formularz już był raz wypełniany i wrócił po poprawki:

<?php
$tmp="serwis2";
if ($_POST[$tmp] == "on") {
?>
<td><input type="checkbox" name="serwis2" checked="yes"/>opcja</td>
<?php
} else {
?>
<td><input type="checkbox" name="serwis2"/>opcja</td>
<?php
}
?>

Rozumiem, że

<td><input type="checkbox" name="serwis2" <?php if ($_POST["serwis2"]=="on") { ?/>checked="yes" < ?php } ?>>opcja</td>

… było za skomplikowane. Trzeba było tę zmienną $tmp koniecznie. Co to jest, do licha, jakiś auto-generator PHP?

Eksponat drugi. Zwracanie błędów z funkcji najlepiej robić o tak:

return "brr";

Będzie informatywnie i wyczerpująco.

Eksponat trzeci. Sprawdzanie poprawności formularza. Oczywiście, jest kilka metod – client-side czyli javascriptem i odmówimy przesłania niepoprawnego formularza, albo server-side czyli sprawdzamy jakimś PHPem i odsyłamy do poprawek, albo łącząc te dwie techniki AJAXem. Tu geniusz wynalazł sposób czwarty. Otóż formularz jest – po kolei – sprawdzany javascriptem, generowane są komunikaty o błędach, a następnie… formularz, z tymi komunikatami i statusem błędu przy pomocy javascriptu wmontowanymi w ukryte pola, zostaje i tak posłany na serwer. Tylko po to, by się od niego odbić na pierwszym ifie (no bo jest niepoprawny przecież, jako w nim samym stoi wyraźnie, <input type=”hidden” name=”error” value=”cośtam”> – no i to pole error zostaje wyświetlone użytkownikowi, wraz z formularzem do poprawki. Tylko po kiego czorta w ten sposób?

Poprawka – w przypadku formularz prawidłowo wypełnionego, o zgrozo, nie zostaje on zaakceptowany. Zostaje znów “odrzucony” tylko tym razem zaopatrzony w kawałek javascriptu, który zmienia mu adres docelowy na innego PHPa, po czym formularz automatycznie podsyła.

Ratunku.