Ik had een vraag aan jullie:
Wat is het moeilijkste script dat je ooit hebt gemaakt/willen maken? En waardoor was dat zo moeilijk?

Mijn moeilijkste:
Een systeempje dat een soort van digitaal gebouw maakt:
- Een gebouw van 5 bij 5 hokjes groot (1 hokje is 20x20 px) en daartussen zit steeds een muur van 5px (tenzij de muur is weggehaald, dan zit die 5px er nog wel, maar dan valt deze niet op)

(Sorry dat het plaatje zo donker is, maar bij mijn layout zie je 't wel goed)

- Je kan kamers groter en kleiner maken
- Je kan kamers ook een naam geven
- Je kan spullen in een kamer zetten
- Jij (en andere mensen) kunnen in een kamer zijn

Wat het zo moeilijk maakte:
Ik moest veel arrays gebruiken en daarmee raakte je HEEL ERG mee in de war
Ook moest je onderscheid tussen muren en kamers (de hokjes van 20x20 px) maken, wat een groot probleem maakte.
Ook was de keuze van de structuur van de DB tabel moeilijk, daarom is het ook o.a. alleen 5 bij 5 hokjes, niet meer, niet minder.


Hebben jullie ooit ook echt een script gemaakt/willen maken en dat je daarop terug dacht van: ''Pfeew... Ik ben blij dat ik er mee klaar ben' of 'Yes! Het is me gelukt!!!' ?

[edit]
Plaatje bijgevoegd voor duidelijkheid
[/edit]
mijn langste pagina ooit
was 805 regels


stamt uit 2005 en is errug slecht vind iknu was er toen trots op
Ik ben momenteel bezig met een onwijs moeilijke CSS lay-out voor AEGON, maar daar mag ik nog niets van laten zien ;-)
mijn moeilijkste script ooit zonder twijfels was toch wel :

<?php
   echo 'Hello World';
?>
Ik ben bezig met een ledensysteem.
Ik ga hem misschien vrijgeven als die klaar is.
Wouw!

Ik zie zelfs dingen die ik vroeger ook zo zou doen, maar het tegenwoordig met arrays zou aanpakken ;-)
BTW: I love arrays! Onvoorstelbaar dat ik ongeveer een kwart- tot een half jaar zonder heb gePHPd :o

Ik heb pas ook nog een script compleet verwijderd en neergezet: 'Because of an incredible age, this script died. It has to be made AGAIN, so this script can R.I.P. forever.'

[edit]
Dit was een reply op Klaasjan Boven (Ik had maar niet geQuote :P)
[/edit]
Gezellig...
Wanneer is de begrafenis..
Dat van Hello World; was dus wel een grap :-/
En, mocht je willen oefenen, verzin dan je eigen oplossing voor het TSP ;-)
Mijn moeilijkste script
zal toch wel zijn waar ik nu mee bezig ben
een aanvalsscript voor mijn Webbased RPG =)
met een beetje geluk gaat hij volgende week in de Beta fase :D
Een online reserveringssysteem dat vooral uit procedures (pl/pgSQL) bestaat. Voorbeeldje van 1 van de vele functies:

CREATE OR REPLACE FUNCTION api.accept_invitation(IN name text, IN e_mail text, IN "password" text, IN language_iso_code text, IN invitation_code text, OUT code text) AS
$BODY$
DECLARE
	formated_name 				text;
	formated_e_mail 			text;
	formated_password 			text;
	formated_iso_code 			text;
	formated_invitation_code 	text;
	language_id 				integer;
	primary_e_mail 				text;
	error_string 				text := '';
	person_id 					integer;
	password_ok 				text;
	invitation_ok 				text;
	referee_ok 					text;
	confirmation_ok 			text;
	person_row 					record;
	return_code 				text;
	confirmation_code 			text;
	update_ok 					text;
	person_history_ok 			text;
	permission_id 				integer;
	history_row 				record;
	change_ok 					text;
	moment 						timestamp;
	role_id 					integer;
	is_agency_manager 			boolean;
	agency_ok 					record;
	set_ok 						record;
	neighborhood_row 			record;
	city_id 					integer;
	state_id 					integer;
	country_id 					integer;
	current_city_id 			integer := NULL;
BEGIN
	formated_name 				:= TRIM(BOTH FROM name);
	formated_e_mail 			:= TRIM(BOTH FROM e_mail);
	formated_password 			:= TRIM(BOTH FROM password);
	formated_iso_code 			:= TRIM(BOTH FROM language_iso_code);
	formated_invitation_code 	:= TRIM(BOTH FROM invitation_code);
	
	<<MAIN_BODY>>
	BEGIN
		moment := NOW();

		IF (formated_name = '') THEN
			error_string := '10001|name';
			EXIT MAIN_BODY;
		END IF;

		IF (formated_e_mail = '') THEN
			error_string := '10001|e_mail';
			EXIT MAIN_BODY;
		END IF;

		IF (CHAR_LENGTH(formated_password) <> 40) THEN
			error_string := '10002|password;40';
			EXIT MAIN_BODY;
		END IF;

		IF (CHAR_LENGTH(formated_iso_code) <> 2) THEN
			error_string := '10002|iso_code;2';
			EXIT MAIN_BODY;
		END IF;

		language_id := available_language.get_id('iso_code',formated_iso_code);

		IF (language_id IS NULL) THEN
			error_string := '11001|'||formated_iso_code;
			EXIT MAIN_BODY;
		END IF;

		IF (formated_invitation_code = '') THEN
			error_string := '10001|invitation_code';
			EXIT MAIN_BODY;
		END IF;
		
		person_row := invitation.validate(formated_invitation_code);
		
		IF (person_row.id_person IS NULL) THEN
		error_string := '25000|';
		EXIT MAIN_BODY;
		END IF;

		primary_e_mail := person.get(person_row.id_person,'primary_e_mail');
		
		IF (primary_e_mail <> formated_e_mail) THEN
			person_id := person.get_id('primary_e_mail',formated_e_mail);
			
			IF (person_id IS NOT NULL) THEN
				error_string := '16001|'||formated_e_mail;
				EXIT MAIN_BODY;
			END IF;
		END IF;
		
		update_ok := person.set(person_row.id_person,'name|id_default_display_language',formated_name||'|'||language_id);
		
		IF (update_ok <> 'ok') THEN
			error_string := '10000 update_ok|'||update_ok;
			EXIT MAIN_BODY;
		END IF;
		
		change_ok := person.change_person_status(person_row.id_person,person_row.id_person,'active',moment);
		
		IF (change_ok <> 'ok') THEN
			error_string := '10000 set_ok|'||change_ok;
			EXIT MAIN_BODY;
		END IF;
		
		password_ok := person.set_password(person_row.id_person,formated_password);
		
		IF (password_ok <> 'ok') THEN
			error_string := '10000 password_ok|'||password_ok;
			EXIT MAIN_BODY;
		END IF;
		
		invitation_ok := invitation.accept(formated_invitation_code);
		
		IF (invitation_ok <> 'ok') THEN
			error_string := '10000 invitation_ok|'||invitation_ok;
			EXIT MAIN_BODY;
		END IF;
		
		referee_ok := person.new_referee(person_row.id_invitor,person_row.id_person);
		
		IF (referee_ok <> 'ok') THEN
			error_string := '10000 referee_ok|'||referee_ok;
			EXIT MAIN_BODY;
		END IF;
		
		role_id 			:= person.get(person_row.id_person,'id_role')::integer;
		is_agency_manager 	:= role.is('agency_manager',role_id);
		
		IF (is_agency_manager IS TRUE) THEN
			agency_ok := agency.activate_agency(person_row.id_person);
			
			IF (agency_ok.ok <> 'ok') THEN
				error_string := '10000|'||agency_ok.error;
				EXIT MAIN_BODY;
			END IF;
			
			FOR neighborhood_row IN SELECT * FROM agency.list_neighborhoods(person_row.id_person)
			LOOP
				set_ok := neighborhood.set(neighborhood_row.id_neighborhood,'status|agency_status','active|with');
				
				IF (set_ok.ok <> 'ok') THEN
					error_string := '10000|'||set_ok.error;
					EXIT MAIN_BODY;
				END IF;
				
				city_id := neighborhood.get(neighborhood_row.id_neighborhood,'id_city')::integer;
				
				IF (current_city_id <> city_id) THEN
					current_city_id := city_id;
					set_ok 			:= city.set(current_city_id,'status|agency_status','active|with');
					
					IF (set_ok.ok <> 'ok') THEN
						error_string := '10000|'||set_ok.error;
						EXIT MAIN_BODY;
					END IF;
					
					state_id 	:= city.get_state_id(current_city_id);
					set_ok 		:= state.set(state_id,'status|agency_status','active|with');
					
					IF (set_ok.ok <> 'ok') THEN
						error_string := '10000|'||set_ok.error;
						EXIT MAIN_BODY;
					END IF;
					
					country_id 	:= state.get_country_id(state_id);
					set_ok 		:= country.set(country_id,'status|agency_status','active|with');
					
					IF (set_ok.ok <> 'ok') THEN
						error_string := '10000|'||set_ok.error;
						EXIT MAIN_BODY;
					END IF;
				END IF;
			END LOOP;
		END IF;
		
		IF (primary_e_mail <> formated_e_mail) THEN
			confirmation_code 	:= e_mail_confirmation.generate_code(formated_e_mail);
			confirmation_ok 	:= e_mail_confirmation.new(person_row.id_person,formated_e_mail,confirmation_code);
			
			IF (confirmation_ok <> 'ok') THEN
				error_string := '10998|'||'OPS'||';'||'CONFIRMATION';
				EXIT MAIN_BODY;
			END IF;
			
			return_code := confirmation_code;
		ELSE
			return_code := role.get(person_row.id_role,'code');
		END IF;

		permission_id := permission.get_api_id('api.accept_invitation(text,text,text,text,text)');

		FOR history_row IN SELECT * FROM person_history.list_trigger_events(permission_id)
		LOOP
			person_history_ok := person_history.new_event(person_row.id_person,person_row.id_person,history_row.id_history_event_type);
			
			IF (person_history_ok <> 'ok') THEN
				error_string := '10000 person_history_ok|'||person_history_ok;
				EXIT MAIN_BODY;
			END IF;
			
		END LOOP;
	END MAIN_BODY;
		
	<<FUNCTION_CLOSING>>
	BEGIN
		IF (error_string <> '') THEN
			RAISE EXCEPTION '%',error_string;
		ELSE
			code := return_code;
		END IF;
	END FUNCTION_CLOSING;
	
RETURN;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION api.accept_invitation(IN name text, IN e_mail text, IN "password" text, IN language_iso_code text, IN invitation_code text, OUT code text) OWNER TO ***;

Ben nu bezig met een soortgelijk complex systeem. Erg leuk om te doen!

Edit: Nu met wat opmaak, voor de liefhebbers
@Sab Kriksdeegir:

O echt? Ik vond dat zelf al wel een hele moeilijke. Ik denk dat het wel de grootste stap die je maakt is in de PHP world:
Geen PHP naar Wel PHP... best groot... Daar kunnen moeilijkheden in voorkomen ;-)

Ik heb nog geen idee wanneer de begrafenis is. Misschien als ik de andere heb gemaakt :D (nog steeds geen zin in)

O misschien ideetje voor de nieuwe versie van PHPhulp: Een té lange code (x aantal lines) laten doorverwijzen. (Dat je een link krijgt te zien naar een pagina waar deze helemaal word getoond)
Ik vraag me alleen af of dit wel mogelijk is... <-- een nieuwe voor: 'JOU moeilijkste script' :D

Reageren