Formulier werkt niet -- Geen gegevens naar MySQL db

Status
Niet open voor verdere reacties.

thebeatproducer

Gebruiker
Lid geworden
10 jan 2010
Berichten
19
Hallo Luitjes,

Ik zit al een tijdje met een probleem:

Mijn formulier geeft geen gegevens door, tenzij ik mijn textarea leeg laat.
Zouden jullie kunnen kijken wat er mis is?

Ik krijg geen foutmeldingen te , zien, dus weet ook niet waar ik moet zoeken..
Ik weet dat de connect file goed is, omdat ik die wel werkend in andere pagina's heb.

Hier de code:
PHP:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 5 Transitional//EN">
<meta http-equiv="refresh" content="900; URL=login/logout.php">
<html>
<head>
<title>Message Toevoegen</title>
<link type="text/css" rel="stylesheet" href="../stylesheets/main.css" />
</head>
<body>
<?php
require_once("../Connections/tbunkertje.php");
//include ("inc.php");
if(!isset($_POST["submit"])){
?>
<form method="POST" action="form.php" enctype="multipart/form-data">
<H3>Plaats berichten op startpagina, en maak een nieuwe activiteit aan</H3>
<table align="center">
<tr>
<td>
Informatie Emailadres:<br>
<input type="email" name="emailadres" id="emailadres" />
</td>
<td>
Naam activiteit:<br>
 <input type="text" Name="activiteit" />
</tr>
<tr><td rowspan="2">
Uw Bericht:<br> 
<textarea name="bericht" rows="4" cols="20"></textarea>
</td>
<td>
Uiterlijke inschrijfdatum: <br>
 <input type="text" Name="max_signup"/> (dd-mm-jjjj)
</td>
</tr>
<tr>
<td>
Datum activiteit: <br>
<input type="text" Name="datum_activiteit"/> (dd-mm-jjjj)
</td>
</tr>
<tr><td>
<input type="hidden" name="MAX_FILE_SIZE" value="99999999" />
Upload JPEG afbeelding:<br>
<input name="file" type="file" id="userfile"> 
</td><td align="right" valign="bottom">
<input type="submit" name="submit" value="Post je Bericht!" />
</td></tr>
</table>
 </form>
<?php
} else {
if($_POST['emailadres']!=""){
$email=$_POST['emailadres'];
} else {
print("<p class=\"error\">Niks ingevuld bij email</p>");
}

if($_POST['bericht']!=""){
$bericht=$_POST['bericht'];
} else {
print("<p class=\"error\">Niks ingevuld bij Bericht</p>");
}

$activiteit=$_POST['activiteit'];
$max_datum=date("Y-m-d", strtotime($_POST['max_signup']));
$dat_activiteit=date("Y-m-d", strtotime($_POST['datum_activiteit'])); 
$content="";
if ($_FILES['file']['tmp_name'] != 4){
$fetchimg = $_FILES['file']['tmp_name'];
$handle = fopen($fetchimg, "rb");
$img = fread($handle, filesize($fetchimg));
fclose($handle);
$content = base64_encode($img);
}

if ($dat_activiteit<$max_datum){
echo "<p class=\"error\">De uiterlijke inschrijfdatum kan niet later zijn dan de activiteit zelf!</p>";
$end;
} else{
echo "Toegevoegd in database";
$query1=mysql_query("INSERT INTO `messages` ( `Message_ID` , `Datum_tijd` , `Email` , `Naam` , `Post` , `img` , `activiteit` , `max_inschrijfdatum` , `datum_activiteit` ) VALUES (NULL ,CURRENT_TIMESTAMP , '$email',".$_SESSION['voornaam'].", '$bericht', '$content' , '$activiteit' , '$max_datum' , '$dat_activiteit'") or die();
}
}

?>


</body>
</html>

Ik hoop dat jullie het probleem kunnen zien, want ik heb al te lang naar deze code gekeken om de fouten eruit te halen. Een frisse blik doet wonderen ;)

Gr.
 
Kijk eens of je query lukt:
echo mysql_error();
achter de mysql_query
 
of doe een echo van je query naar je scherm, kun je zien of hij juist gemaakt wordt.
 
Ik breek even in op je vraag: er zitten enkele ernstige beveiligingslekken in je script.

Ooit van SQL-injecties gehoord? De gebruiker van je website geeft als input (formulier, url variabele, cookie, enz) iets mee. Als deze input niet gecontroleerd wordt, kan het volgende probleem optreden:

Script:
PHP:
<?php
$email = $_POST['email'];
mysql_query("INSERT INTO leden (email) VALUES ('$email')");
echo 'Gelukt!';
?>

Input van gebruiker:
Code:
blabla@example.org'); DELETE leden; INSERT INTO another (kolom) VALUES ('Kolom

Query die wordt uitgevoerd:
Code:
INSERT INTO leden (email) VALUES ('blabla@example.org'); DELETE leden; INSERT INTO another (kolom) VALUES ('Kolom')

Het lijkt mij niet goed als anderen willekeurige commando's kunnen uitvoeren (in dit geval: verwijder leden tabel, voeg iets toe in andere tabel). Om dit te voorkomen kun je het volgende doen:
- Gebruik geen dubbele haakjes meer als buitenste haakjes in mysql_query(), maar gebruik enkele haakjes. In de query zelf kun je wel gebruik maken van dubbele haakjes. Voorbeeld:
PHP:
mysql_query('SELECT * FROM leden WHERE gebruiker="admin"');
Ik raad mensen over het algemeen aan om bij serverside talen enkele haakjes te gebruiken, en bij clientside talen dubbele haakjes te gebruiken. Zo krijg je bijv. dit:
PHP:
echo '<a href="http://example.org">Example</a>';
Dit is veiliger en sneller.

- Gebruik de functie mysql_real_escape_string() om variabelen te controleren en om te zetten in een veiligere variabele. Bijv:
PHP:
<?php
$email = mysql_real_escape_string($_POST['email']);
mysql_query('INSERT INTO leden (email) VALUES ("'.$email.'")');
echo 'Gelukt!';
?>
Hier is $email een gecontroleerde variabele, en worden enkele haakjes gebruikt. Bij enkele haakjes moeten variabelen wel buiten de haakjes gehaald worden, maar dat is weer voor extra veiligheid/duidelijkheid.
 
En waar 5blabla5 "haakjes" schrijft bedoelt hij "aanhalingstekens" :).

Overigens biedt het gebruik van enkele aanhalingstekens als buitenste aanhalingstekens i.p.v. dubbele nauwelijks meer veiligheid. Het enige verschil is dat in de te injecteren string dubbele aanhalingstekens gebruikt moeten worden i.p.v. enkele.
 
Het is ook meer het idee dat je beter weet wat je doet, en beter met variabelen omgaat. Dubbele aanhalingstekens zouden nooit ingevoerd moeten zijn om op deze manier te gebruiken, maar helaas...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan