Jump to content

PHP hulp!


Recommended Posts

Geplaatst:

Ik weet dat er een algemeen php hulp topic is, maar vermits ik nog wel wat vragen ga hebben stel ik ze hier maar. Ik ben vandaag begonnen met php, en leerde werken met echo, variablen en met formuliertjes. Nu had ik met behulp van een site een script in mekaar gezet.(wat hetzelfde is als die site, enkel zelfgetypt) maar het werkt niet.

<html>
<head>
<body>
<?php
// Controle voor formulier.
if( isset( $_POST['submit'] ) )
{
echo $_POST['voornaam'];
}
// Als het niet is toevoegd, laat dan het formulier opnieuw zien..
else
{
?>
<form action="test1.php" method="post">
<input type="text" name="voornaam" /><br />
<input type="submit" name="submit" value="Dit is mijn naam!" /><br />
</form>
<?php
}
?>

</body>
</head>
</html>

Ik kan wel een naam invoeren, maar als ik op submit druk gebeurt er niets. Via de get method krijg ik wel een url vanboven zoals test1.phpvoornaam=x, maar ik wil via de post method werken. Het zal wel een domme fout zijn, maar iemand een oplossing? :)

Geplaatst:

Hoi die-hard!

Ik heb het script even voor je op mijn eigen hosting gezet, omdat ik op het eerste gezicht de fout ook niet zag. Wat blijkt, er is helemaal geen fout! Het script werkt gewoon. Wat een eventuele oorzaak zou kunnen zijn is dat je host PHP niet ondersteunt? Het kan natuurlijk ook zijn dat je je bestand verkeerd hebt genoemd (het bestand moet test1.php heten), maar dit lijkt me sterk.

Kopieer de source zoals je die hierboven geplaatst hebt maar eens in een nieuw bestand, en ik denk dat het dan wel werkt, bij mij in ieder geval wel!

Als je nog verdere assistentie wil hebben: stuur me maar een PM of plaats het hier! Succes hè. :bier:

Geplaatst: (bewerkt)
Hoi die-hard!

Ik heb het script even voor je op mijn eigen hosting gezet, omdat ik op het eerste gezicht de fout ook niet zag. Wat blijkt, er is helemaal geen fout! Het script werkt gewoon. Wat een eventuele oorzaak zou kunnen zijn is dat je host PHP niet ondersteunt? Het kan natuurlijk ook zijn dat je je bestand verkeerd hebt genoemd (het bestand moet test1.php heten), maar dit lijkt me sterk.

Kopieer de source zoals je die hierboven geplaatst hebt maar eens in een nieuw bestand, en ik denk dat het dan wel werkt, bij mij in ieder geval wel!

Als je nog verdere assistentie wil hebben: stuur me maar een PM of plaats het hier! Succes hè. :bier:

Dat is kras: mijn host ondersteund php. Ik heb het zojuist geprobeerd met echo "hallo"; en dat werkte perfect. Kan je anders een link geven naar het bestand op jouw server? :)

Edit: excuseer mij, maar ik probeerde het in te voeren en op enter te drukken, je moett blijkbaar met je muis werken, jammer. Is hier een oplossing voor?

Bewerkt: door Die-hard
Geplaatst:

In principe zou allebei moeten werken, zowel met enter als met je muis. Een van de mogelijke oorzaken kan je internet browser zijn, sommigen zijn hier makkelijker in dan andere. Ik raad je hiervoor firefox(*) aan, als je dit al hebt, zal het hier niet aan liggen.

Een andere oorzaak kan zijn dat je niet de juiste forum geselecteerd hebt, deze kun je selecteren door gewoonweg in het input-vakje te klikken. Anders, dan weet ik het ook niet meer. :puh:

Geplaatst:
In principe zou allebei moeten werken, zowel met enter als met je muis. Een van de mogelijke oorzaken kan je internet browser zijn, sommigen zijn hier makkelijker in dan andere. Ik raad je hiervoor firefox(*) aan, als je dit al hebt, zal het hier niet aan liggen.

Een andere oorzaak kan zijn dat je niet de juiste forum geselecteerd hebt, deze kun je selecteren door gewoonweg in het input-vakje te klikken. Anders, dan weet ik het ook niet meer. :puh:

Als je op het input vakje klikt nog altijd, maar je moet met tab het selecteren blijkbaar, maar maakt niet uit. Nu iets anders, ter beveiliging en handigheid. Als je <b>naam</b> invoert zie je hem vetgedrukt. Dus je kan waarschijnlijk ook javascript invoeren vermoed ik. Hoe kan je dit voorkomen? (sorry voor vele vragen)

Geplaatst: (bewerkt)

Maakt niet uit hoor, zoveel vragen. Dit is inderdaad een reëel gevaar dat door veel webmasters wordt onderschat. Deze methode is in jouw geval niet zo heel gevaarlijk, maar met javascript kunnen o.a. cookies van gebruikers worden gestolen, en zo kunnen wachtwoorden en overige info worden achterhaald. Deze methode wordt "XSS", cross site scripting genoemd.

Om HTML-tags te neutraliseren heeft meneertje PHP de volgende functie ontwikkeld:

string strip_tags ( string $str [, string $allowable_tags] )

Oftewel in gewoon Nederlands, strip_tags. Deze haalt alle HTML uit je stukje text, in jouw geval dus:

$voornaam = strip_tags($_POST['voornaam']);
echo $voornaam;

Als je wilt dat de HTML-tags wel weergeven worden, maar niet als HTML (net als op dit forum dus), kun je dat als volgt doen:

$voornaam = htmlspecialchars($_POST['voornaam'], ENT_QUOTES);

Over beveiliging hoef jij je nu nog geen zorgen te maken, later bij grotere projecten waarschijnlijk wel. Ook voor beveiligingsvragen kun je bij mij terecht dus.

Bewerkt: door ViceAgent
Geplaatst:

Oké, het werkt(natuurlijk) perfect, dankjewel! Maar ik had nog eens een vraag, hoe het precies werkt. Misschien kan je dat uitleggen, want ik zou dat graag weten. Het gaat over het volgende:

echo $voornaam = htmlspecialchars($_POST['voornaam'], ENT_QUOTES);

Maar eigelijk geef je dus de waarde van $voornaam aan in het commando van echo zelf? Of begrijp ik dat verkeerd? En waarvoor staat de ENT_QUOTES ?

Alvast bedankt!

Geplaatst:

Ik zal dit even toelichten met een scriptje, bekijk het commentaar want daar zal het grotendeels in staan uitgelegd:

<?php
$voornaam = "Keesie"; // Een willekeurige variabele, zónder HTML.
$achternaam = "<i>Johannsen</i>"; // Een willekeurige variabele, met HTML.

echo htmlspecialchars($voornaam, ENT_QUOTES);
echo htmlspecialchars($achternaam, ENT_QUOTES);

Met de eerste waarde van htmlspecialchars (in dit geval dus $voornaam en $achternaam), geef je gewoon aan in welke variabele of in welke zin de HTML moet worden omgezet in tekens < en >. ENT_QUOTE is eigenlijk niet zo heel belangrijke en is dan ook een optionele tag. Deze kun je dus ook weg laten, maar om hem toch eventjes toe te lichten, dit geeft aan wat hij met quotes (deze dingetjes: " en ') moet doen. Er zijn 3 opties:

ENT_QUOTES: Beide quotes, " en ', worden omgezet.

ENT_NOQUOTES: Geen van beide wordt omgezet.

ENT_COMPAT: Alleen " wordt omgezet, met ' zal niets worden gedaan.

Dit is verder niet belangrijk.

Geplaatst:
echo $voornaam = htmlspecialchars($_POST['voornaam'], ENT_QUOTES);

Ik wil even toevoegen dat dit "onduidelijke" code is. De volgorde waarop dit uitgevoerd wordt is niet heel erg duidelijk, en afhankelijk van hoe de "parser" van php te werk gaat. Dit geval kun je beter opsplitsen in twee regels.

Wat hij waarschijnlijk "echo-ed" is een true of false: (correct me if I'm wrong...)

PHP vind een = belangrijker dan een echo, dus hij gaat eerst $voornaam vullen met het resultaat van de functie htmlspecialchars. Dit lukt waarshijnlijk wel. daarnaa doet hij een echo van het resultaat, en aangezien het lukt spuugd hij true.

het onduidelijke eraan is dat er twee statements op 1 regel staan (lees: voor de ; ). Dit is ook nog eens af te raden, omdat het gedrag maar zo kan veranderen bij vershillende PHP versies.

Geplaatst: (bewerkt)

Ik ben het met je eens dat dit niet de correcte vorm van PHP is, ik heb het in mijn uitleg ook gesplitst dus ik neem aan dat je je op Die-Hard richt en niet op mij. PHP zal echter geen true/false terugsturen, maar gewoon de waarde van '$_POST['voornaam']' (ook de HTML zal worden omgezet), ik heb dit eventjes getest omdat ik er ook niet zeker van was.

Ik ben 't dus met je eens dat dit heel slordig/incorrect staat, maar behaalt hetzelfde resultaat..

Bewerkt: door ViceAgent

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...