Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[php] hulpvraag debugging deel 2

Pagina: 1
Acties:
  • 368 views

Verwijderd

Topicstarter
Gezien mijn vorige topic meteen werd dichtgegooid zonder dat mij de kans gegeven werd antwoord te geven, probeer ik het nogmaals.

Om maar meteen met de deur in huis te vallen:
- ja, ik heb gegoogled
- nee, daarmee kom ik er niet uit, en daarom heb ik dus de vraag op tweakers gezet. (gezien de website die bij het boek hoort niet meer bestaat)
- ik heb een naslagwerk (zoals vermeld in vorige topic )
- ja, ik begrijp wat de notices betekenen.
- debuggen zonder kennis en met een boek wat daar niks over uitlegd schiet niet op, zeker niet als je niet begrijpt waarom de melding uberhaupt wordt weergegeven als deze uitgeschakeld zou moeten zijn, en het script exact uit een boek komt.

De notices zoals gegeven in mijn vorige poging komen vanuit het feit dat de variabelen nog niet zijn aangemaakt als de pagina voor het eerst geopend wordt. Dit zou volgens het if statement dan moeten resulteren in het opbouwen van het html formulier.
Dit laatste gaat dus niet goed door de foutmelding.

In het if statement wordt gekeken of de knop voor het verzenden is ingedrukt, en of alle velden ingevuld zijn. Is dit niet het geval, dan wordt het formulier (nogmaals) weergegeven en weer ingevuld met de variabelen die bekend zijn van de vorige keer dat een verzendpoging gedaan is door de bezoeker.

Gezien ik net begin met PHP snap ik dus absoluut niet waarom het boek meteen in de open haard kan, en welk boek ik dan wel moet hebben om het wél goed te leren?

[ Voor 3% gewijzigd door Verwijderd op 15-04-2011 22:03 ]


  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op vrijdag 15 april 2011 @ 22:01:
De notices zoals gegeven in mijn vorige poging komen vanuit het feit dat de variabelen nog niet zijn aangemaakt als de pagina voor het eerst geopend wordt. Dit zou volgens het if statement dan moeten resulteren in het opbouwen van het html formulier.
Dit laatste gaat dus niet goed door de foutmelding.
De regelnummers staan d'r ook allemaal bij.

Wat zijn je eigen gedachten hierover? Je bent al relatief ver: idd, de variabelen zijn er inderdaad nog niet.. Wélke variabelen dan? En waaróm zijn ze er nog niet? Welke variabelen zijn er wél als je lukraak een pagina via GET (hint hint hint) opvraagt?

Verwijderd

Topicstarter
de regelnummers had ik ook al door, zelfs nog even aangepast omdat ze hier anders genummerd zijn als in mijn editor.

Het gaat om de variabele "verzendbutton" lijkt mij. Die wordt pas aangemaakt als op de verzendknop gedrukt is.
Het if statement kijkt of de variabele gelijk is aan "verzenden". Hier komt de foutmelding op, inplaats van een "false" of iets dergelijks, waardoor het if statement spaak loopt.

Je laatste stap snap ik niet helemaal, maar volgens mij zijn de volgende variabelen er wel:
-naam
-mailadres
-reactie
-boodschap

klopt dat?

daarnaast is er nog de variable voor de afzender van de mail, deze heb ik in php.ini ingesteld

[ Voor 8% gewijzigd door Verwijderd op 15-04-2011 22:17 ]


  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op vrijdag 15 april 2011 @ 22:14:
Het gaat om de variabele "verzendbutton" lijkt mij. Die wordt pas aangemaakt als op de verzendknop gedrukt is.
Da's een hele goeie gedachtengang :)
Verwijderd schreef op vrijdag 15 april 2011 @ 22:14:
Je laatste stap snap ik niet helemaal, maar volgens mij zijn de volgende variabelen er wel:
-naam
-mailadres
-reactie
-boodschap

klopt dat?
Waar komen die vandaan dan? Denk ook aan wat je zojuist als eerste hebt gezegd ;)

En: hoe denk je, ff "abstract" (dus niet concreet in PHP-code zelf) hoe je zoiets op zou kúnnen lossen?

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 26-11 21:18

krvabo

MATERIALISE!

De variabele 'verzendbutton' wordt alleen gezet als je op de knop drukt. Als je enter drukt wordt het formulier wel verzonden maar wordt de submitknop-waarde niet meegestuurd.
Daar moet je dus niet op checken.

Gebruik: empty() (controleer of een array leeg is. $_POST is een array)
Gebruik: isset($_POST['naam']) om te controleren of een veld met de naam 'naam' is verzonden.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Verwijderd

Topicstarter
Osiris schreef op vrijdag 15 april 2011 @ 22:18:
[...]

Da's een hele goeie gedachtengang :)

[...]

Waar komen die vandaan dan? Denk ook aan wat je zojuist als eerste hebt gezegd ;)

En: hoe denk je, ff "abstract" (dus niet concreet in PHP-code zelf) hoe je zoiets op zou kúnnen lossen?
Ik dacht uit de volgende regel:
Naam: <input type="text" name="naam" value="<?php echo $_POST["naam"] ?>"><br>
Alleen, omdat echo $_POST["naam"] een foutmelding oplevert in de vorm van tekst schiet je er nog niks mee op.

de oplossing zou dan zijn om de variabelen eerst te declareren (zoals in Java gebruikelijk is)
krvabo schreef op vrijdag 15 april 2011 @ 22:20:
De variabele 'verzendbutton' wordt alleen gezet als je op de knop drukt. Als je enter drukt wordt het formulier wel verzonden maar wordt de submitknop-waarde niet meegestuurd.
Daar moet je dus niet op checken.
Kijk, dat is een gouden tip! Dankje.
Gebruik: empty() (controleer of een array leeg is. $_POST is een array)
Gebruik: isset($_POST['naam']) om te controleren of een veld met de naam 'naam' is verzonden.
Top! Dit is even een duwtje in de rug.
Niks frustrerender dan proberen te bouwen op een foutieve basis.

Hebben jullie misschien een tip voor een goed boek? Deze kan klaarblijkelijk inderdaad bij het grofvuil.

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op vrijdag 15 april 2011 @ 22:25:
[...]

Ik dacht uit de volgende regel:
Naam: <input type="text" name="naam" value="<?php echo $_POST["naam"] ?>"><br>
Alleen, omdat echo $_POST["naam"] een foutmelding oplevert in de vorm van tekst schiet je er nog niks mee op.
Da's alleen een stukje HTML wat gewoon naar de browser gestuurd wordt hè. Dat heeft geen invloed op je script verder.

Verwijderd

Topicstarter
Ah, nu zie ik het. Ik moet wat beter opletten op de scheiding tussen php en html.

  • ameesters
  • Registratie: Juni 2008
  • Laatst online: 05-01-2022
let op dat empty bij 0 false weergeeft maar isset bij 0 true is en dus weer geeft...

sla de volgende code maar eens op en open hem in je webbrowser:

PHP:
1
2
3
4
5
6
7
8
9
<?php

$test = 0;

if(empty($test)) echo '$test is empty!<br />';


if(isset($test)) echo '$test is set!';
?>

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 26-11 21:18

krvabo

MATERIALISE!

Empty is dan ook een functie voor arrays en niet voor strings/ints.

Use the right tool for the job.


Peter Kassenaar heeft altijd wel redelijk goede en bekende boeken, maar daar is wel veel over te vinden op GoT.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Verwijderd

Topicstarter
leipepo schreef op vrijdag 15 april 2011 @ 22:33:
let op dat empty bij 0 false weergeeft maar isset bij 0 true is en dus weer geeft...

sla de volgende code maar eens op en open hem in je webbrowser:

PHP:
1
2
3
4
5
6
7
8
9
<?php

$test = 0;

if(empty($test)) echo '$test is empty!<br />';


if(isset($test)) echo '$test is set!';
?>
Dat klinkt vrij logisch, je geeft een waarde aan $test, toch?
In andere woorden: $test is dan niet leeg, en de variabele is gezet (aangemaakt).
krvabo schreef op vrijdag 15 april 2011 @ 22:40:
Empty is dan ook een functie voor arrays en niet voor strings/ints.

Use the right tool for the job.


Peter Kassenaar heeft altijd wel redelijk goede en bekende boeken, maar daar is wel veel over te vinden op GoT.
Top, dan ga ik daar eerst naar op zoek.

[ Voor 25% gewijzigd door Verwijderd op 15-04-2011 22:42 ]


  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op vrijdag 15 april 2011 @ 22:41:
[...]


Dat klinkt vrij logisch, je geeft een waarde aan $test, toch?
In andere woorden: $test is dan niet leeg, en de variabele is gezet (aangemaakt).
En ondanks dat je wél een "waarde" van 0 aan $test meegeeft, zal hij tóch zeggen dat hij wél empty is ;) Zie ook http://php.net/empty

Verwijderd

Topicstarter
Osiris schreef op vrijdag 15 april 2011 @ 22:50:
[...]

En ondanks dat je wél een "waarde" van 0 aan $test meegeeft, zal hij tóch zeggen dat hij wél empty is ;) Zie ook http://php.net/empty
Da's flauw :P
Dus wat leipepo aangaf is gewoon fout.
als hij "1" als waarde had gegeven klopt het wel...

aan isset heb ik dus meer in dit geval.

bij empty krijg je een true als hij leeg is, nul, of niet gezet.

[ Voor 13% gewijzigd door Verwijderd op 15-04-2011 22:58 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Verwijderd schreef op vrijdag 15 april 2011 @ 22:01:
- debuggen zonder kennis en met een boek wat daar niks over uitlegd schiet niet op, zeker niet als je niet begrijpt waarom de melding uberhaupt wordt weergegeven als deze uitgeschakeld zou moeten zijn, en het script exact uit een boek komt.

[...]

Gezien ik net begin met PHP snap ik dus absoluut niet waarom het boek meteen in de open haard kan, en welk boek ik dan wel moet hebben om het wél goed te leren?
Zie de link tussen deze alinea's. Als jouw boek je niet fatsoenlijk uitlegt hoe je moet debuggen, dan heb je een nieuw boek nodig. Welk kun je wel bepalen aan de hand van reviews op een willekeurige site zoals bijvoorbeeld Bol.com.

Je bent inmiddels al een heel eind geholpen maar hier ga ik ook dit topic weer sluiten. In de eerste plaats omdat je dergelijke notices zelf zou moeten kunnen oplossen: fatsoenlijk omgaan met array indices wordt in elk goed boek en elke goede tutorial wel uitgelegd. We zijn niet te beroerd om je te helpen, maar als ik in de eerste hit al een antwoord vind als ik ga [google=php "Notice: Undefined index:"] dan geloof ik niet dat je hard gegoogled hebt. ;)
krvabo schreef op vrijdag 15 april 2011 @ 22:40:
Empty is dan ook een functie voor arrays en niet voor strings/ints.

Use the right tool for the job.
Onzin. Empty kun je ook prima gebruiken voor ints, empty(0) geeft gewoon true, empty(1) geeft false en empty('') geeft weer true. Die functie language construct kun je prima gebruiken voor het doel waarvoor hij gemaakt is: kijken of een variabele leeg is. Volgens PHP's definitie uiteraard.
Verwijderd schreef op vrijdag 15 april 2011 @ 22:56:
[...]


Da's flauw :P
Dus wat leipepo aangaf is gewoon fout.
Beter lezen wat hij zegt....hij legt juiste het verschil tussen empty en isset uit.

[ Voor 6% gewijzigd door NMe op 15-04-2011 23:00 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.