login  Naam:   Wachtwoord: 
Registreer je!
 Forum

for loop gaat in de fout

Offline Behemutant - 09/04/2008 20:53 (laatste wijziging 09/04/2008 20:54)
Avatar van BehemutantNieuw lid Hey allemaal, gisteren werkte mijn script perfect nu niet meer ineens.
Hij weergeeft wel netjes het aantal (ingevuld op vorige pagina) aantal vakjes
waarin je je naam indeeld en de kleur per letter(s) aangeeft..

druk ik op submit laat hij de uitkomst niet zien!

Iemand enig idee?



  1. <?php
  2. $aantal = $_SESSION['aantal'];
  3.  
  4. if(!isset($_POST['Submit']))
  5. {
  6. echo '<form id="generator" name="generator" method="post" action="">';
  7. // velden genereren
  8. for($teller = 0; $teller < $aantal; $teller++)
  9. {
  10. echo "<input type=\"text\" name=\"letter_'.$teller.'\" style=\"border:solid 1px #000000; color:#FFCC00\" onMouseDown=\"this.style.borderColor='#FF0000'\" />
  11. <select name=\"kleur_'.$teller.'\" style=\"border:solid 1px #000000; color:#FFCC00\">
  12. <option>kleur</option>
  13. <option value=\"·$0\">Wit</option>
  14. <option value=\"·$1\">Zwart</option>
  15. <option value=\"·$2\">Donkerblauw</option>
  16. <option value=\"·$3\">Olijfgroen</option>
  17. <option value=\"·$4\">Rood</option>
  18. <option value=\"·$5\">Bruinrood</option>
  19. <option value=\"·$6\">Donkerpaars</option>
  20. <option value=\"·$7\">Oranje</option>
  21. <option value=\"·$8\">Geel</option>
  22. <option value=\"·$9\">Knalgroen</option>
  23. <option value=\"·$10\">Groenblauw</option>
  24. <option value=\"·$11\">Knalblauw</option>
  25. <option value=\"·$12\">Blauwpaars</option>
  26. <option value=\"·$13\">Roze</option>
  27. <option value=\"·$14\">Grijs</option>
  28. <option value=\"·$15\">Lichtgrijs</option>
  29. <option value=\"·$16\">Heel licht grijs</option>
  30. <option value=\"·$17\">Lichtgrijs</option>
  31. <option value=\"·$18\">Lichtoranje</option>
  32. <option value=\"·$19\">Lichtroze</option>
  33. <option value=\"·$20\">Roze</option>
  34. <option value=\"·$21\">Lichtpaars</option>
  35. <option value=\"·$22\">Oceaanblauw</option>
  36. <option value=\"·$23\">Lichtgroen</option>
  37. <option value=\"·$24\">Lichtgeel</option>
  38. <option value=\"·$25\">Grijs</option>
  39. <option value=\"·$26\">Donkergrijs</option>
  40. <option value=\"·$27\">Oranje</option>
  41. <option value=\"·$28\">RoodRoze</option>
  42. <option value=\"·$29\">Knalroze</option>
  43. <option value=\"·$30\">Lichtpaars</option>
  44. <option value=\"·$31\">Blauwgroen</option>
  45. <option value=\"·$32\">Lichtgroen</option>
  46. <option value=\"·$33\">Lichtgeel</option>
  47. <option value=\"·$34\">Grijs</option>
  48. <option value=\"·$35\">Donkergrijs</option>
  49. <option value=\"·$36\">Oranje</option>
  50. <option value=\"·$37\">RoodRoze</option>
  51. <option value=\"·$38\">Knalroze</option>
  52. <option value=\"·$39\">Blauw</option>
  53. <option value=\"·$40\">Blauwgroen</option>
  54. </select><br>";
  55. }
  56. echo '<br><input type="submit" name="Submit" value="Submit" />';
  57. echo '</form>';
  58. }
  59. else
  60. {
  61. $naam = 'uw naam is: ';
  62. for($teller = 0; $teller < $aantal; $teller++)
  63. {
  64. $naam .= $_POST['kleur_'.$teller.''];
  65. $naam .= $_POST['letter_'.$teller.''];
  66. $naam .= $_POST['kleur_'.$teller.''];
  67. }
  68. echo $naam;
  69. }
  70. ?>


-- EDIT --

voordat iemand zegt: 'een variable kan niet met een cijfer beginnen'.

<option value=\"·$40\">Blauwgroen</option>


de ·$40 is geen variable, dat is een code.
Bedoeling is dat je je naam intyped, en dat deze generator
de kleur (in dit geval bijvoorbeeld ·$40) voor de d.b. letter zet.
Zodoende kan je je eigen naam genereren, als je die in je programma kopieerd
vervolgens heb je een naam met speciale effecten.

het programma zet bijvoorbeeld alle letters tussen ·$40 en ·$40 om in blauw.
Zodoende zeg maar...

5 antwoorden

Gesponsorde links
Offline Wim - 09/04/2008 21:16
Avatar van Wim Crew algemeen zet dit eens in je htaccess (als je pagina volledig leeg is tenminste!):

php_flag display_errors on
Offline Behemutant - 09/04/2008 21:35
Avatar van Behemutant Nieuw lid edit:

ik heb error_reporting aangedaan en krijg nu onder anderen:

Notice: Undefined index: kleur_0 in /storage/xxx/users/xxx/public/sites/mijnsite/xxx/generator.php on line 67
en dat is:

$naam .= $_POST['kleur_'.$teller.''];

... heb ik dan iets verkeerd gedaan?

dit moet toch verwijzen naar wat er wordt ingevuld in dat vakje?
welke d.m.v. de for loop gemaakt wordt???


php_flag en display errors staan aan maar had ik nog niet in dit document, nu wel error_reporting gedaan... maar ik snap nu even niet wat ik fout doe... i kgenerereer tekst vakken met 0, 1, 2 enzovoort... en ik lees ze ook uit met 0, 1, 2 zoals jullie kunnen zien.
Offline timmie_loots - 09/04/2008 21:45 (laatste wijziging 09/04/2008 21:48)
Avatar van timmie_loots PHP gevorderde Je kijkt nergens of de variabelen die je aanroept wel bestaat. Beter kun je al deze dingen gewoon in een array zetten die met het form verstuurd wordt, dan kun je met een foreach die array doorlopen:

Dus regel 11 is dan:

  1. echo "<input type=\"text\" name=\"letter[".$teller."]\" style=\"border:solid 1px #000000; color:#FFCC00\" onMouseDown=\"this.style.borderColor='#FF0000'\" />


Regel 12 is dan:

  1. <select name=\"kleur[".$teller."]\" style=\"border:solid 1px #000000; color:#FFCC00\">


En regel 63 t/m 69 vervang je door dit:

  1. foreach ($_POST['letter'] AS $key => $letter) {
  2. if (isset($_POST['kleur'][$key])) {
  3. $naam .= $_POST['kleur'][$key] . $letter . $_POST['kleur'][$key];
  4. }
  5. }
  6. echo htmlentities($naam, ENT_QUOTES);


Ik heb de htmlentities() op de laatste regel gezet zodat je script iets veiliger is. Dit omdat je user-input nooit zomaar moet printen zonder te kijken wat deze bevat, of er voor te zorgen dat deze niets schadelijks meer kan bevatten.

EDIT:

Overigens komt dit door brak gebruik van de quotes, dat kun je ook zien aan de colorcoding. Je gebruikt een enkele quote om een dubbele quote te sluiten. Dat werkt niet, maar PHP is wel 'slim' genoeg om de variabelen tussen dubbele quotes te parsen. De HTML output van jouw document zou daarom steeds een naam met daarin enkele quotes generen:

  1. .. name="kleuren_0" ..


Waar de nul natuurlijk steeds één hoger zal worden.
Offline Behemutant - 09/04/2008 23:54 (laatste wijziging 10/04/2008 11:42)
Avatar van Behemutant Nieuw lid
  1. foreach($_POST['letter'] as $aLetter)
  2. {
  3. foreach($_POST['kleur'] as $aColor)
  4. {
  5. $aOutput = $aLetter;
  6. $aOutput .= $aColor;
  7. echo $aOutput;
  8. }
  9. }



werkt wel maar dan geeft hij het dubbel weer,
kan ik iets doen in de trend van

  1. foreach($_POST['letter'] as $aLetter, $_POST['kleur'] as $aColor)
  2. {
  3.  
  4. }



of is er geen mogelijkheid zoals dat?
want dan werkt het prima.
Offline marten - 10/04/2008 10:24
Avatar van marten Beheerder Behemutant.
Code tags gebruiken aub. Dus gelijk even bovenstaande posts nalopen en dit oplossen aub.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.234s