Fout in Formulier plaatsen in DB

Status
Niet open voor verdere reacties.

Jeboem

Gebruiker
Lid geworden
18 jan 2002
Berichten
178
Hoi,

Ik zit met een klein probleempje.
Ik heb ooit voor een collega een scriptje in mekaar geflanst.
Dit is al enkele jaren geleden. Nu heb ik sinds kort ( of al een lange tijd) een probleem met een formulier die geplaats moet worden in een db.
Het probleem zit hem in dat kleine stukken tekst in een text area zonder moeite geplaats worden, maar zo gauw het redelijke grote stukken text worden krijg ik deze fout melding:

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 's Gravelandseweg uitgestuurd omdat hij binnen stond te roken. ', 'exoten', '', '' at line 2

Stukje code waar het over gaat:

PHP:
<?php
			
			$adv_prijs = $_POST['adv_prijs'];
			$adv_onderwerp = $_POST['adv_onderwerp'];
			$adv_omschr = $_POST['adv_omschr'];
			
			$Submit = $_POST['Submit'];
			$adv_rubriek = $_POST['adv_rubriek'];
			$User = $_SESSION['User'];
			$adv_soort = $_POST['adv_soort'];

			$controle = "1";

			if ($adv_prijs=='') { 
			Echo "U hebt geen prijs in gevuld.<br>";
			$controle = "0";} else { $control = "1"; }
			if ($adv_onderwerp=='') {
			Echo "U dient in te vullen wat zoekt of verkoopt.<br>";
			$controle = "0";} else { $control = "1"; }
			if ($adv_omschr=='') {
			Echo "U hebt geen omschrijving in gevuld. <br>";
			$controle = "0";} else { $control = "1"; }
					
			If ($controle=="0") {
			echo "<br> klik <a href=javascript:history.back()>hier</a> om terug te gaan <br>";} else {
						
			if ($Submit) {
			
						
			mysql_connect("$Host", "$Login", "$Wachtwoord");
			mysql_select_db("$DBNaam");
			
			/* upload foto */
			
	  
	   global $_FILES; 
       $filename = $_FILES['foto']['name']; 
	   if(isset($_POST['newname'])) {
	    
    $uploadname = $_POST['newname']; }
else 
				{ $uploadname = $_FILES['foto']['name']; } 

if (is_uploaded_file($_FILES['foto']['tmp_name'])) {  
    move_uploaded_file($_FILES['foto']['tmp_name'], "fotos/" . $uploadname);  
}
            $datum = time();
			$date = date("d-m-Y H:i:00");
			$sql = "INSERT INTO va_adv (adv_prijs, adv_onderwerp, adv_omschr, adv_rubriek, adv_foto, user_id, adv_soort, adv_date, adv_datum) VALUES
			('$adv_prijs', '$adv_onderwerp', '$adv_omschr', '$adv_rubriek', '$uploadname', '$User', '$adv_soort', '$date', '$datum')" or die (mysql_error());
			mysql_query($sql) or die (mysql_error());
			
			Echo "Uw advertentie is succesvol geplaatst";
			}
			else {
			Echo "Uw advertentie is niet geplaatst, Probeer het nog een keer";
			Echo "klik <a href=javascript:history.back()>hier</a> om terug tegaan";
			}}

Iemand enig idee wat hiet fout gaat????

Alvast bedankt voor de Moeite!

Greetz Jeroen
 
Dat heeft met de quotes te maken, niet met de lengte.

Quotes worden in php gebruikt om stukken code af te bakenen. Als je in een query quotes gebruikt zal php dus een error geven omdat de code dan niet meer klopt.

Om dit op te lossen kun je bij de insertquery de $variabele vervangen door mysql_real_escape_string($variabele). Probeer regel 50 eens te vervangen door
PHP:
('".mysql_real_escape_string($adv_prijs)."', '".mysql_real_escape_string($adv_onderwerp)."', '".mysql_real_escape_string($adv_omschr)."', '".mysql_real_escape_string($adv_rubriek)."', '".mysql_real_escape_string($uploadname)."', '".mysql_real_escape_string($User)."', '".mysql_real_escape_string($adv_soort)."', '".mysql_real_escape_string($date)."', '".mysql_real_escape_string($datum).')" or die (mysql_error());
en kijk of dat werkt.
 
Hey super bedankt!!!!
Hij werkt weer perfect!
Je was wel een " vergeten op het einde bij
PHP:
'".mysql_real_escape_string($datum).')
moet zijn
PHP:
 '".mysql_real_escape_string($datum).'")
(mocht iemand hier nog wat aan hebben ooit)
maar eeuh nog ff vraagje tussen door.
Is dit sinds php 5 dat dit zo moet? of is dit al sinds veel langere tijd?

greetz Jeroen
 
Moet altijd al.

Zonder een escape_string is je query ook niet veilig trouwens, dan kunnen hackers je database uitlezen en/of verwijderen, dus ik zou er even op letten dat je overal waar je gebruikersinput in de database zet, je er een escape_string overheen haalt.
 
Of prepared statements, heb je dat gezanik helemaal niet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan