Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[php+xhtml]rare margin + textkleur naar default

Pagina: 1
Acties:

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
Ik ben dus een mailform aan het maken in php.
Nu heb ik een table toegevoegd zodat ik de dingen wat kan uitlijnen.

Nu vanaf dat ik de table heb toegevoegd (of gewoon een samenloop van omstandigheden)
heb ik de volgende 2 problemen:
1) er is precies nogal wat "padding" verschenen tussen mijn menu en mijn form
2) de tekstkleur van de dingen in de table wordt zwart i.p.v. wit die voor de hele pagina geldt.

De php echo die boven het form staat verschijnt wel netjes vlak onder het menu.

Nu vroeg ik me af of iemand mij de oorzaak kon vertellen want ik kon niet direct iets vinden op google.
De problemen zelf zijn snel genoeg opgelost door aan de table een witte font kleur + negatieve top margin toe te wijzen maar ik ben nogal nieuwsgierig.

Wat het helemaal raar maakt is dat zelfs margin-top: -0px; het 1ste probleem oplost.

Prentje van de spacing:
http://img152.imageshack.us/img152/4804/exampleax5.jpg

php code (advies mag altijd als je een andere fout ziet)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
        $errorName = '';
        $errorEmail = '';
        $errorSubject = '';
        $errorMessage = '';
        $errors=1;
        
    if($_SERVER['REQUEST_METHOD'] == "POST")
    {
        $errors=0;
        
        if(isset($_POST['name'],$_POST['email'],$_POST['subject'],$_POST['message']))
        {
            if(strlen($_POST['name']) < 1){
                $errorName = 'Please fill in your name';
                $errors+=1;
            }
            
            if(!eregi("^([a-z0-9_-])+([a-z0-9_.-])*@([a-z0-9_-])+(\.[a-z0-9_-]+)+$", $_POST['email'])){
                $errorEmail = 'You\'ve enterend an invaled e-mail adress.';
                $errors+=1;
            }

            if(strlen($_POST['subject'])<1){
                $errorSubject = 'Please fill in the subject';
                $errors+=1;
            }
                
            if(strlen($_POST['message'])<1){
                $errorMessage = 'Please fill in the message area';
                $errors+=1;
            }
            
            if($errors==0){
                $headers = "From: ".$_POST['name']." <".$_POST['email'].">\r\n";
                mail("x@gmail.com", $_POST['subject'],$_POST['message'], $headers);
            }

        }
    }
    
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head> 
    <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />
    <link rel='stylesheet' type='text/css' href='main.css' />
<title>
    Contact
</title>
</head>
<body>
<div id='border'>
<div id='borderpadding'>
<div id='header'></div>
<div id='menu'>
    <ul>
        <li><a href="index.html">index</a></li>
        <li><a href="articles.html">articles</a></li>
        <li><a href="projects.html">projects</a></li>
        <li><a href="resume.html">resume</a></li>
        <li><a href="contact.html">contact</a></li>
        <li><a href="links.html">links</a></li>
    </ul>
    <div id='clearboth'></div>
</div>
<div id='main'>
<?php
    if($errors==0)
        echo '<div>Your e-mail was succesfully sent</div>';
?>
            <form action="index.php" method="post">
                <table>
                    <tr><td id='form1'>Name:</td><td id='form2'><input id="name" type="text" size='40' name="name"<?php if(isset($_POST['name'])) echo ' value="'.$_POST['name'].'"'; ?> tabindex="1" /></td><td id='form3'><?php echo $errorName ?></td></tr>
                    <tr><td id='form1'>Email:</td><td id='form2'><input id="email" type="text" size='40'name="email"<?php if(isset($_POST['email'])) echo ' value="'.$_POST['email'].'"'; ?> tabindex="2" /></td><td id='form3'><?php echo $errorEmail ?></td></tr>
                    <tr><td id='form1'>Subject:</td><td id='form2'><input id="subject" type="text" size='40'name="subject"<?php if(isset($_POST['subject'])) echo ' value="'.$_POST['subject'].'"'; ?> tabindex="3" /></td><td id='form3'><?php echo $errorSubject ?></td></tr>
                </table>
                    <span id='form1'>Message:</span><span id='form3'><?php echo $errorMessage ?></span><br/><textarea cols="60" rows="8" id="message" name="message" tabindex="4"><?php echo isset($_POST['message']) ? $_POST['message'] : '' ; ?></textarea><br/>    
                    <input id="submit" type="submit" value="Send" tabindex="5"/>
            </form>

</div>
</div>
</div>
<div id='bottom'>
Copyright by Simon Verhoeven
</div>
</body>
</html>


css
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
html {
    height: 100%;
    padding-top:10px;
}

body{background-color: #666666;
    height: 100%;
}

#header {
    height: 160px;
    background-image: url(images/header.png);
}

#border{
    width: 964px;
    background-image: url(images/border.jpg);
    margin: 0 auto;
}

#borderpadding{
    padding: 7px;
}

#main{background-color: #000000;
    color: #FFFFFF;
    padding:10px;

}

#bottom{color: #FFFFFF;
    padding-top: 10px;
    padding-bottom: 10px;
    text-align:center;
}

#menu{
    background: #353535 url('images/navigation.jpg') repeat-x;
    border-bottom: 1px solid #FFFFFF;
    border-top: 1px solid #FFFFFF;
}

#menu ul {display: inline; margin: 0px;}

#menu ul li {
    border-right: 1px solid #ffffff;
    float: left;
    list-style: none;
}

#menu a {
    color: #AAA;
    display: block;
    font: bold 1em Verdana,sans-serif;
    padding: 12px 14px;
    text-decoration: none;
}
#menu a:hover {
    background: #444;
    color: #E5E5D5;
    text-decoration: none;
}

#clearboth {clear: both;}

#form1 {width:60px;}

#form3 {color: #FF0000;
    font-weight: bold;}

[ Voor 6% gewijzigd door Simon Verhoeven op 19-10-2008 21:29 . Reden: mijn e-mail adres weggehaald, code geupdate ]


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Heb je je code weleens door een (html) validator gehaald?
Je mag bijvoorbeeld geen br elementen gebruiken direct in het table element (dus na het afsluiten van een tr).

Het in orde maken van je html code zal de boel al een heel eind oplossen vermoed ik. Daarnaast heeft een form element in de meeste browsers standaard een margin, waardoor er automatisch ruimte ontstaat tussen je menu en de form tag.

Het is ook niet toegestaan om één ID meerdere keren te gebruiken een ID dient uniek te zijn. Gebruik liever classnames als het doel van de ID is om de content te stylen.

Daarnaast is de kleur van content in de tabel met je huidige code gewoon wit in mijn browsers (Firefox 3 en IE 6).

If I can't fix it, it ain't broken.


  • Saeverix
  • Registratie: Maart 2002
  • Laatst online: 14-11 12:20
De br tags zijn daar volgens mij ook helemaal niet nodig... Je gebruikt immers een tabel om te boel goed te plaatsen.

En het is even wennen, maar misschien is het aan te raden een 'reset' stylesheet te gebruiken.
Die stylesheet zorgt ervoor dat alle margins en paddings op 0 komen te staan. Op die manier zal het in alle browsers hetzelfde eruit komen te zien. En ben je er zeker van dat jij alle touwtjes in handen hebt wat betreft de layout van je site...

Een voorbeeld is hier te vinden: http://meyerweb.com/eric/tools/css/reset/
Maar een zoekopdracht in google zal je ook genoeg opleveren.

[ Voor 13% gewijzigd door Saeverix op 19-10-2008 19:36 ]

People who live in glass houses shouldn't throw stones.


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
Doh, ik was inderdaad vergeten om de <br/> tags weg te halen.
Die stonden er nog omdat ik eerst geen table gebruikte maar voor het overzicht er maar 1 bijgestopt.

De achtergrond is normaal zwart met witte tekst.
Maar als (en dan ook enkel als) het formulier helemaal correct wordt ingevuld wordt + gesubmit dan worden: name, e-mail & subject in zwart weergegeven. (of een andere kleur die niet zichtbaar is op een zwarte achtergrond).

Als ik dan terug bvb subject leeg maak dan worden die 3 dingen terug wit weergegeven.

Dan denk ik richting foutje in de css of onafgesloten div maar ik zie nergens een onafgesloten div, noch geeft een validator er één aan.

Zal morgen nog eens naar de fout kijken, zal toch waarschijnlijk een erg lompe fout zijn omdat ik erg moe ben.

[ Voor 15% gewijzigd door Simon Verhoeven op 19-10-2008 21:30 ]


  • Saeverix
  • Registratie: Maart 2002
  • Laatst online: 14-11 12:20
Even over je PHP code:
Waarom maak je aan het begin van je code allemaal lege variabelen aan die je later gebruikt? Heeft volgens mij geen toegevoegde waarde...

Dit zelfde geld voor $errors... In het begin van je script geef je die de waarde 1 waarna je hem gelijk weer waarde 0 geeft in je IF statement.

En als laatste de manier om $errors met 1 op te hogen:
PHP:
1
2
3
$errors+=1;
//kun je vervangen door
$errors++;


Om je probleem met tekstkleuren beter te kunnen bekijken moet je je script even ergens online zetten, zodat ik ook de output html kan bekijken.

People who live in glass houses shouldn't throw stones.


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
Umh alles staat eigenlijk in de startpost, het enigste dat ik momenteel al heb aangepast dat al iets oplost is de <br/>'s weghalen.

En over de code:
de lege variabelen maak ik aan omdat bvb <?php echo $errorName ?> anders raar doet.
$errors geef ik 1 mee omdat anders meteen aan
code:
1
2
3
if($errors==0)
        echo '<div>Your e-mail was succesfully sent</div>';
?>

voldaan is.

Verwijderd

Saeverix schreef op zondag 19 oktober 2008 @ 21:02:
Even over je PHP code:
Waarom maak je aan het begin van je code allemaal lege variabelen aan die je later gebruikt? Heeft volgens mij geen toegevoegde waarde...

Dit zelfde geld voor $errors... In het begin van je script geef je die de waarde 1 waarna je hem gelijk weer waarde 0 geeft in je IF statement.

En als laatste de manier om $errors met 1 op te hogen:
PHP:
1
2
3
$errors+=1;
//kun je vervangen door
$errors++;


Om je probleem met tekstkleuren beter te kunnen bekijken moet je je script even ergens online zetten, zodat ik ook de output html kan bekijken.
Het initialiseren van variabelen is juist netjes, dit voorkomt vaak bugs.

Ik zou me eerder zorgen maken om de mail injections die de TS open laat waardoor z'n mailform eenvoudig door spammers misbruikt kan worden.

@TS: Waarom precies heb je eigenlijk gekozen voor XHTML?

[ Voor 3% gewijzigd door Verwijderd op 19-10-2008 21:33 ]


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
Op welk vlak laat ik nog iets open voor mail injections?
Ik dacht dat de mail controle in orde was? (klaagt in ieder geval over bvb test@test.com\n) of heb ik iets over het hoofd gezien?

En keuze voor xhtml: ken gewoon nog zo goed als niets over php.

Verwijderd

Simon Verhoeven schreef op zondag 19 oktober 2008 @ 21:42:
Op welk vlak laat ik nog iets open voor mail injections?
Ik dacht dat de mail controle in orde was? (klaagt in ieder geval over bvb test@test.com\n) of heb ik iets over het hoofd gezien?
Weet je wat mail injections zijn? Je hebt namelijk geen enkele beveiliging erin zitten om dit tegen te gaan.
En keuze voor xhtml: ken gewoon nog zo goed als niets over php.
Wat heeft HTML/XHTML met PHP te maken? Niets dus.

Er moet toch een reden zijn waarom je ervoor gekozen hebt?

[ Voor 5% gewijzigd door Verwijderd op 19-10-2008 21:48 ]


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
1)[PHP & Mysql] mysql injection tegengaan
2)ik volg niet helemaal, wat wil je nu juist weten? Waarom zou ik niet voor xhtml kiezen?

Verwijderd

Wat hebben MySQL injections te maken met mail injections? 8)7

Je doet niet eens iets met MySQL... :?
2)ik volg niet helemaal, wat wil je nu juist weten? Waarom zou ik niet voor xhtml kiezen?
Waarom zou je wel voor XHTML kiezen? Gezien je huidige opbouw lijkt me juist HTML de beste keuze, zeker als je nog net aan het beginnen bent.

[ Voor 3% gewijzigd door Verwijderd op 19-10-2008 22:00 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 13-11 13:40

André

Analytics dude

PHP = Programming

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
't is zondagavond en ik ben moe, brainfarts mogen.
Dacht dat mail injection gewoon was dat ze via een newline teken o.d. in de from line extra e-mail adressen ingeven en zo die in cc proppen.

Verwijderd

Simon Verhoeven schreef op zondag 19 oktober 2008 @ 22:02:
't is zondagavond en ik ben moe, brainfarts mogen.
Dacht dat mail injection gewoon was dat ze via een newline teken o.d. in de from line extra e-mail adressen ingeven en zo die in cc proppen.
Bijna goed.

Het is in feite de techniek om extra informatie in je headers te stoppen. Dat gaat dus veel verder dan alleen het e-mail adres maar in feite over alles wat in de header terecht komt. Dit kan zijn direct doordat je zelf variabelen in de header plaatst of indirect doordat je de to en subject waarde opgeeft aan de mail functie met variabelen.

Je moet dus alles wat de header in gaat netjes parsen en filteren om misbruik te voorkomen. Een snelle search met Google geeft me letterlijk miljoenen resultaten, daar moet iets bij te vinden zijn dus, ook op zondagavond.

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
Dat brainfart gedeelte sloeg op de verkeerde link voor nr1 ;)
En zijn inderdaad genoeg dingen te vinden, bedankt om me erop te wijzen.

Ok, dit is dus raar.
Ik heb het snel even geupload ( http://cineklubrumst.be/Simon/index.php ) en daar wordt het blijkbaar juist weergegeven. (moet gewoon nog die id's vervangen door class en die foutcontrole).
Zou het kunnen dat de dingen in het zwart werden weergegeven doordat er als ik het lokaal met usb webserver doe:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Users\simon\Desktop\test 3\index.php on line 36
bovenaan staat?
Lijkt me wat vergezocht maar dat is het enigste verschil tussen lokaal en online of moet ik nog verder zoeken?

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Simon Verhoeven schreef op zondag 19 oktober 2008 @ 22:22:


Ok, dit is dus raar.
Ik heb het snel even geupload ( http://cineklubrumst.be/Simon/index.php ) en daar wordt het blijkbaar juist weergegeven. (moet gewoon nog die id's vervangen door class en die foutcontrole).
Zou het kunnen dat de dingen in het zwart werden weergegeven doordat er als ik het lokaal met usb webserver doe:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Users\simon\Desktop\test 3\index.php on line 36
bovenaan staat?
Lijkt me wat vergezocht maar dat is het enigste verschil tussen lokaal en online of moet ik nog verder zoeken?
Dat kan er wel degelijk mee te maken hebben. Doordat je invalid (x)html output voordat je doctype / html begint kan je pagina in een andere mode gerenderd worden door je browser.

If I can't fix it, it ain't broken.


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
Interessant, ik had dan eigenlijk verwacht dat het dan op alles effect zou hebben en niet enkel hetgeen binnen de table.
Bedankt voor de hulp.

Nu eventjes inpikken op dat mail injection gedeelte.
Is een oplossing zoals voorgesteld op http://dynom.nl/antispam/ voldoende of ga ik best nog wat grondiger?

[ Voor 36% gewijzigd door Simon Verhoeven op 19-10-2008 23:13 ]


  • Saeverix
  • Registratie: Maart 2002
  • Laatst online: 14-11 12:20
Simon Verhoeven schreef op zondag 19 oktober 2008 @ 21:26:
Umh alles staat eigenlijk in de startpost, het enigste dat ik momenteel al heb aangepast dat al iets oplost is de <br/>'s weghalen.
De werkelijke code kan er anders uitzien dan de broncode... Door bijvoorbeeld de verschillende ECHO's die je gebruikt. Daarom is het handig om de uiteindelijke code te kunnen zien.
En over de code:
de lege variabelen maak ik aan omdat bvb <?php echo $errorName ?> anders raar doet.
Het "ECHOen" van een variable die niet bestaat zou normaal gesproken geen error moeten geven. Maar ik las dat je werkt met USB webserver, welke allemaal "aparte" instellingen heeft. Het hangt dus af van de configuratie van je host of je een foutmelding krijgt of niet...
$errors geef ik 1 mee omdat anders meteen aan
code:
1
2
3
if($errors==0)
        echo '<div>Your e-mail was succesfully sent</div>';
?>

voldaan is.
Ah ok, op die manier. Daar heb ik overheen gelezen. Daar is in principe niets mis mee dan.

Maar om mijn post niet helemaal nutteloos te laten zijn: De manier die ik je liet zien op je $errors met 1 op te hogen heb je vast wel wat aan...
Verwijderd schreef op zondag 19 oktober 2008 @ 21:31:
[...]

Het initialiseren van variabelen is juist netjes, dit voorkomt vaak bugs.
Op die manier heb ik het nooit bekeken. Ik weet dat het zonder werkt, dus vandaar mijn opmerking. Ik weet ook nog niet alle details van PHP en problemen waar je tegenaan kunt lopen aangezien ik ook nog maar een half jaar met PHP bezig ben.

People who live in glass houses shouldn't throw stones.


  • skabouter
  • Registratie: Oktober 2000
  • Laatst online: 03-10 09:21

skabouter

Skabouter

Saeverix schreef op maandag 20 oktober 2008 @ 00:08:
Het "ECHOen" van een variable die niet bestaat zou normaal gesproken geen error moeten geven. Maar ik las dat je werkt met USB webserver, welke allemaal "aparte" instellingen heeft. Het hangt dus af van de configuratie van je host of je een foutmelding krijgt of niet...
Wel als je php 5 draait, want dan staat error)reporting standaard wat stricter ingesteld.

[ Dislect ]


  • Saeverix
  • Registratie: Maart 2002
  • Laatst online: 14-11 12:20
skabouter schreef op dinsdag 21 oktober 2008 @ 14:05:
[...]


Wel als je php 5 draait, want dan staat error)reporting standaard wat stricter ingesteld.
Wat je zegt klopt dus niet... Het is maar net wat je Host ingesteld heeft. In mijn geval staat het uit.
Daarom zei ik hierboven ook dat het afhangt van de instellingen op de server.

People who live in glass houses shouldn't throw stones.


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
Ach, beter op veilig spelen.
Als ik gewoon programmeer initialiseer ik ook liever mijn variabelen.

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 18:25
Saeverix schreef op dinsdag 21 oktober 2008 @ 14:46:
[...]

Wat je zegt klopt dus niet... Het is maar net wat je Host ingesteld heeft. In mijn geval staat het uit.
Daarom zei ik hierboven ook dat het afhangt van de instellingen op de server.
Op een ontwikkelomgeving moet je eigenlijk altijd error_reporting op strict zetten.
Het uitzetten is bedoelt voor productieomgevingen zodat de gebruikers niet lastiggevallen worden met php errors, en je bij een error niet eventueel gevoelige informatie blootsteld.

Jouw applicaties zitten dus eigenlijk bomvol fouten, ook een notice is een fout.
Simon Verhoeven schreef op dinsdag 21 oktober 2008 @ 15:36:
Ach, beter op veilig spelen.
Als ik gewoon programmeer initialiseer ik ook liever mijn variabelen.
Precies.

Verwijderd

Nou draai je het wel een beetje om.

Het is niet fout omdat er een notice komt, er komt een notice omdat het fout is ;)

Het niet initialiseren van variabelen is an sich niet fout, je kunt gerust een programmeertaal hebben waarbij gegarandeerd wordt dat variabelen leeg zijn als je ze niet initialiseert. PHP doet dit ook, echter PHP heeft ook de geweldige *kuch* register globals functie waardoor er variabelen ineens niet leeg zijn maar gevuld met een waarde. En erger nog, de gebruiker heeft de macht die waarde te bepalen.

Er zijn niet heel veel programmeertalen die je een variabele ongeinitialiseerd laten gebruiken zonder op z'n minst een warning te geven. Dit omdat de programmeur wel echt moet opletten wat ie doet als ie z'n variabele niet initialiseerd. Je ziet vaak dat de programmeur dan later verwacht dat een bepaalde variabele wel een waarde heeft maar deze niet heeft doordat er een fout zit in een eerder stuk code. Een niet geinitialiseerde waarde kan dan hele vreemde effecten geven, terwijl het initialiseren op een goed gekozen waarde exact voorspelbare resultaten geeft.

Het initialiseren van variabelen maakt dus over het algemeen je leven als programmeur iets makkelijker vandaar dat PHP (en veel andere talen) netjes een warning/notice/fatal error/exception etc geven als je een niet geinitialiseerde variabele gebruikt.

Dit is dus niet per definitie fout, maar heel vaak wel, vandaar de notice.

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 18:25
Verwijderd schreef op dinsdag 21 oktober 2008 @ 18:08:
Nou draai je het wel een beetje om.

Het is niet fout omdat er een notice komt, er komt een notice omdat het fout is ;)
Ja ok, beetje verkeerd uitgelegd, de notice wordt gegooid door een fout ;)
Pagina: 1