Wieso bitte berechnest Du eine neue Zufallszahl, wenn Du a) schon eine gespeichert hast und b) der Benutzer Dir ein Formular mit der Antwort schickt.
Wie bitte kann man soviele Wörter verwenden und dabei nicht mit einem der vielen Wörter eine Antwort auf die Frage geben???
Da es offenbar schon zuviel von _Dir_ verlangt ist, eine im Grunde einfache Frage betreffs der Hintergedanken, die zu Deinem vorgestellten Code geführt haben, zu beantworten, wird es von Dir vermutlich auch als eine maßlose Unverschämtheit angesehen, Dich dahingehend anzuregen, den Ablauf des besagten Codes und insbesondere die Werte bei jenen if-Abfragen, die augenscheinlich in die falsche Richtung abzweigen, selbst anhand einiger Debugausgaben zu beobachten und daraus eigene Schlüsse zu ziehen, etwa, dass die Generierung des "Passwortes" an dieser Stelle möglicherweise schlecht gewählt ist, weil sie zu einer sogenannten Race Condition zwischen Browser und Skript bzw. Webserver führen könnte, welche allesamt in einer bestimmten Reihenfolge auf eine Resource (das Bild) zugreifen müssen, wobei jedoch diese Reihenfolge im vorliegenden Ablaufplan nicht wirklich synchronisiert wird, was zu einem unglücklichen, weil unerwünschten Ergebnis führen könnte - aber das ist nur eine wage Vermutung und es gibt für den tatsächlichen Einsatz noch weitere Schwierigkeiten, die allesamt in der von Dir gewählten Trennung von Passworterzeugung und Passwortanzeige ihre Ursache haben.
Ich hoffe, mit diesem Satz Dein geistiges Fassungsvermögen abermals gesprengt zu haben und dass auch diesmal der Zaunpfahl, den ich zwecks Anregung geistiger Eigenleistung Deinerseits wieder trickreich versteckt habe, von Dir unentdeckt bleibt.