Lege velden in mijn database
Ik zal me even voorstellen.
Mijn naam is Ben, ben 41 jaar en sind vorig jaar bezig met een cursus PHP/mysql.
Voor mijn cursus moet ik een gastenboek maken,ik ben voor mijn gevoel bijna klaar
maar ik loop vast op een klein maar belangrijk detail.
Als ik de input velden Naam en Bericht ingevuld heb,worden die gegevens niet in mijn database geplaatst.Echter worden de velden wel aangemaakt en ID wordt ook opgehoogd (autoincrement)maar Naam en Bericht zijn leeg.
Kan iemand mij helpen en vertellen wat ik fout doe?
bvd
Script
<!DOCTYPE html>
Code (php)
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
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
<?php
$thisfile= $_SERVER['PHP_SELF'];
$invoer_form = <<<invoerform
<FORM METHOD ="POST" ACTION ="$thisfile" >
<p>Naam:   <INPUT TYPE ="text" SIZE= 25 NAME= "naam" ></p>
<p>Bericht     <textarea TYPE ="text" NAME = "bericht" cols = "50" rows = "4">Plaats hier uw bericht.</textarea> </p>
<INPUT TYPE="hidden" NAME="stage" VALUE="register">
<br><br><br>
<br><br>
<INPUT TYPE = "submit" NAME = "submit" VALUE = "submit">
</FORM>
invoerform;
if (!isset($_POST['submit'])){
$message = $invoer_form;
} elseif ($_POST['submit'] == 'submit' && $_POST['stage'] == 'register') {
//Controle of er een naam of bericht ingevuld is.Naam mag ook niet langer dan 30 letters zijn.
if (!$_POST['naam'] || $_POST['naam'] = "" || strlen($_POST['naam'] )> 30 || !$_POST['bericht'] || $_POST['bericht'] = ""
){
$message = "<p>Er is iets verkeerd gegaan,heb je wel je naam ingevoerd?</p>";
$message .= $invoer_form;
}
else {
//Database openen en data wegschrijven.
mysql_connect ("localhost", "root", "victoria") or die ("Kan geen contact maken met de server");
mysql_select_db("voorbeeld");
$as_naam = addslashes($_POST['naam']);
$tr_naam = trim($as_naam);
$naam = $tr_naam;
$boodschap = $_POST['bericht'];
$query= "INSERT INTO gastenboek (ID, Naam, Boodschap)
VALUES(NULL,'$naam','$boodschap')";
$result = mysql_query($query);
if (mysql_affected_rows() == 1){
$message ="<p>Uw bericht is geplaats.</p>";}
}
}
?>
$thisfile= $_SERVER['PHP_SELF'];
$invoer_form = <<<invoerform
<FORM METHOD ="POST" ACTION ="$thisfile" >
<p>Naam:   <INPUT TYPE ="text" SIZE= 25 NAME= "naam" ></p>
<p>Bericht     <textarea TYPE ="text" NAME = "bericht" cols = "50" rows = "4">Plaats hier uw bericht.</textarea> </p>
<INPUT TYPE="hidden" NAME="stage" VALUE="register">
<br><br><br>
<br><br>
<INPUT TYPE = "submit" NAME = "submit" VALUE = "submit">
</FORM>
invoerform;
if (!isset($_POST['submit'])){
$message = $invoer_form;
} elseif ($_POST['submit'] == 'submit' && $_POST['stage'] == 'register') {
//Controle of er een naam of bericht ingevuld is.Naam mag ook niet langer dan 30 letters zijn.
if (!$_POST['naam'] || $_POST['naam'] = "" || strlen($_POST['naam'] )> 30 || !$_POST['bericht'] || $_POST['bericht'] = ""
){
$message = "<p>Er is iets verkeerd gegaan,heb je wel je naam ingevoerd?</p>";
$message .= $invoer_form;
}
else {
//Database openen en data wegschrijven.
mysql_connect ("localhost", "root", "victoria") or die ("Kan geen contact maken met de server");
mysql_select_db("voorbeeld");
$as_naam = addslashes($_POST['naam']);
$tr_naam = trim($as_naam);
$naam = $tr_naam;
$boodschap = $_POST['bericht'];
$query= "INSERT INTO gastenboek (ID, Naam, Boodschap)
VALUES(NULL,'$naam','$boodschap')";
$result = mysql_query($query);
if (mysql_affected_rows() == 1){
$message ="<p>Uw bericht is geplaats.</p>";}
}
}
?>
<html>
<head><title>Invoer formulier</title></head>
<body>
<h3>Bericht invoer</h3>
</body>
</html>
http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/voorbeeld-2-invoeren-van-gegevens/1957/
Op deze link die ik gaf, heb je een foutafhandeling.
Die is nodige om te kijken of je query gelukt is of niet.
Ik raad ook aan om die query toe te passen.
Je moet ook
In plaats van:
if (!isset($_POST['submit'])){
Probeer dit eens toe te passen, dan zien we verder.
Als je nog vragen hebt hierover, vraag maar gerust
Dem
Op deze link die ik gaf, heb je een foutafhandeling.
Die is nodige om te kijken of je query gelukt is of niet.
Ik raad ook aan om die query toe te passen.
Je moet ook
Code (php)
1
2
3
4
5
6
2
3
4
5
6
if($_SERVER['REQUEST_METHOD']=="POST"){
// als er op submit gedrukt is
}
else {
// formulier tonen, er is niet op submit gedrukt
}
// als er op submit gedrukt is
}
else {
// formulier tonen, er is niet op submit gedrukt
}
In plaats van:
if (!isset($_POST['submit'])){
Probeer dit eens toe te passen, dan zien we verder.
Als je nog vragen hebt hierover, vraag maar gerust
Dem
Gewijzigd op 18/03/2012 21:09:22 door - Diov -
- echo'en doe je met enkele quotes;
- MySQL input escapen met mysql_real_escape_string;
- Het onnodig aanmaken van variabelen is zonde van je geheugen;
- Controleren of er iets gepost is doe je zoals Dem Ian zegt;
- $_SERVER['PHP_SELF'] is onveilig
Ik raad je aan mijn tutorial Beginnersfouten tegengaan even door te lezen.
En om even op je probleem in te gaan: Je maakt op regel 26 met $_POST['naam'] = "" in de if() $_POST['naam'] leeg. Je wilt, neem ik aan, vergelijken en dat doe je met dubbel == dus: $_POST['naam'] == "". Geldt ook voor $_POST['bericht']. En met if (!$_POST['naam'] ...) kijk je of $_POST['naam'] true of false is. Beetje vreemd lijkt mij.
Gewijzigd op 18/03/2012 23:11:33 door - SanThe -
Als ik het goed begrijp dan heb ik mijn fout in eerste instantie omzeild met
(!$_POST['naam']).. en (!_$POST['bericht']).. (waarschijnlijk is dat de reden geweest waarom ik het toegepast heb) ipv dat $_POST['naam'] = "" en
$_POST['bericht'] = "" het werk deden.
Ian en Roel,bedankt voor jullie aanwijzingen,die ga ik zeker bekijken,maar toch een klein vraagje.
Ian,de controle die ik gebruik if (mysql_affected_rows() == 1){... om te zien of de querie zijn werk heeft gedaan,is die niet goed genoeg?
je kan beter mysql_num_rows gebruiken
Reshadd farid op 19/03/2012 22:40:17:
je kan beter mysql_num_rows gebruiken
Onzin, want dat werkt niet bij een INSERT.
Ben Pino op 19/03/2012 22:09:33:
-SanThe,Gweldig.Dit was inderdaad het probleem.
Als ik het goed begrijp dan heb ik mijn fout in eerste instantie omzeild met
(!$_POST['naam']).. en (!_$POST['bericht']).. (waarschijnlijk is dat de reden geweest waarom ik het toegepast heb) ipv dat $_POST['naam'] = "" en
$_POST['bericht'] = "" het werk deden.
Ian en Roel,bedankt voor jullie aanwijzingen,die ga ik zeker bekijken,maar toch een klein vraagje.
Ian,de controle die ik gebruik if (mysql_affected_rows() == 1){... om te zien of de querie zijn werk heeft gedaan,is die niet goed genoeg?
Als ik het goed begrijp dan heb ik mijn fout in eerste instantie omzeild met
(!$_POST['naam']).. en (!_$POST['bericht']).. (waarschijnlijk is dat de reden geweest waarom ik het toegepast heb) ipv dat $_POST['naam'] = "" en
$_POST['bericht'] = "" het werk deden.
Ian en Roel,bedankt voor jullie aanwijzingen,die ga ik zeker bekijken,maar toch een klein vraagje.
Ian,de controle die ik gebruik if (mysql_affected_rows() == 1){... om te zien of de querie zijn werk heeft gedaan,is die niet goed genoeg?
Eerlijk gezegd, ik zou controleren of de query vals is.
Zoniet, dan moet hij wel juist zijn.
Je kan wel controleren met mysql_affected_rows als je voorbeeld gegevens vanuit je database wijzigt.
Dan wordt de query zoiets:
Code (php)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
require_once 'db_config.php';
$sql = "
UPDATE
leden
SET
naam = '".mysql_real_escape_string($_POST['nieuwe_naam'])."'
WHERE
naam = 'Ian'
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_affected_rows() == 0)
{
echo 'Geen records gewijzigd. <br />Query: '.$sql;
}
else
{
echo 'Update was succesvol!';
}
?>
require_once 'db_config.php';
$sql = "
UPDATE
leden
SET
naam = '".mysql_real_escape_string($_POST['nieuwe_naam'])."'
WHERE
naam = 'Ian'
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_affected_rows() == 0)
{
echo 'Geen records gewijzigd. <br />Query: '.$sql;
}
else
{
echo 'Update was succesvol!';
}
?>
Ik zou je graag ook doorverwijzen naar phptuts.nl
Dat is een goede leersite over sql enzovoort:
http://www.phptuts.nl/view/41/1/
http://www.phptuts.nl/view/39/
Als je dit goed kan, ben je al op de goede weg!
Met vriendelijke groet
Ian
Gewijzigd op 20/03/2012 10:55:29 door - Diov -
- SanThe - op 20/03/2012 05:29:00:
Onzin, want dat werkt niet bij een INSERT.
Reshadd farid op 19/03/2012 22:40:17:
je kan beter mysql_num_rows gebruiken
Onzin, want dat werkt niet bij een INSERT.
Excuse ik keek helemaal verkeerd ik dacht dat hij met een select bezig was
Toevoeging op 20/03/2012 11:15:06:
- SanThe - op 20/03/2012 05:29:00:
Onzin, want dat werkt niet bij een INSERT.
Reshadd farid op 19/03/2012 22:40:17:
je kan beter mysql_num_rows gebruiken
Onzin, want dat werkt niet bij een INSERT.
Excuse ik keek helemaal verkeerd ik dacht dat hij met een select bezig was