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 (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!
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().
hmm, ik had inderdaad wel gelezen dat mysql_real_escape_string() tegen sql injections was. Ik heb wel al enige beveiliging op de website gezet en er worden eigenlijk alleen maar dingen uitgelezen in het open gedeelte. Maar to the point:
Als je het later op de site gaat zetten gebruik je htmlentities() en nl2br().
Ik heb nu zeg maar
mysql_real_escape_string($_POST['content']);
ipv gebruik van htmlentities. Maar ik krijg helaas nog steeds de foutmelding van SQL Syntax met 't op het moment dat ik probeer het te uploaden naar de database..
<?php
# Als er op POST is geklikt:
if($_SERVER['REQUEST_METHOD'] == 'POST') {
# Standaard variabele:
$error = '';
# Invoervelden naar variabelen:
$titel = trim($_POST['titel']);
$content = trim($_POST['content']);
# Nu gaan we kijken of alles goed is (lengte en dergelijke).
# Check de titel:
if(isset($titel)) {
if(strlen($titel) == 0) {
$error .= 'Voeg a.u.b. een titel toe.';
}
}
# Als titel niet bestaat:
else {
$error .= 'Er is geen titel!';
}
# Check de textarea content:
if(isset($content)) {
# Ik zou strlen verhogen:
if(strlen($content) == 0) {
$error .= 'Voeg a.u.b. meer content toe!';
}
}
# Textarea bestaat niet:
else {
$error .= 'Er is geen content!';
}
# Als er geen errors zijn, gaan we alles
# toevoegen aan de database:
if($error == '') {
# Eventueel kun je hier nog checken of er al een bericht zoals
# deze in de database zit. (Ga ik nu niet doen)
# Ik denk niet dat NOW() bij een insert lukt, dus hier een ommetje.
# De output zal zo zijn: jaar-maand-dag uur:minuten:seconden.
# Als je dit wilt veranderen, kijk eens naar de date functie van PHP:
$date = date('Y-m-d H:i:s');
# Connectie met de database:
$conn = mysqli_connect('localhost', 'root', 'password', 'database');
# Alles toevoegen:
$insert = mysqli_query($conn, "INSERT INTO content_tb (veldnaam1,veldnaam2,veldnaam3,veldnaam4)
VALUES (
'0',
'".mysqli_real_escape_string($conn, $titel))."',
'".$date."',
'".mysqli_real_escape_string($conn, $content)."')") or trigger_error('Er kon geen database connectie gemaakt worden.');
# Kijken of alles in de database zit:
if($insert) {
echo 'Het artikel is succesvol toegevoegd.';
}
else { # Als het niet succesvol is:
echo 'Het artikel kon NIET worden toegevoegd.';
}
}
# Alle errors tonen aan de mensen:
echo $error;
}
?>
Bij je insert heb/had je de NOW() functie die denk ik alleen bij het ophalen werkt. En ook had je een er een 0 staan zonder ' tags erond, dus heb ik die ook even toegevoegd.
Ook had je geen veldnamen opgegeven, zie vooral de code bij $insert. Ook had ik een bedenking bij dat je een 0 erbij steekt... Je kunt toch gemakkelijk een DEFAULT in je database stoppen? :p
Gebruik geen empty() om te controleren of variabelen wel of niet gezet zijn. isset() met eventueel waarde checks zijn veel beter.
NOW() kan je prima in een insert gebruiken. Veel makkelijker dus dan eerst een datum aan te maken in php.
Erg bedankt voor de moeite.
Even onthouden mijn php script werkt wel gewoon, alleen niet met single quotes in de variabele $content. Het is trouwens ook zo dat als ik gewoon \'t type dat het dan wel goed gaat. Ik heb addslashes ook wel geprobeerd, als addslashes($content), maar geen succes.
Voor de rest wil ik jullie sowieso al heel erg bedanken voor jullie reacties en ik hoop dat jullie me nog iets verder kunnen helpen! ^^. Ik zal mijn script inderdaad wel iets gaan moderniseren want als ik dit zo zie ziet het er wel wat duidelijker en ook beter voor mezelf uit om dat te doen.
In ieder geval heeft nog iemand suggesties wat het eventueel anders kan zijn(Aaron ik heb jouw script ook geprobeerd alleen die werkt ook niet..)
?Onbekende gebruiker
05-01-2012 13:16
Thomas, als ik dat hier zou proberen zou het hoogstwaarschijnlijk wel werken. Ik weet niet wat het zou kunnen zijn, misschien moet je eens kijken naar de "magic quotes".