ik ben een uploadsysteem aan het maken. waarbij ik mijn project wil weergeven een soort formulier. het uitlezen is niet het probleem maar het invoeren van deze gegevens zit ik even mee vast. want ik heb wel iets kunnen maken maar het gaat niet werken. is er een betere mogelijkheid hoe ik dit kan oplossen?

<?php
if(isset($_POST['submit'])){

$titel = $_POST['titel'];
$subtitel = $_POST['subtitel'];
$url_plaatje = $_POST['url_plaatje'];// weet niet of het werkt?
$url_project = $_POST['url_project'];// weet niet of het werkt?
$omschrijving = $_POST['omschrijving'];
$datum = $_POST['datum'];

include('mysql_connect.php'); // Database aanroepen

$query_controleren_project = mysql_query("SELECT * FROM Project WHERE titel='$titel'");
$num_controleren_project = mysql_num_rows ($query_controleren_project);

if(!$num_controleren_project == 1){
$query_insert = mysql_query ("INSERT INTO Project (titel, subtitel, url_plaatje, url_project, download_project, omschrijving, datum) VALEUS('$titel','$subtitel','$url_plaatje','$url_project','$omschrijving','$datum')");
}else{
echo "Dit Project staat al op de website";
}

}else{
echo "
<form action='upload.php' method='POST' enctype='multipart/form-data'>
<p>Titel project:
<input name='mytitel' size='50' type='text'><br>
Subtitel:<input name='mysubtitel' size='50' type='text'><br>
Afbeelding:
<input name='myimage' type='file' size='50' title='afbeelding'><br>
Project:<input name='myproject' type='file' size='50'><br>
Download url:<input name='myproject' type='url' size='50'><br>
Datum:

<input name='mydate' type='date'><br>
<br>
Omschrijving project:<br>
<textarea name='omschrijving' rows='10' cols='50'></textarea>
<input type='submit' value='Upload het project' size='38'>
</p>
</form>
";

}
?>
Als je toch opnieuw bent begonnen, waarom neem je dan niet alle tips mee:
Ramon van Dongen op 11/08/2014 16:02:56

je kunt beter mysql_ functies loslaten en met mysqli_ functies gaan werken. Mysql_ vervalt uiteindelijk.


- SanThe - op 12/08/2014 21:45:20

Regel 8: Waarom addslashes() over een plaatje? => Kans is groot dat het nu mismaakt is.
Regel 9: Waarom addslashes? => Dat is geen beveiliging voor in de database.
Regel 10: grote => grootte.
Regel 11: $filePath => Waarom gebruik je dat niet ook in regel 18?
Regel 18: jpg? => Dat weet je niet.
Regel 20: INSERT INTO ... (veldnaam, ...) VALUES ('waarde', ...)

Maak eens foutafhandeling.
Alles wat je nu doet is gebaseerd op gokken dat het goed gaat.
Je checkt niet of er gepost is.
Je checkt niet of de download wel is gelukt.
Je checkt niet of het verplaatsen is gelukt.
De query is niet beveiligd.
Je checkt niet of de query is gelukt.

Het enige dat je controleert is de grootte en dan moet ie nog dood ook.


ik heb wel hier en daar inmiddels aangepast ook heb ik het al mysqli van gemaakt(ik weet alleen niet of het al goed is). Ik ben momenteel nog wel aan regel 20 aan het sleutelen. toch vind ik het gek dat ik bijna dezelfde code heb kunnen gebruiken bij een andere opdracht en daar werkte alles wel ook werd het in mijn database en op de server geplaatst.

<?php
session_start();
include('mysql_connect.php'); // connectie met database

$resultaat = mysqli_query("SELECT MAX(id) FROM Project", $db); // checkt of database image bestaat
$rij = mysqli_fetch_array($resultaat);
$rij = $rij['MAX(id)'] + 1 ; // veranderd de naam in een nummer van de foto's aan de hand van de database + 1
$image = addslashes(file_get_contents($_FILES['myimg']['tmp_name']));
$image_name = addslashes($_FILES['myimg']['name']); // naam bestand
$image_size = getimagesize($_FILES['myimg']['tmp_name']); // grootte van de foto
$filePath = "uploaded/" . $rij; // locatie en naam van het bestand wat is geupload

if($size > 3000000)
{
die("Bestand is te groot!");
}
else
move_uploaded_file($_FILES["myimg"]["tmp_name"], $filePath);// plaats waar de foto wordt geplaatst op de server

//mysqli_query("INSERT INTO Project VALUES ('','$image_name','$filePath')");// alle informatie wordt in een database geplaatst
mysqli_query("INSERT INTO Project VALUES INSERT url_plaatje'");
header('location: admin.php');
?>

mysqli_query("INSERT INTO Project VALUES INSERT url_plaatje'");


Waarom gebruik je niet de kolommen om te inserten, zo blijft je script overzichtelijk wat waar moet komen.


mysqli_query("INSERT INTO `tabelnaam` (`kolom1`, `kolom2`) VALUES ('waarde_kolom_1', 'waarde_kolom_2')");


Je kunt eventueel ook eens in je Mysql browser (PHPmyadmin waarschijnlijk) eens een insert doen. Gebruik dan de query die daar weergegeven wordt eens in je script en kijk of alles werkt.

Toevoeging:
Begin daarna met de variabelen die je wilt invullen eens hard in je script te zetten:
$bestandsnaam = "bestandsnaam.jpg";
$bestand_locatie = "pad_naar/de_locatie/";

Voeg dit vervolgens toe in je query en test dan of het werkt. Werkt het dan nog, dan kun je eens je upload script er tussen proberen. Doe dit kolom per kolom en zo lang het blijft werken weet je dat het laatst toegevoegde goed is. Gaat het fout zit daar het probleem!
Enrico van der List op 13/08/2014 01:39:12

toch vind ik het gek dat ik bijna dezelfde code heb kunnen gebruiken bij een andere opdracht en daar werkte alles wel ook werd het in mijn database en op de server geplaatst.

Misschien dat de oorzaak dan ligt in het woordje 'bijna'? ;-)
Er zijn dus verschillen tussen die code die wel werkt en deze.
Welke? En kan daar de oorzaak liggen voor het feit dat het nu niet werkt

Enrico van der List op 13/08/2014 01:39:12

ook heb ik het al mysqli van gemaakt(ik weet alleen niet of het al goed is).

Dat schiet niet op. Doe het of niet of doe het goed. Half kan niet.
mysqli_query moet een foutmelding geven. Bouw dus foutafhandeling in!!

Waar controleer je of het bestand dat iemand upload wel voldoet aan een afbeelding. Volgens mij kan ik nu vrij eenvoudig een php bestand (met schadelijke code) uploaden.
Je zet zo te zien de geuploade bestanden niet buiten de root neer; voor iedereen dus toegankelijk.

Waarom die header op regel 22? Laat die eens weg (of vervang door een melding dat het gelukt is).

deze topic kan gesloten worden. want ik heb hem al gelukkig werkend. heb stap voor stap gekeken met aan de hand van echo(); en bleek dat ik te weinig arrays had aangegeven.


Waar controleer je of het bestand dat iemand upload wel voldoet aan een afbeelding. Volgens mij kan ik nu vrij eenvoudig een php bestand (met schadelijke code) uploaden.
Je zet zo te zien de geuploade bestanden niet buiten de root neer; voor iedereen dus toegankelijk.

deze pagina kan niemand van buitenaf op komen uiteindelijk want dit komt achter een login systeem waar alleen ik de beheerder ben en wachtwoord van weet ;)
En als ze het weten te hacken kunnen ze alsnog een onveilig script uploaden....
Betreft je login systeem, HTTP, of zelf gebouwd? Als je je login even slecht beveiligd als je upload scripts, komen ze er zo in.
php login maar die is al inmiddels al beveiligd met een CRYPT_MD5 en een sql injection. maar beveiligen lukt verder wel.

Reageren