PHP probleem
25 juni 2007 - 17:21   
geplaatst door: Mr Wimpy
Iemand heeft mij gevraagd om eens naar z'n website te kijken, omdat zijn mail formulier niet meer werkte. Bij het controleren van het formulier door php was er altijd iets niet ingevuld.

Nu heb ik de pagina met het formulier en de pagina om de ingevulde gegevens te controleren opgeschoond. Wanneer nu iets niet of onjuist is ingevult, geeft de controle pagina dat aan en toont het formulier opnieuw met de reeds ingevulde gegevens. Wanneer alles goed is ingevuld, stuurt deze een e-mail. Zo ver niets bijzonders.

Het probleem is dat de mail die ik ontvang leeg is, er worden geen gegevens uit het formulier meegestuurd.
Ook wanneer ik de opdracht geef om de gegevens gewoon in een pagina te laten zien, wordt er niets getoond.
Maar als het formulier foutief is ingevult, worden ze wel getoond!

Ik heb het ook eens met een ander (werkend) formulier van een andere site geprobeerd. Zelfde effect.

Waar kan dit aan liggen?
Volgens phpinfo werkt de server met php 4.3.11.

Tja... even mijn handtekening reflecteren
PHP probleem
25 juni 2007 - 18:18    reactie #1
geplaatst door: mvdg
Tja dan gaat er dus iets fout in het script. Maar zonder het script te zien is dat niet te zeggen.
Wat ik zou kunnen bedenken, is dat er in het script gebruik gemaakt wordt van depricated
global variables. Op nieuwere servers staan een aantal variabelen standaard niet meer aan
omdat die makkelijk te misbruiken zijn. Als dat zo is, zul je in het email-verzend-deel van je
script dingen zien als $email en $bericht in plaats van $_POST['email'] en $_POST['bericht'].
Vroeger werd de inhoud van $_POST['email'] automatisch in $email gezet. Maar dat is niet
veilig en daarom gebeurt het niet meer. Als je script rekent op een oudere server kan hij
daarom stuk zijn. Of om allerlei andere redenen maar daarvoor moeten we toch echt het
script zien.
Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
PHP probleem
25 juni 2007 - 20:25    reactie #2
geplaatst door: Mr Wimpy
Hoe zet ik de broncode hier neer zonder dat de MFwebsite er vreemd uit gaat zien. Dat doet-ie namelijk als ik het bericht eerst wil bekijken. Ook als deze tussen [ code] en [ /code] staat.

Dit zijn de variabelen die verstuurd moeten worden.
$voorletters = $_POST['voorletters'];
$achternaam = $_POST['achternaam'];
$straat = $_POST['straat'];
$strnr = $_POST['strnr'];
$postcode = $_POST['postcode'];
$plaats = $_POST['plaats'];
$telefoon = $_POST['telefoon'];
$email = $_POST['email'];
$opmbestelling = $_POST['opmbestelling'];
$viswormen = $_POST['viswormen'];
$knipwormen = $_POST['knipwormen'];
$wormenvoer = $_POST['wormenvoer'];
$voer23 = $_POST['voer23'];
$voer45 = $_POST['voer45'];
$voer60 = $_POST['voer60'];
$mixwormen = $_POST['mixwormen'];
$compostwormen = $_POST['compostwormen'];


Ik heb net het (verzenden van het) formulier getest op een andere server en daar werkt het prima.

$email wordt wel gebruikt, die heb ik ff verandert naar $brievenbus, maar dat hielp niets  :blush:

Tja... even mijn handtekening reflecteren
PHP probleem
25 juni 2007 - 22:02    reactie #3
geplaatst door: mvdg
Misschien kun je met phpinfo(); kijken welke php variabelen er verschillen tussen de servers, en zo kijken welke instelling het probleem veroorzaakt?
Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
PHP probleem
26 juni 2007 - 00:17    reactie #4
geplaatst door: Jerome
heb je in je <form> tag wel method POST staan?
MacBookPro 17" | iPodNano Red 8Gb | iPhone 8Gb | www.d-engine.nl | www.kitchenpilot.com | www.isthischicken.com
PHP probleem
26 juni 2007 - 09:53    reactie #5
geplaatst door: Mr Wimpy
POST zit er wel in, op een andere server werkt het prima.
Op die ene server wordt de controle ook wel gewoon uitgevoerd en een mail versturen doet-ie ook wel, alleen de variabelen worden niet ge-echo-d of gemaild. Maar ze komen wel in de 'value' van het formulier te staan wanneer een veld onjuist is ingevuld.


Maar ik zal ook eens naar de phpinfo() kijken....

Tja... even mijn handtekening reflecteren
PHP probleem
26 juni 2007 - 11:00    reactie #6
geplaatst door: mvdg
Met logisch nadenken moet er dus een verschil zitten tussen de manier waarop het formulier wordt afgehandeld wanneer wél of niet iets mis is met de informatie. Immers als hij het formulier opnieuw laat zien (omdat je iets niet goed invult) dan blijft de info bewaard; wanneer hij het okee vindt en gaat verzenden dan is de info ineens "kwijt". Als je stap voor stap kijkt wat er met de informatie gebeurt in die twee gevallen dan moet je er achter komen toch. En aangezien het op een andere server wel werkt, vermoed ik toch dat in het configuratie verschil de clou zit.
Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
PHP probleem
2 juli 2007 - 14:21    reactie #7
geplaatst door: Mr Wimpy
Hey, ben ik weer...

Dit zijn de verschillen uit de configuratie van PHP core
Wel = mail wordt goed verzonden
Niet = mail wordt niet goed verzonden

extention_dir
Wel: /usr/lib/php4
Niet: ./

include_path
Wel: .:/usr/share/pear
Niet: .:/urs/local/lib/php

memory_limit
Wel: 32M
Niet: 8M

open_basedir
Wel: /home/ (...) /httpdocs/tmp
Niet: no value

Precision
Wel: 14
Niet: 12

register_globals
Wel: On
Niet: Off

sendmail_from
Wel: me AT localhost DOT com
Niet: no value

sendmail_path
Wel: /usr/sbin/sendmail -t -i
Niet: /usr/sbin/sendmail -t -i -f emailadres

Kun je hier zien wat eventueel het probleem zou kunnen zijn?
Of heb je nog meer informatie nodig?
Dank.

Tja... even mijn handtekening reflecteren
PHP probleem
2 juli 2007 - 14:59    reactie #8
geplaatst door: mvdg
Ik zie twee mogelijkheden: register_globals en sendmail_from. En mogelijk ook nog sendmail_path.

Register_globals moet je niet aanpassen. ON is namelijk een onveilige instelling. Als het daaraan zou liggen moet je echt de code goed bekijken en herschrijven want daarmee stel je je teveel open voor misbruik.

Als sendmail_from geen adres bevat dan kan het in sommige gevallen geweigerd worden. Zelfde voor het opnemen van het laatste stukje in sendmail_path.

Mijn advies: probeer eerst of het zenden van email uberhaupt werkt door een testscriptje te maken met daarin:

mail("adres","onderwerp","inhoud");

Dan kun je zien of je tenminste mails verstuurd krijgt.
Als dat werkt ligt het denk ik aan register_globals maar dan moet je dus je code aanpassen.

Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
PHP probleem
2 juli 2007 - 15:51    reactie #9
geplaatst door: Mr Wimpy
Als ik bijvoorbeeld
mail("mail@dres.nl","Groet","Hey hallo");
Dan krijg ik een mail met onderwerp 'Groet' en inhoud 'Hey hallo'

Doe ik dit in de verzend-pagina in plaats van de string om de info uit het formulier te verzenden

$mail = "mail@dres.nl";
$onderwerp = "Groet";
$inhoud = "Hey hallo";
mail($mail,$onderwerp,$inhoud);

Doet-ie het ook. Een email Hey hallo met onderwerp 'Groet'

Maar de variabelen uit het formulier wil die niet overnemen.
Heb je bijvoorbeeld een veld waarin je het onderwerp kunt zetten en je zet deze variabele op de onderwerp-plaats in de mail string dan krijg je 'Geen onderwerp' in je mailbox...

(Bewerkt door Mr Wimpy om 15:52, 2-07-2007)

Tja... even mijn handtekening reflecteren
PHP probleem
2 juli 2007 - 15:55    reactie #10
geplaatst door: mvdg
Okee het mailen werkt dus, maar de variabelen komen niet door. Dat klopt met de veronderstelling dat het aan de 'register_globals' ligt. Dan is je script dus waarschijnlijk een ouder script, want vroeger stond dit standaard aan in PHP en tegenwoordig uit. Voor de veiligheid, zoals ik al zei.

Kun je het hele script ergens online zetten zodat wij het kunnen downloaden ofzo? Dan kunnen we even kijken waar het misgaat.

Let op, als je het online zet even de extensie veranderen anders kunnen wij het niet downloaden. Dus bv. .php.txt ervan maken ofzo.

Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
PHP probleem
3 juli 2007 - 14:30    reactie #11
geplaatst door: Mr Wimpy
Het bestelformulier staat hier
De controle- en verzendpagina staat hier
Het zijn beide rtf-bestanden.
Tja... even mijn handtekening reflecteren
PHP probleem
3 juli 2007 - 15:18    reactie #12
geplaatst door: mvdg
Het is precies wat ik dacht. De variabelen $voorletters, $achternaam enzovoort worden niet met een waarde gevuld. Op de server met register_globals On merk je dat niet. $voorletters wordt daar namelijk automatisch gevuld met de waarde van $_POST['voorletters']. Op de nieuwe (veiligere) server gebeurt dat niet. Je moet zelf de waarden nog op de juiste plek zetten.

Kopieer het handeltje vanaf $voorletters=$_POST['voorletters'] tot en met $compostwormen=$_POST['compostwormen'] naar het einde, net voordat je het commando mail(...) geeft. Dan werkt het.
Op dit moment worden die commando's immers alleen uitgevoerd wanneer er een probleem is met het formulier:    if(@sizeof($blank_array) > 0 or @sizeof($bad_format) > 0)

Let op, je moet dus kopieren en niet verplaatsen anders werkt het juist weer niet wanneer het formulier verkeerd wordt ingevuld.

Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl