gegevens uit form in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter Arendse

Peter Arendse

08/01/2009 21:49:00
Quote Anchor link
Beste allemaal,

Ik probeer voor de voetbalclub de ledenlijst online te krijgen.
Invoeren via phpmyadmin is geen probleem, maar ik wilde het via de admin omgeving doen die ik gecreeerd heb op de website, middels een formuliertje.
Wat ik ook probeer, ik niets in de database, en tevens gaat het script niet naar de pagina waar ik opdracht toe geef, maar krijg de melding dat hij de pagina niet kan vinden die toch in dezelfde dir staat nl. leden.php.
Ziet iemand de fout(en)?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
ob_start();
?>

<?php
error_reporting(E_ALL);
include("db_rcz.php");
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
if(isset($_POST['invoeren'])) {
$Geboortedatum= sprintf (
        '%02d-%02d-%02d',
        $_POST['Jaar'],
        $_POST['Maand'],
        $_POST['Dag']
        );

$Achternaam=$_POST[Achternaam];
$Tussenvoegsel=$_POST[Tussenvoegsel];
$Voornaam=$_POST[Voornaam];
$KNVBnummer=$_POST[KNVBnummer];
$Adres=$_POST[Adres];
$Postcode=$_POST[Postcode];
$Woonplaats=$_POST[Woonplaats];
$Telefoonnummer=$_POST[Telefoonnummer];
$Dag =  $_POST['Dag'];
$Maand =  $_POST['Maand'];
$Jaar =  $_POST['Jaar'];
$Geslacht = $_POST[Geslacht];
$Soort = $_POST[Soort];
$sql=" INSERT into ledenlijst
(Achternaam,
Tussenvoegsel,
Voornaam,
KNVBnumer,
Adres,
Postcode,
Woonplaats,
Telefoonnummer,
Geboortedatum,
Geslacht,
Soort)
VALUES ('$Achternaam',
'$Tussenvoegsel',
'$Voornaam',
'$KNVBnummer',
'$Adres',
'$Postcode'
,'$Woonplaats'
,'$Telefoonnummer'
,'$Geboortedatum',
'$Geslacht',
'$Soort')"
;
$res=mysql_db_query("$db","$sql",$mysql_id);

$relative_url = 'leden.php';
header("Location: http://".$_SERVER['HTTP_HOST']
                          .
dirname($_SERVER['PHP_SELF'])
                          .
"/".$relative_url);

}

else {
ob_end_flush();
?>

<?php
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Peter Arendse
 
PHP hulp

PHP hulp

27/11/2024 06:20:19
 
- SanThe -

- SanThe -

08/01/2009 22:00:00
Quote Anchor link
Plaats alléén relevante code en geen compleet script.

Pas je post even aan en gebruik en tags om je code heen. Om php code zet je uiteraard dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php en ?>
Gebruik je Afbeelding knop om dit te doen.

SanThe.
 
Leen M

Leen M

08/01/2009 22:45:00
Quote Anchor link
Over dat hij niet naar de goede pagina gaat:

De url wordt niet goed opgebouwd: dat haakje achter $_SERVER['PHP_SELF'] moet weg.

zo dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']."/".$relative_url);


EDIT:
Oeps, sorry. Je had het wel goed gedaan. Ik had niet goed gekeken.
Gewijzigd op 01/01/1970 01:00:00 door Leen M
 
Peter Arendse

Peter Arendse

08/01/2009 23:04:00
Quote Anchor link
Oeps, ik heb je raad opgevolgt, maar krijg dan deze error:Parse error: syntax error, unexpected ';' in /www/htdocs/rczy/admin/leden/invoeren.php on line 74

Ik heb een groot gedeelte van het script overgenomen uit een script dat ik zakelijk gebruik, en ik ruim een jaar geleden met hulp van jullie allemaal goed werkend heb gekregen, maar dit, veel eenvoudiger ding krijg ik niet aan de gang,pffffffffffff
Iemand nog een idee?
 
- SanThe -

- SanThe -

08/01/2009 23:10:00
Quote Anchor link
Een $var copiëeren zonder er iets aan te wijzigen kost alleen extra geheugen en is verder nutteloos.
$Achternaam=$_POST[Achternaam];

Verder is het $_POST['Achternaam'] i.p.v. $_POST[Achternaam] dus met enkele quotes.

En dan gaat die direct de database in, zonder enige controle. Dat is dus rijp voor sql-injection.
VALUES ('$Achternaam',
Maak daar minimaal dit van.
VALUES ('" . mysql_real_escape_string($Achternaam) . "',

En dat geldt uiteraard ook voor de rest.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Peter Arendse

Peter Arendse

08/01/2009 23:34:00
Quote Anchor link
Dank je SanThe,
Heb het aleemaal aangepast zo als jij zei, maar nog niets in de db, en na submit vind hij leden.php maar niet?
Komt het soms door de hoofdletters die ik gebruik, nee toch, die voer ik door in het hele script en in de db ook!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
error_reporting(E_ALL);
include("db_rcz.php");
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
if(isset($_POST['invoeren'])) {
$Geboortedatum= sprintf (
        '%02d-%02d-%02d',
        $_POST['Jaar'],
        $_POST['Maand'],
        $_POST['Dag']
        );

$Achternaam=$_POST['Achternaam'];
$Tussenvoegsel=$_POST['Tussenvoegsel'];
$Voornaam=$_POST['Voornaam'];
$KNVBnummer=$_POST['KNVBnummer'];
$Adres=$_POST['Adres'];
$Postcode=$_POST['Postcode'];
$Woonplaats=$_POST['Woonplaats'];
$Telefoonnummer=$_POST['Telefoonnummer'];
$Dag =  $_POST['Dag'];
$Maand =  $_POST['Maand'];
$Jaar =  $_POST['Jaar'];
$Geslacht = $_POST['Geslacht'];
$Soort = $_POST['Soort'];
$sql=" INSERT into ledenlijst
(Achternaam,
Tussenvoegsel,
Voornaam,
KNVBnumer,
Adres,
Postcode,
Woonplaats,
Telefoonnummer,
Geboortedatum,
Geslacht,
Soort)
VALUES ('"
. mysql_real_escape_string($Achternaam) . "',
'"
. mysql_real_escape_string($Tussenvoegsel) . "',
'"
. mysql_real_escape_string($Voornaam) . "',
'"
. mysql_real_escape_string($KNVBnummer) . "',
'"
. mysql_real_escape_string($Adres) . "',
'"
. mysql_real_escape_string($Postcode) . "',
'"
. mysql_real_escape_string($Woonplaats) . "',
'"
. mysql_real_escape_string($Telefoonnummer) . "',
'"
. mysql_real_escape_string($Geboortedatum) . "',
'"
. mysql_real_escape_string($Geslacht) . "',
'"
. mysql_real_escape_string($Soort) . "')";

$res=mysql_db_query("$db","$sql",$mysql_id);


$relative_url = 'leden.php';
header("Location: http://".$_SERVER['HTTP_HOST']
                          .
dirname($_SERVER['PHP_SELF'])
                          .
"/".$relative_url);

}

else {
ob_end_flush();

?>
Gewijzigd op 01/01/1970 01:00:00 door Peter Arendse
 
- SanThe -

- SanThe -

08/01/2009 23:39:00
Quote Anchor link
Die eerste regel staat er al maar zet die tweede er eens bij.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>


Edit: $vars horen niet tussen quotes.
Dus
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");

Wordt
$mysql_id=mysql_connect($dbhost,$dbuser,$dbpass);
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Peter Arendse

Peter Arendse

09/01/2009 00:03:00
Quote Anchor link
Bedankt,
Maar daar ben ik weer.
Heb het weer aangepast, maar geen foutmeldingen, maar ook geen records in de db.
Zit er al 4 uur naar te kijken, maar pffffffffff.
Dit is trouwens mijn database:
CREATE TABLE `ledenlijst` (
`ID` int(11) NOT NULL auto_increment,
`Achternaam` varchar(50) NOT NULL,
`Tussenvoegsel` varchar(50) NOT NULL,
`Voornaam` varchar(50) NOT NULL,
`Knvbnummer` varchar(50) NOT NULL,
`Adres` varchar(50) NOT NULL,
`Postcode` varchar(50) NOT NULL,
`Woonplaats` varchar(50) NOT NULL,
`Telefoonnummer` varchar(50) NOT NULL,
`Geboortedatum` date NOT NULL,
`Geslacht` varchar(50) NOT NULL,
`Soort` varchar(50) NOT NULL,
PRIMARY KEY (`ID`)
)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("db_rcz.php");
$mysql_id=mysql_connect($dbhost,$dbuser,$dbpass);
if(isset($_POST['invoeren'])) {
$Geboortedatum= sprintf (
        '%02d-%02d-%02d',
        $_POST['Jaar'],
        $_POST['Maand'],
        $_POST['Dag']
        );

$Achternaam=$_POST['Achternaam'];
$Tussenvoegsel=$_POST['Tussenvoegsel'];
$Voornaam=$_POST['Voornaam'];
$KNVBnummer=$_POST['KNVBnummer'];
$Adres=$_POST['Adres'];
$Postcode=$_POST['Postcode'];
$Woonplaats=$_POST['Woonplaats'];
$Telefoonnummer=$_POST['Telefoonnummer'];
$Dag =  $_POST['Dag'];
$Maand =  $_POST['Maand'];
$Jaar =  $_POST['Jaar'];
$Geslacht = $_POST['Geslacht'];
$Soort = $_POST['Soort'];
$sql=" INSERT into ledenlijst
(Achternaam,
Tussenvoegsel,
Voornaam,
KNVBnumer,
Adres,
Postcode,
Woonplaats,
Telefoonnummer,
Geboortedatum,
Geslacht,
Soort)
VALUES ('"
. mysql_real_escape_string($Achternaam) . "',
'"
. mysql_real_escape_string($Tussenvoegsel) . "',
'"
. mysql_real_escape_string($Voornaam) . "',
'"
. mysql_real_escape_string($KNVBnummer) . "',
'"
. mysql_real_escape_string($Adres) . "',
'"
. mysql_real_escape_string($Postcode) . "',
'"
. mysql_real_escape_string($Woonplaats) . "',
'"
. mysql_real_escape_string($Telefoonnummer) . "',
'"
. mysql_real_escape_string($Geboortedatum) . "',
'"
. mysql_real_escape_string($Geslacht) . "',
'"
. mysql_real_escape_string($Soort) . "')";

$res=mysql_db_query("$db","$sql",$mysql_id);


$relative_url = 'leden.php';
header("Location: http://".$_SERVER['HTTP_HOST']
                          .
dirname($_SERVER['PHP_SELF'])
                          .
"/".$relative_url);

}

else {
ob_end_flush();

?>
Gewijzigd op 01/01/1970 01:00:00 door Peter Arendse
 
Peter Arendse

Peter Arendse

09/01/2009 11:22:00
Quote Anchor link
Beste allemaal,

Inmiddels heb ik begrepen dat er best wat narigheden in jet script zaten, maar het blijft moeilijk met al die verschillende boeken en verschillende soorten manieren.
Ik heb het script nu werkend, op de datum na, die komt nu als 0000-00-00 in de database terecht, ik snap niet wat ik verkeerd doe.
Graag jullie idee hier over en evnetuele op-aanmerkingen hoe ik het nog beter(niet makkelijker) kan doen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
include("db_rcz.php");
if ($mysql_id=mysql_connect($dbhost,$dbuser,$dbpass))
{

    mysql_select_db($db) or die(mysql_error());
  }

else
  {
    echo 'Kan geen verbinding maken met de database';
    exit;
  }

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
  {

  
$aFouten = array();

$achternaam = $_POST['achternaam'];
$tussenvoegsel = $_POST['tussenvoegsel'];
$voornaam = $_POST['voornaam'];
$knvbnummer = $_POST['knvbnummer'];
$adres = $_POST['adres'];
$postcode = $_POST['postcode'];
$woonplaats = $_POST['woonplaats'];
$telefoonnummer = $_POST['telefoonnummer'];
$dag = $_POST['dag'];
$maand = $_POST['maand'];
$jaar = $_POST['jaar'];
$geslacht = $_POST['geslacht'];
$soort = $_POST['soort'];
$geboortedatum= sprintf (
        '%02d-%02d-%02d',
        $_POST['jaar'],
        $_POST['maand'],
        $_POST['dag']
        );
        
if($_POST['achternaam'] == '')
      {

        $aFouten[] = 'Je hebt geen achternaam ingevuld';
      }

if($_POST['voornaam'] == '')
      {

        $aFouten[] = 'Je hebt geen voornaam ingevuld';
      }

if($_POST['knvbnummer'] == '')
      {

        $aFouten[] = 'Je hebt geen knvbnummer ingevuld';
      }

if($_POST['adres'] == '')
      {

        $aFouten[] = 'Je hebt geen adres ingevuld';
      }

if($_POST['postcode'] == '')
      {

        $aFouten[] = 'Je hebt geen postcode ingevuld';
      }

if($_POST['woonplaats'] == '')
      {

        $aFouten[] = 'Je hebt geen woonplaats ingevuld';
      }

if($_POST['telefoonnummer'] == '' || !is_numeric($_POST['telefoonnummer']))
      {

        $aFouten[] = 'Je hebt een ongeldige telefoonnummer ingevuld';
      }

if($_POST['dag'] == '' || !is_numeric($_POST['dag']))
      {

        $aFouten[] = 'Je hebt een ongeldige dag ingevuld';
      }

if($_POST['maand'] == '' || !is_numeric($_POST['maand']))
      {

        $aFouten[] = 'Je hebt een ongeldige maand ingevuld';
      }

                    
if($_POST['jaar'] == '' || !is_numeric($_POST['jaar']))
      {

        $aFouten[] = 'Je hebt een ongeldige jaar ingevuld';
      }

 if(count($aFouten) != 0)
          {

            echo 'De volgende fouten zijn opgetreden: <br /><br />';
            for($Fi = 0; $Fi < count($aFouten); $Fi++)
              {

                echo $aFouten[$Fi].'<br />';
              }

            echo '<br />Klik <a href="javascript:history.go(-1);">hier</a> om terug te keren';
          }

                                                           
 
$sql=" INSERT INTO ledenlijst
(achternaam,
tussenvoegsel,
voornaam,
knvbnummer,
adres,
postcode,
woonplaats,
telefoonnummer,
geboortedatum,
geslacht,
soort)
VALUES ('"
. mysql_real_escape_string($achternaam) . "',
'"
. mysql_real_escape_string($tussenvoegsel) . "',
'"
. mysql_real_escape_string($voornaam) . "',
'"
. mysql_real_escape_string($knvbnummer) . "',
'"
. mysql_real_escape_string($adres) . "',
'"
. mysql_real_escape_string($postcode) . "',
'"
. mysql_real_escape_string($woonplaats) . "',
'"
. mysql_real_escape_string($telefoonnummer) . "',
'"
. mysql_real_escape_string($geboortedatum) . "',
'"
. mysql_real_escape_string($geslacht) . "',
'"
. mysql_real_escape_string($soort) . "')";

$res=mysql_query($sql, $mysql_id) or die(mysql_error());
$relative_url = 'leden.php';
header("Location: http://".$_SERVER['HTTP_HOST']
                          .
dirname($_SERVER['PHP_SELF'])
                          .
"/".$relative_url);


}

else {
ob_end_flush();

?>
 
Frank -

Frank -

09/01/2009 11:31:00
Quote Anchor link
Zet op regel 111 eens een echo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
echo $sql;
?>

Dan krijg je te zien hoe de query er nu uitziet. Dan wordt vaak ook duidelijk wat er fout gaat.

%02d, moet dat bij het jaartal geen 4 karakters zijn?

Ps. Dankzij het brakke MySQL ben je nu al weer uren aan het debuggen, een foute datum moet een foutmelding opleveren en geen corrupte database. Maar ja, MySQL... Ga dit stuk ellende eerst maar even configureren, dan krijg je wat meer foutmeldingen wanneer je wat fout doet: http://wiki.phpfreakz.nl/Werken_met_MySQL#Configuratie. Scheelt je vele uren debuggen.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Peter Arendse

Peter Arendse

09/01/2009 11:52:00
Quote Anchor link
Hey Frank, dank je voor je snelle respons.

Het is gelukt, en het werkt nu allemaal.
Ik heb al even kort naar die link van jou gekeken en ga het straks helemaal doorlezen(hoop wel dat het een beetje in Jip en Janneke taal is, want voor een beginner is dat wel makkelijk).
Is dit nu de obsolute standaard voor een database?
Gewijzigd op 01/01/1970 01:00:00 door Peter Arendse
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.