Lege velden in mijn database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ben Pino

Ben Pino

18/03/2012 21:01:29
Quote Anchor link
Hoi alle,

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)
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
<?php
$thisfile
= $_SERVER['PHP_SELF'];


$invoer_form = <<<invoerform
<FORM  METHOD ="POST"  ACTION ="$thisfile" >
<p>Naam:&nbsp &nbsp<INPUT TYPE ="text"  SIZE= 25 NAME= "naam"  ></p>
<p>Bericht &nbsp &nbsp <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>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php echo $message;
      
      
?>




</body>
</html>
 
PHP hulp

PHP hulp

24/12/2024 14:54:25
 
 - Diov  -

- Diov -

18/03/2012 21:09:01
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}


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 -
 
Roel -

Roel -

18/03/2012 21:27:11
Quote Anchor link
Dit script is zo lek als een mandje. Dit zijn mijn kritiekpunten:
  • 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.
 
- SanThe -

- SanThe -

18/03/2012 23:11:04
Quote Anchor link
Volg bovenstaande tips zeker op.

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 -
 
Ben Pino

Ben Pino

19/03/2012 22:09:33
Quote Anchor link
-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?
 
Reshad F

Reshad F

19/03/2012 22:40:17
Quote Anchor link
je kan beter mysql_num_rows gebruiken
 
- SanThe -

- SanThe -

20/03/2012 05:29:00
Quote Anchor link
Reshadd farid op 19/03/2012 22:40:17:
je kan beter mysql_num_rows gebruiken


Onzin, want dat werkt niet bij een INSERT.
 
 - Diov  -

- Diov -

20/03/2012 10:54:25
Quote Anchor link
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?



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)
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
<?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!';
}

?>


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 -
 
Reshad F

Reshad F

20/03/2012 11:14:25
Quote Anchor link
- SanThe - op 20/03/2012 05:29:00:
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:
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
 



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.