Beste lezers,

Ten eerste zal ik zeggen dat ik nu enige tijd bezig met PHP(eigenlijk nu bijna 3 maanden, toen ik al een tijdje bezig was met de opleiding informatica).

Ik heb opzich inmiddels een aardige basis maar ik kan nog niet heel erg goed phpen dus ik hoop dat jullie me verder kunnen helpen met een klein probleempje waar ik mee zit. Mijn probleem is als volgt:

Ik gebruik een content-editor zodat ik zelf nieuws kan toevoegen op mijn pagina. (Ja dit kan via een textarea maar op deze manier kan ik gemakkelijk dingen dik gedrukt maken en ook werkelijk zien in mijn textarea(en nog veel meer)). Op het moment dat ik de tekst uit het textarea haal, encode die dat naar een String. Maar als ik nou wil dat ik ook single quotes kan toevoegen, zodat mensen bijvoorbeeld 't kunnen typen in het textarea, lukt dat niet.

De code die ik gebruik om het nieuws erin te zetten is als volgt:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$titel = htmlentities($_POST['titel']);
$content = htmlentities($_POST['content']);
$content = str_replace("\n", "<br>", $content);

if (empty($titel))
die("Voeg alstublieft de titel toe.");
if (empty($content))
die("Voeg alstublieft inhoudt toe.");

$link = "INSERT INTO content_tb VALUES(0, '$titel', NOW(), '$content')";
$res = mysql_query($link) or die("Er is iets fout gegaan.");
if ($res) {
die("Het nieuws is succesvol toegevoegt.<br /><br />Klik <a href='http://dorpsraadloenenaandevecht.nl/'>hier</a> om het nieuws te bekijken of <br /><br /> klik <a href='index.php'>hier</a> om terug te gaan.");
} else {
die("Er is iets fout gegaan in het systeem.");
}


Ik ben er al even mee bezig geweest. Ik heb het een en ander geprobeerd met str_replace, mysql_real_escape_string(), preg_replace, maar ik heb nog geen succes gehad. Dit kan ook komen omdat ik nog niet echt ervaren ben, aangezien ik soms ook totaal niet kon begrijpen wat er uitgelegd werd op het internet.

Ik hoop dat jullie mij iets verder op weg kunnen helpen en in ieder geval bedankt voor het nemen van de moeite!

Met vriendelijke groet,
Thomas Helling
- SanThe - op 04/01/2012 23:31:09

Geen htmlentities() in de database zetten, alleen mysql_real_escape_string() gebruiken. Je script is nu lek. Als je het later op de site gaat zetten gebruik je htmlentities() en nl2br().


Je hebt hier nog niks mee gedaan.

[size=xsmall]Toevoeging op 05/01/2012 13:44:16:[/size]

<?php
$link = "INSERT INTO content_tb
(
// hier moeten de tablenamen komen waarin de data komt
)
VALUES
(
0,
'" . mysql_real_escape_string($_POST['titel'] . "',
NOW(),
'" . mysql_real_escape_string($_POST['content'] . "'
)";
?>
Sorry voor de late reactie, ik kom net terug van werk.( ja ik weet het ambtenaar dagen) ^^. Ja ik heb het geprobeerd maar het werkt echter niet.
Ik snap het echt niet want het werkt nog steeds niet, altijd nog steeds dezelfde error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't')' at line 1.

Heeft echt niemand een ideetje?
En zo?
<?php
$link = "INSERT INTO content_tb
(
// hier moeten de tablenamen komen waarin de data komt
)
VALUES
(
0,
'" . mysql_real_escape_string(stripslashes($_POST['titel']) . "',
NOW(),
'" . mysql_real_escape_string(stripslashes($_POST['content']) . "'
)";
?>
Op een of andere manier, werkt die nu wel! Ik snap echt niet wat er mis kon zijn maar jouw kleine scriptje heeft me wel geholpen:


<?php
$link = "INSERT INTO content_tb 
    (
        // hier moeten de tablenamen komen waarin de data komt
    )
    VALUES
    (
        0,
        '" . mysql_real_escape_string($_POST['titel'] . "', 
        NOW(), 
        '" . mysql_real_escape_string($_POST['content'] . "'
    )";
?>


Ik heb wel mijn code wat opgeschoond maar volgens mij niet dingen aangepast die er ook een rol bij kunnen spelen lijkt me.

In ieder geval helemaal bedankt, en ik zou zeggen tot de volgende keer maar weer! ^^
Aaron - op 05/01/2012 13:16:32

misschien moet je eens kijken naar de "magic quotes".


Dat staat waarschijnlijk aan.
Vandaar stripslashes().
Kris Peeters op 05/01/2012 10:45:15

[quote="Erwin H op 05/01/2012 09:32:29"]
Gebruik geen empty() om te controleren of variabelen wel of niet gezet zijn. isset() met eventueel waarde checks zijn veel beter.


Dat hangt er van af.
Dat zijn twee functies die je om andere redenen gebruikt.[/quote]
En wat als iemand hier voor titel "0" meegeeft? Gaat empty op nat. Want "0" of 0 wordt als leeg gezien.
Daarnaast gebruik je in je voorbeeld
$titel = trim($_POST['titel']);
Zonder eerst met isset te kijken of $_POST['titel'] wel bestaat. Ga je nog een keer nat.

Daarvoor, je voorbeeld is niet goed. Veel beter is om gewoon op een bestaande waarde te testen (isset()) en daarna te kijken of het aan je eisen voldoet met normale checks, niet met empty().

Erwin, normaal gaat $_POST['titel'] niet leeg zijn en anders krijg je toch een error van PHP en als je het wilt voeg je makkelijk een isset toe...

Zelf zou ik bijvoorbeeld dit gebruiken:

<?php
# Even $code toevoegen:
$code = 'Dit is een test.';

# Standaard variabele:
$error = '';
# Kijken of $code bestaat:
if(isset($code)) {
    if(strlen($code) < 5)) {
        $error .= 'Voeg meer code toe.';
    }
    # Als er een maximum is:
    if(strlen($code) > 1500)) {
        $error .= 'De code is te lang.';
    }
}
# Als $code niet bestaat:
else {
    $error .= 'De variabele $code bestaat niet!';
}
?>
Aaron - op 05/01/2012 19:03:27

Erwin, normaal gaat $_POST['titel'] niet leeg zijn en anders krijg je toch een error van PHP en als je het wilt voeg je makkelijk een isset toe...

Je bedoelt dat je vertrouwt op het feit dat de gebruiker het wel goed doet? Big no-no natuurlijk.
Of, als hij dat niet doet, dan vind je het niet erg dat er een vreemde foutmelding op het scherm komt waar de gebruiker niets van snapt? Nog een big no-no wat mij betreft.

Gewoon controleren of alles klopt, dan weet je 1) zeker dat je geen vreemde troep in je variabelen krijgt en dus dat er niets mis gaat en 2) dat je een nette melding kan maken aan de gebruiker als het toch fout gaat.

Kijk even hierboven hoe ik het zou doen Erwin :p. Ik weet ook wel dat je moet kijken of de gebruiker het formulier niet gemanipuleerd heeft of dat het gewoon compleet is.

De code hierboven zou je ook wel de kortere versie van PHP kunnen gebruiken...
Bijvoorbeeld inderdaad.

Reageren