Gegevens aan database toevoegen lukt niet.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

NIne Viaene

NIne Viaene

24/11/2015 21:03:24
Quote Anchor link
Hallo,

Ik heb een script gemaakt waarbij je je bmi kan berekenen, je feedback krijgt en je gegevens dan toegevoegd zouden moeten worden aan de database. Bij dat laatste zit ik strop en ik kan niet vinden waar de fout ligt. Laat ik het stukje over de feedback weg, lukt toevoegen wel. Wil ik het toevoegen erbij, dan komt er geen feedback meer. De combinatie van en feedback en toevoegen lukt dus niet.
Zou iemand mij op weg kunnen zetten aub? Alvast heel erg bedankt!

Mijn index-bestand :
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
<?php

  include 'includes/config.inc.php';
  include 'includes/functies.inc.php';
  include 'includes/foutmeldingen.inc.php';

  $query = 'SELECT * FROM gegevens;';
  $stmt = $conn->prepare($query);
  $stmt->execute();
  $gegevens = $stmt->fetchALL();

?>


<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title> BMI-gegevens</title>
  <link rel="stylesheet" type="text/css" href="css/opmaak.css">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
</head>
<body>
  <h1>bereken jouw bmi</h1>
  <h2>vul onderstaand formulier in om je bmi te berekenen</h2>

 <form method="post">
    <p>
      <label for="naam">Naam</label>
      <input type="text" id="naam" name="naam"
             value="<?php if(!empty($_POST['naam'])) { print $_POST['naam']; } ?>" required>
    </p>

    <p>
      <label for="lengte">Ik meet</label>
      <input type="text" name="lengte" id="lengte"
             value="<?php if(!empty($_POST['lengte'])) { print $_POST['lengte']; } ?>" required> cm.
    </p>

    <p>
      <label for="gewicht">Ik weeg</label>
      <input type="text" name="gewicht" id="gewicht" required
             value="<?php if(!empty($_POST['gewicht'])) { print $_POST['gewicht']; } ?>"> kg.
    </p>
    
    <input type="submit" name="submit" value="Bereken mijn bmi" id="verzenden">
  </form>

  <div class="feedback">
    <?php
      if($_POST) {

        if(empty($error)){
          print "Hallo" . " " . $data['naam'] . "!";
          print "<p>Je BMI bedraagt " . bereken_bmi($lengte, $gewicht) . ".</p>";
          print "<p>" . feedback($bmi) . "!</p>";
              
         }
elseif (!empty($error)){
            print "Je hebt niet alles (correct) ingevuld :";
            foreach ($error as $error) {
              print "<p>" . $error . "</p>";
            }
         }
      }
  
    ?>

  </div>

  <table>
      <tr>
        <th>Datum</th>
        <th>Naam</th>
        <th>Lengte</th>
        <th>Gewicht</th>
        <th>Verwijder</th>
      </tr>
    <?php foreach($gegevens as $data): ?>
      <tr>
        <td><?php echo date('d-m-Y')?></td>
        <td><?php print $data ['naam']?></td>
        <td><?php print $data ['lengte']?></td>
        <td><?php print $data ['gewicht']?></td>
        <td><a href="verwijderen.php?id=<?php print $data['id'] ?>"><i class="fa fa-minus-circle"></i></a> </td>
      </tr>
    <?php endforeach; ?>
</table>
</body>
</html>



Mijn config.inc bestand :
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
<?php
$dbUser
= 'root';
$dbPass = 'root';
$dbName = 'bmi';

$conn = new PDO("mysql:host=localhost;dbname=$dbName", $dbUser, $dbPass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>




[b]Mijn functies-bestand : [/b]

<?php
  
    function bereken_bmi($lengte, $gewicht) {
        $lengte = $_POST['lengte'];
        $gewicht = $_POST['gewicht'];
        $bmi = $gewicht / (($lengte / 100) * ($lengte / 100));
        return $bmi;
    }

    function
feedback($bmi){
        $lengte = $_POST['lengte'];
        $gewicht = $_POST['gewicht'];
        $bmi = $gewicht / (($lengte / 100) * ($lengte / 100));
        if($bmi < 18){
          $message = "je bent te mager";
          return $message;        
        }
elseif ($bmi >= 18 && $bmi <= 25){
          $message = "je hebt een normaal gewicht";
          return $message;
        }
elseif ($bmi > 25){
          $message = "je hebt overgewicht";
          return $message;
        }
    }

?>



En mijn foutmeldingen-bestand :
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
<?php

  $error
=array();
  $form_verzonden = false;

  $data = [
    'lengte'=>'',
    'gewicht'=>'',
    'naam'=>''
  ];

  if($_POST){
      $data = $_POST;

      if(empty($_POST['naam'])) {
          $error['naam'] = "Het ingeven van je naam is verplicht!";
        }
elseif (!preg_match("/^[a-zA-Z ]*$/", $_POST['naam'])) {
          $error['naam'] = "De ingegeven naam is niet correct. Enkel letters en spaties kunnen gebruikt worden!";
        }


        if(empty($_POST['lengte'])) {
          $error['lengte'] = "Het ingeven van je lengte is verplicht!";
        }
elseif (!preg_match("/^[0-9]*$/", $_POST['lengte'])) {
          $error['lengte'] = "Je ingegeven lengte kan alleen cijfers bevatten!";    
        }
elseif (strlen ($_POST['lengte'])>3 || strlen ($_POST['lengte'])<2){
          $error['lengte'] = "Je ingegeven lengte moet minimum 2 en maximum 3 cijfers bevatten";
        }


        if(empty($_POST['gewicht'])) {
          $error['gewicht'] = "Het ingeven van je gewicht is verplicht!";
        }
elseif (!preg_match("/^[0-9]*$/", $_POST['gewicht'])) {
          $error['gewicht'] = "Je ingegeven gewicht kan alleen cijfers bevatten!";
        }


        if (empty($error)) {
          $lengte = $_POST['lengte'];
          $gewicht = $_POST['gewicht'];
          $bmi = $gewicht / (($lengte/100) * ($lengte/100));
      }
   }

?>

- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!


Toevoeging op 24/11/2015 21:10:10:

Bedankt, ik was mijn bericht al aan het wijzigen, want dat zag er echt niet goed uit, maar vond niet hoe dit moest.
Gewijzigd op 24/11/2015 21:08:37 door - Ariën -
 
PHP hulp

PHP hulp

26/04/2024 21:25:05
 
Jan de Laet

Jan de Laet

24/11/2015 21:15:16
Quote Anchor link
Ik zie nergens een INSERT sql.
 
NIne Viaene

NIne Viaene

24/11/2015 21:23:22
Quote Anchor link
Sorry, vergeten toe te voegen :

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
<?php
    include 'includes/config.inc.php';

    if (!empty($_POST)) {

        $data = $_POST;
        

          $query = 'INSERT INTO gegevens (naam, lengte, gewicht)
                    VALUES (:naam, :lengte, :gewicht)'
;
        $stmt = $conn->prepare($query);
        $stmt->execute([
              'naam' => $data['naam'],
              'lengte' => $data['lengte'],
              'gewicht' => $data['gewicht']
        ]);


        if($stmt->rowCount()){
              header('location: index.php');
        }
    }


?>



Wanneer ik bij mijn form: action="toevoegen.php" toevoeg, worden er wel gegevens ingediend bij de database (ook al zijn mijn velden leeg, maar zodra ik op de submit-knop druk, gebeurt dit toch) en mijn feedback wordt niet meer getoond.

Toevoeging op 24/11/2015 22:52:26:

Inmiddels ben ik een stapje verder geraakt. Door mijn toevoegen.php op deze manier op te stellen, worden er alleen gegevens toegevoegd indien alles correct is ingevuld. Nu nog een oplossing vinden voor het feit dat wanneer iets niet correct ingevuld is, ik geen foutmeldingen krijg. Erger nog, ik zie gewoon een witte pagina.

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
<?php
    include 'includes/config.inc.php';

    $error=array();
  
      $data = [
        'lengte'=>'',
        'gewicht'=>'',
        'naam'=>''
      ];

    if($_POST){
        
        $data = $_POST;

        if(empty($_POST['naam'])) {
            $error['naam'] = "Het ingeven van je naam is verplicht!";
          }
elseif (!preg_match("/^[a-zA-Z ]*$/", $_POST['naam'])) {
            $error['naam'] = "De ingegeven naam is niet correct. Enkel letters en spaties kunnen gebruikt worden!";
          }


          if(empty($_POST['lengte'])) {
            $error['lengte'] = "Het ingeven van je lengte is verplicht!";
          }
elseif (!preg_match("/^[0-9]*$/", $_POST['lengte'])) {
            $error['lengte'] = "Je ingegeven lengte kan alleen cijfers bevatten!";    
          }
elseif (strlen ($_POST['lengte'])>3 || strlen ($_POST['lengte'])<2){
            $error['lengte'] = "Je ingegeven lengte moet minimum 2 en maximum 3 cijfers bevatten";
          }


          if(empty($_POST['gewicht'])) {
            $error['gewicht'] = "Het ingeven van je gewicht is verplicht!";
          }
elseif (!preg_match("/^[0-9]*$/", $_POST['gewicht'])) {
            $error['gewicht'] = "Je ingegeven gewicht kan alleen cijfers bevatten!";
          }


          if (empty($error)) {
              $lengte = $_POST['lengte'];
              $gewicht = $_POST['gewicht'];
              $bmi = $gewicht / (($lengte/100) * ($lengte/100));
      
            $query = 'INSERT INTO gegevens (naam, lengte, gewicht)
                 VALUES (:naam, :lengte, :gewicht)'
;
            $stmt = $conn->prepare($query);
            $stmt->execute([
                'naam' => $data['naam'],
                  'lengte' => $data['lengte'],
                  'gewicht' => $data['gewicht']
            ]);

            if($stmt->rowCount()) {
                header('location:index.php');
            }
        }
    }
Gewijzigd op 24/11/2015 21:23:55 door NIne Viaene
 
Peter K

Peter K

25/11/2015 08:07:32
Quote Anchor link
Dit kun je in een los bestand proberen:
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
<?php
    $test
= "hoi'";

    if(empty($test)) {
        $error['naam'] = "Het ingeven van je naam is verplicht!";
    }
elseif (!preg_match("/^[a-zA-Z ]*$/", $test)) {
        $error['naam'] = "De ingegeven naam is niet correct. Enkel letters en spaties kunnen gebruikt worden!";
    }
else {
        $error['naam'] = "Geen error bekend";
    }

              
    print_r($error);

?>


Je zult dan zien dat hij het netjes laat zien zodra je $test veranderd.


Een aantal schoonheidsdingen:

Om te controleren of een POST gedaan is het netter om op regel 12 het volgende te doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
if($_SERVER['REQUEST_METHOD'] == 'POST')
{


Op regel 14 staat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$data = $_POST;


In het hele stuk er onder werk je gewoon met $_POST['veldnaam'].
Op regel 44 begin je vervolgens weer met $data['veldnaam'].
 
NIne Viaene

NIne Viaene

25/11/2015 08:39:24
Quote Anchor link
Dankjewel voor je reactie! Het is intussen gelukt om alles te laten functioneren, maar bedankt voor de 'testversie'! Die kan ik volgende keer goed gebruiken om te zien of alles correct werkt, het is een hele goeie tip! En inderdaad zo'n 'schoonheidsfoutjes' sluipen er bij een beginneling zoals ik vaak in....maar ze moeten er uit!
 



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.