Form maken met PHP/MYSQL

Gestart door reMC, juli 17, 2010, 22:40:27

« vorige - volgende »

0 leden en 1 gast bekijken dit topic.

reMC

Hoi,

Het zal wel aan mij liggen, maar ik heb Google behoorlijk afgestruind en ik zie nergens een simpel voorbeeldje van hoe een formulier te laten verbinden met een MYSQL database, daar gegevens opslaan en een mail te sturen naar een willekeurig e-mailadres?

Ik vind overal losse deeltjes, maar geen goed totaalplaatje... Formulier maken is het probleem niet, maar het verbinden met de database, e-mail etc.

Wie weet een goed totaalvoorbeeld met gewoon een aantal totaalbestanden? Geen deeltjes die zelf nog ge-include moeten worden etc., daar gaat het bij beginners als ik natuurlijk al mis...

Thanks :)

angel1978

Ik betwijfel of je hier een fatsoenlijk antwoord op gaat krijgen wat je wil:

Citaatik zie nergens een simpel voorbeeldje van hoe een formulier te laten verbinden met een MYSQL database, daar gegevens opslaan

Hier zijn zat voorbeelden van ( te over zelfs ).. Maar omdat dit heel specifiek is voor jouw database kan niemand het specifiek maken en zal je toch echt zelf van een voorbeeldje, de juiste gegevens eruit moeten pikken en je eigen gegevens eraan toe moeten voegen...

Citaatdaar gegevens opslaan

Same here.. dit ligt aan de opbouw van je database, de opbouw van je velden.. Dus ook hier moet je van een standaard scriptje uitgaan en dat uitbouwen tot het klopt met wat je wil.

Citaaten een mail te sturen naar een willekeurig e-mailadres?

Ook hier weer voorbeelden te over.. Maar ook dit moet je weer even aanpassen naar je eigen wensen...

CitaatWie weet een goed totaalvoorbeeld met gewoon een aantal totaalbestanden?

Als je echt zo'n beginner bent, dat je met de voorbeeld-scripts die gewoon voorhanden zijn ( 3 in dit geval ) nog geen totaalscript kan bouwen ( no offense ), dan misschien even een stapje terug doen en eerst goed de basisprincipes onder de knie zien te krijgen ?

Alles is alleen al te vinden op www.php.net ( inclusief voorbeelden ).

Bouw 3 scripts die separaat doen wat je vraagt.. voeg die samen inclusief je formulier en je hebt vrij snel wat je vraagt.

reMC

Thanks voor je reactie. In principe kan ik alles wel voor elkaar krijgen (werkend) met copy/past, maar ik heb te weinig kennis om te kunnen zien of het script dan ook echt ok is, veilig etc. Dus zoek ik iets wat zeker weten gewoon goed is, en dan kan ik inderdaad wel uitbreiden. Dus wat ik concreet zoek zijn inderdaad 3 bestandjes:
- form.html
- connect.php
- send.php

De eerste 2 kan ik zelf wel maken dus het gaat vooral op het laatste. Daarmee bedoel ik dus: in de database zetten en e-mail sturen. Het mag echt zo makkelijk mogelijk zijn, dan bouw ik zelf wel uit ;)

Natuurlijk is dit al 1000x gevraagd en minstens zo vaak gepost op Internet, maar het probleem voor mij is dat je bovenstaande blijkbaar op 100 manieren kan maken, waardoor ik niet meer weet wat nou goed is...

reMC

#3
Ik kan mijn vraag inmiddels concreter maken: waarom krijg ik deze melding?
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'xxxxx'@'localhost' (using password: YES) in /home/.sites/69/site124/web/testremko/connect.php on line 7
Error , check your server connection.


Het vreemde: het ligt 100% zeker NIET aan de inloggevens. Gisteren is het me namelijk gelukt met om de database te vullen. Ik ben echter iets te snel geweest met aanpassingen, waardoor ik de werkende situatie niet meer kan terughalen...

Dit zijn mijn bestanden:

connect.php
<?php

$username
="xxxxx";
$password="xxxxx";
$database="xxxxx";

$connect mysql_connect(localhost,$username,$password) or die ("Error , check your server connection.");

mysql_select_db($database) or die ("Unable to select database");

mysql_close();
?>


contact_insert.php
<?php

//MySQL Database Connect

include 'connect.php'
 
//Get data in local variable

$v_name=$_POST['name'];

$v_email=$_POST['email'];

$v_msg=$_POST['msg'];

// check for null values

$query="insert into contact(name,email,msg) values('$v_name','$v_email','$v_msg')";

mysql_query($query)  or die(mysql_error());

echo 
"Your message has been received";

?>

reMC

#4
Inmiddels ook geprobeerd meer rechten aan de user toe te kennen met:
GRANT ALL ON contact.* TO 'user_name'@'localhost' IDENTIFIED BY 'password';

Maar zelf geeft ie acces denied voor die user aan. En nogmaals: het is me eerder wel gelukt in die database (contact) te schrijven. Wat doe ik fout?

EJ

Heb je in je connectie definities wel opgenomen waarheen hij moet connecten? Is dat met zekerheid 'localhost' en niet '127.0.0.1'?

reMC

Ja, het is zeker localhost...

EJ

En in my.conf heb je

bind-address      = 127.0.0.1

staan? Daarmee luistert mysql ook op localhost.

reMC

Nee, heb ik niet... Hoe doe ik dat (vind het niet via Google).

MaxxMark

#9
heb je na je grant ook een "flush privileges;" gedaan?

kan je wel inloggen met het username/pw als je vanaf de command line inlogt?
mysql -uusername -p
Arcam AVR850  + Yamaha RX-V3800 - Martin Logan Fresco 7.1.4 - Velodyne DD15 - HDI Dune 3.0 Prime / Dune 4K Pro - JVC N7 - Screen Excellence 21:9 (320cm breed) - Mijn eerste HT -  Mijn tweede HT@mark_prins - www.markprins.com

reMC

Citaat van: MaxxMark op juli 18, 2010, 10:32:34
heb je na je grant ook een "flush privileges;" gedaan?

Yep, acces denied for user...

Citaatkan je wel inloggen met het username/pw als je vanaf de command line inlogt?
mysql -uusername -p

Dit lukt me niet? Gewoon een query uitvoeren toch?
mysql -[username] -[password]

reMC

Eigenaardig? Ik heb de bestanden overgeheveld naar een andere server (van audio-cube.nl naar audio-life.nl) en nu krijg ik ook een andere fout: unable to select database.

Maar aan die database is niets aan veranderd sinds die keer dat het WEL werkte (onthoud dat ;))

reMC

Schiet mij maar lek: net een testje uitgevoerd door in bovenstaande situatie het password te wijzigen in iets willekeurigs. Dan geeft ie terecht aan dat ik geen toegang heb. Maw: vanaf de ene server heb ik wel toegang, vanaf de andere niet. Is dat logisch?

Daarnaast: nog steeds geen toegang tot de database en blijkbaar geen rechten om privileges opnieuw in te stellen...

EJ

Klinkt als database niet op localhost, dan wel database van de ene naar de andere overhevelen inclusief permissies die fout staan.

In de mysql configuratie (platformafhankelijk waar die staat) staat een config file genaamd my.conf die bepaalt op welke poort en op welk adres wordt geluisterd.

reMC

Schaam schaam :-[

Ik heb steeds per ongeluk de naam van de tabel opgegeven op de plek van de database... STUPID!

Dit is het geworden en het werkt:
<?php

// connect to database
require_once("connect.php");

// Get data in local variable
$v_name=$_POST['name'];

$v_email=$_POST['email'];

$v_msg=$_POST['msg'];

// put in table
$query="insert into contact(name,email,msg) values('$v_name','$v_email','$v_msg')";

mysql_query($query)  or die(mysql_error());

// send email
$email $_POST['email'];
$naam $_POST['naam'];
$telefoon $_POST['telefoon'];
$bericht $_POST['bericht'];

$to "[email protected]";
$subject "Vraag via website";
$message "

Naam: "
.$naam.
E-mail: "
.$email.
Aantal: "
.$telefoon.

Bericht: "
.$bericht.

"
;

$headers "From: $email";

if ( 
mail($to,$subject,$message,$headers) ) {
    
header"Location: http://www.audio-life.nl/" );
   } else {
   echo 
"Fout";
   }

?>


Nu eens proberen die informatie weer tevoorschijn te toveren op een pagina ;)

Bedankt voor jullie inzet...

reMC

Citaat van: reMC op juli 18, 2010, 12:08:03
Nu eens proberen die informatie weer tevoorschijn te toveren op een pagina ;)

Meevaller: is nu al gelukt ;)

EJ

Citaat van: reMC op juli 18, 2010, 12:08:03
Schaam schaam :-[

Ik heb steeds per ongeluk de naam van de tabel opgegeven op de plek van de database... STUPID!

Dit is het geworden en het werkt:
[knip]

Nu eens proberen die informatie weer tevoorschijn te toveren op een pagina ;)

Bedankt voor jullie inzet...

Leermoment. ;)

reMC

En nu een voor de hand liggende vraag met vast een heel lastig antwoord: hoe maak ik mijn SQL/PHP veilig? Zijn er een aantal basis-dingen te noemen/vinden?

EJ

Citaat van: reMC op juli 18, 2010, 12:40:58
En nu een voor de hand liggende vraag met vast een heel lastig antwoord: hoe maak ik mijn SQL/PHP veilig? Zijn er een aantal basis-dingen te noemen/vinden?
Validatie check, validatie check, validatie check. Goede wachtwoorden. Goede webserver (zie ook modsecurity voor apache). Check voor XSS. En had ik validatie check al genoemd? Verder zijn er legio bronnen te vinden.

reMC

#19
Ik heb een heel goede client-side validatiecheck voor de inputs (mootools), dat is het probleem niet (denk ik, tenzij je bedoeld dat 'ie ook /#$ blockt). Het gaat er (denk ik!) meer om dat niet 'iedereen' mijn database kan inzien of zelfs gebruiken? SQL-injection?

EJ

Citaat van: reMC op juli 18, 2010, 12:53:44
Ik heb een heel goede client-side validatiecheck voor de inputs (mootools), dat is het probleem niet. Het gaat er (denk ik!) meer om dat niet 'iedereen' mijn database kan inzien of zelfs gebruiken? SQL-injection?
Yakkie, client side tools. Daar hoort het nu net niet te gebeuren want als iemand zich niet aan die tools houdt kan hij zo je database in. XSS bescherming is verplicht. SQL injectie hou je juist niet tegen met client side tools.

Ga er simpelweg niet van uit dat je valide input hebt totdat je die zelf hebt getest. Iedere functie call zou moeten testen. Buffer overflows kun je voorkomen door te testen, testen en nog eens testen op valide in- en output.

reMC

Citaat van: EJ op juli 18, 2010, 13:00:26
Yakkie, client side tools. Daar hoort het nu net niet te gebeuren want als iemand zich niet aan die tools houdt kan hij zo je database in. XSS bescherming is verplicht. SQL injectie hou je juist niet tegen met client side tools.

Ga er simpelweg niet van uit dat je valide input hebt totdat je die zelf hebt getest. Iedere functie call zou moeten testen. Buffer overflows kun je voorkomen door te testen, testen en nog eens testen op valide in- en output.

Helder... Klopt het dat er maar heel weinig bedrijven (ook grote) zijn die zich hier 100% aan houden? Ik bedoel: bij veel zet ik gewoon de JS uit en kan ik inderdaad gewoon door. Is dat echt gevaarlijk als in je database kan gehackt worden, of 'niet handig' omdat je onzin-input krijgt?

EJ

Citaat van: reMC op juli 18, 2010, 13:06:38
Helder... Klopt het dat er maar heel weinig bedrijven (ook grote) zijn die zich hier 100% aan houden? Ik bedoel: bij veel zet ik gewoon de JS uit en kan ik inderdaad gewoon door. Is dat echt gevaarlijk als in je database kan gehackt worden, of 'niet handig' omdat je onzin-input krijgt?
Ja, dat is echt gevaarlijk. Bufferoverflows en dergelijke zijn simpele stappen na onzin input. Gebruik een layer-7 firewall op apache als je te grote problemen wilt voorkomen. Modsecurity is echt heel goed.

reMC

Ok... Ik zal beginnen geen non-alphanumeric karakters toe te staan, dat moet al een heel deel helpen?

EJ

Dat scheelt al iets. Check ook op lengte. Dat zijn eenvoudige tests.