abonnement Unibet Coolblue Bitvavo
pi_154816901
Hey beste mensen,

Ik ken enigszins de basis van PHP en mysql nu maar ben nog steeds een leek. De connectie met de database is gelukt, het invoeren van gegevens via php met de sql codes ook, maar ik wil nu via een html form het in de database terecht laten komen. Hier gaat het mis.

Ik wil graag 2 gegevens vanuit een form sturen naar een php bestand die het doorstuurt naar de database (mysql, draaiende op localhost gewoon via wampserver). Het wordt 'succesvol' doorgestuurd naar de database maar in de database is het leeg.



Er staat als error bij de php uitput het volgende:



De html code is gewoon dit:

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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<title>Form Input Data</title>
</head>

<body>
<table border="1">
  <tr>
    <td align="center">Gebruikersinformatie</td>
  </tr>
  <tr>
    <td>
      <table>
        <form method="post" action="input.php">
        <tr>
          <td>Voornaam</td>
          <td><input type="text" name="voornaam" size="40">
          </td>
        </tr>
        <tr>
          <td>Achternaam</td>
          <td><input type="text" name="lastname" size="40">
          </td>
        </tr>
        <tr>
          <td></td>
          <td align="right"><input type="submit" 
          name="submit" value="Sent"></td>
        </tr>
        </table>
      </td>
    </tr>
</table>
</body>
</html>

Hier is niks mis mee (ja moet nog genoeg aan gedaan worden dat weet ik, gebruik dit gewoon om de basis voor elkaar te krijgen ;) )

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
<?php
$servername = "localhost";
$username = "root";
$password = "***";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


$sql = "INSERT INTO gebruikers (voornaam, achternaam)
VALUES ('$voornaam', '$achternaam')";

if ($conn->query($sql) === TRUE) {
    echo "Succesvol toegevoegd";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 

Het bovenstaande heb ik staan in input.php (wachtwoord even weggehaald, verbinding werkt gewoon)

Ik kom er gewoon niet achter hoe ik de variabelen moet definieren die ik meegeef vanuit het form (voornaam, achternaam). Het zal wel vrij simpel zijn en iets in de basis wat ik niet weet. Wat moet er bij die php code komen om die variabelen goed te definieren?

Heb er uren naar gezocht weer en veel geleerd daarvan maar het antwoord hierop juist niet gevonden.

Alvast bedankt :)
Fylax is op televisie geweest
pi_154816963
Je moet voornaam en achternaam wel declareren en uit de POST halen.
  zaterdag 1 augustus 2015 @ 13:48:23 #4
436847 embedguy
Embedded in your genius dreams
pi_154817002
Als ik even niets over het hoofd zie, zou dit moeten werken:
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
<?php
$servername = "localhost";
$username = "root";
$password = "***";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$voornaam=$_POST['voornaam'];
$lastname=$_POST['lastname'];
$sql = "INSERT INTO gebruikers (voornaam, achternaam)
VALUES (".$voornaam.", ".$lastname.")";

if ($conn->query($sql) === TRUE) {
    echo "Succesvol toegevoegd";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 
De regels die ik toegevoegd/veranderd heb zijn:
1
2
3
4
$voornaam=$_POST['voornaam'];
$lastname=$_POST['lastname'];
$sql = "INSERT INTO gebruikers (voornaam, achternaam)
VALUES (".$voornaam.", ".$lastname.")";

Voornaam is btw surname in het engels :)... Nu ziet het er een beetje krom uit :).

Succes verder!

[ Bericht 2% gewijzigd door embedguy op 01-08-2015 13:54:35 ]
Never allow waiting to become a habit.
Live your dreams and take risks.
Life is happening now.
pi_154817202
Bedankt beide :) De voornaam komt nu goed in de database, de achternaam nog niet.

1Notice: Undefined index: achternaam in C:\wamp\www\input.php on line 17

Kan het zo zijn dat ik een stukje code moet gebruiken waarmee ik aangeef dat het 2 dingen zijn die gepakt moeten worden? fetchassociate (fetchas ofzo). Staat me iets van bij dus ga dat nu proberen op te zoeken.

Dat stuk van W3 schools heb ik trouwens ook doorgenomen maar vergeten dat dat er ook in stond daar :@ , stond me nog vooral van bij over die beveiliging tegen SQL injecties.

Dit trouwens bekeken maar werkte niet, ook omdat hij slechts 1 variabele gebruikt lijkt me..

Fylax is op televisie geweest
  zaterdag 1 augustus 2015 @ 14:14:09 #6
436847 embedguy
Embedded in your genius dreams
pi_154817341
quote:
0s.gif Op zaterdag 1 augustus 2015 14:02 schreef jodelahity het volgende:
Bedankt beide De voornaam komt nu goed in de database, de achternaam nog niet.

1 Notice: Undefined index: achternaam in C:\wamp\www\input.php on line 17

Schijnbaar staat de kolom 'achternaam' niet (meer) in de database...

De database is nog steeds zoals in de openingspost?

Verder zie ik zo 123 niet wat er fout zou kunnen zijn...
Never allow waiting to become a habit.
Live your dreams and take risks.
Life is happening now.
pi_154818007
quote:
0s.gif Op zaterdag 1 augustus 2015 14:14 schreef embedguy het volgende:

[..]

Schijnbaar staat de kolom 'achternaam' niet (meer) in de database...

De database is nog steeds zoals in de openingspost?

Verder zie ik zo 123 niet wat er fout zou kunnen zijn...






Code is nu

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
<?php
$servername = "localhost";
$username = "root";
$password = "***";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$voornaam=$_POST['voornaam'];
$achternaam=$_POST['achternaam'];

$sql = "INSERT INTO gebruikers (voornaam, achternaam)
VALUES ('$voornaam', '$achternaam')";

if ($conn->query($sql) === TRUE) {
    echo "Succesvol toegevoegd";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 

Ik weet ook nog niet wat er niet aan klopt maar ik blijf zoeken :P Als ik dit voor elkaar krijg kan ik een goedwerkende form uitwerken, beveiliging toevoegen enzovoort
Fylax is op televisie geweest
pi_154818061
In de code van embedguy staat een foutje

ipv achternaam staat er lastname

;)

-edit-

Ah jij hebt het al aangepast zie ik :P

Heb je de html file ook aangepast?
pi_154818126
quote:
0s.gif Op zaterdag 1 augustus 2015 15:07 schreef ClapClapYourHands het volgende:
In de code van embedguy staat een foutje

ipv achternaam staat er lastname

;)

-edit-

Ah jij hebt het al aangepast zie ik :P

Heb je de html file ook aangepast?
Wat ben ik ook een druif weer :@

Het werkt nu.

Had in mijn html nu blijkbaar lastname er wel weer instaan, waarschijnlijk per ongeluk de verkeerde opgeslagen nadat ik meerdere open had staan :@

Bedankt allemaal :) Stom dat ik zo'n fout maakte
Fylax is op televisie geweest
pi_154818134
^O^

Altijd leuk om foutjes te zoeken. Soms uren zoeken naar een ;

_O-
pi_154818223
quote:
0s.gif Op zaterdag 1 augustus 2015 15:11 schreef ClapClapYourHands het volgende:
^O^

Altijd leuk om foutjes te zoeken. Soms uren zoeken naar een ;

_O-
Ja dat is bij mij standaard :') Sommige dingen lukken me gewoon niet snel door gebrek aan kennis, had al moeite met het maken van verbinding met de database in het begin en dan daarna gaat alles weer tijdelijk heel vlot (SELECT FROM WHERE van sql enzovoort) totdat ik dan het in een form wil doen :P Zal de komende tijd wel vaker iets vragen als ik er echt niet uit kom :X

Heb nu een parttime baan van 3 dagen per week om een website (af) te maken met mysql, php, jquery, ajax enzovoort vandaar dat ik er nu zoveel mee bezig ben ook thuis :P Eigen portfolio aanmaken en leren hoe het werkt voor mijn werk :P Net afgestudeerd (communicatiesystemen aan het HBO) maar daar leer je overal de basis slechts van en ook niet slechts gericht op websites enzovoort dus ja.
Fylax is op televisie geweest
pi_154818329
Mja van fouten maken leer je wel. Volgende keer let je wel 3 keer op of de variabelen goed gelinkt zijn etc. ;)
pi_154821035
Ik ben bijna klaar, ik moet er alleen nog voor zorgen dat het niet direct naar de database gestuurd wordt bij het laden. Even een uitleg: de pagina laadt nu zoals de onderstaande afbeelding



quote:
Daar wordt direct al info gestuurd naar de database (een lege rij is daar te zien). Vervolgens kan je het formulier invullen en wordt de ingevulde gegevens getoond, en op de juiste manier in de database geplaatst




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
 <!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>

<body>

<?php include 'input.php';?>
<?php include 'toevoegen.php';?>

<h2>Testformulier</h2>
<p>Hieronder kunt u uw (of fictieve) gebruikersgegevens invullen. <br ?> 
De verstuurde gegevens ziet u onderaan en worden in een mysql database opgeslagen.<br />
<br />
<p><span class="error">* Benodigde velden.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
   Naam: <input type="text" name="naam" value="<?php echo $naam;?>">
   <span class="error">* <?php echo $naamErr;?></span>
   <br /><br />
   E-mail: <input type="text" name="email" value="<?php echo $email;?>">
   <span class="error">* <?php echo $emailErr;?></span>
   <br /><br />
   Website: <input type="text" name="website" value="<?php echo $website;?>">
   <span class="error"><?php echo $websiteErr;?></span>
   <br /><br />
   Comment: <br />
<textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
   <br /><br />
  
   <input type="submit" name="submit" value="Submit">
</form>

<?php
echo "<h2>De door u ingevulde gegevens:</h2>"; 
echo $naam;
echo "<br />";
echo $email;
echo "<br />";
echo $website;
echo "<br />";
echo $comment;
?>

</body>
</html>

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
<?php
// define variables and set to empty values
$naamErr = $emailErr = $websiteErr = "";
$naam = $email = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["naam"])) {
     $naamErr = "Het invullen van een naam is noodzakelijk";
   } else {
     $naam = test_input($_POST["naam"]);
     // check if naam only contains letters and whitespace
     if (!preg_match("/^[a-zA-Z ]*$/",$naam)) {
       $naamErr = "Alleen letters en spaties zijn toegestaan";
     }
   }
  
   if (empty($_POST["email"])) {
     $emailErr = "Een e-mail adres is noodzakelijk";
   } else {
     $email = test_input($_POST["email"]);
     // check if email address is well-formed
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
       $emailErr = "Geen kloppend e-mail formaat";
     }
   }
    
   if (empty($_POST["website"])) {
     $website = "";
   } else {
     $website = test_input($_POST["website"]);
     // check if URL address syntax is valid (this regular expression also allows dashes in the URL)
     if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
       $websiteErr = "Ongeldig websiteformaat";
     }
   }

   if (empty($_POST["comment"])) {
     $comment = "";
   } else {
     $comment = test_input($_POST["comment"]);
   }

  
}

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?>

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
<?php
$servername = "localhost";
$username = "root";
$password = "***";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$naam=$_POST['naam'];
$email=$_POST['email'];
$website=$_POST['website'];
$comment=$_POST['comment'];

$sql = "INSERT INTO gebruikerscompleet (naam, email, website, comment)
VALUES ('$naam', '$email', '$website', '$comment')";

if ($conn->query($sql) === TRUE) {
    echo "Succesvol toegevoegd";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 

Nu verwacht ik dat ik zoiets moet typen als:

if field is empty then 'niet versturen naar database' (om die lege rij niet direct te krijgen)

Maar dit krijg ik dus niet voor elkaar. Wat moet ik bij die laatste code plaatsen dat het niet direct laadt bij het openen van form.php maar pas nadat het formulier ingevuld en verzonden is gaat runnen?
Fylax is op televisie geweest
pi_154821119
Iets als dit kan je gebruiken voordat je de sql connectie opzet

1
2
3
if(empty($_POST['foo'])) {
   echo "a sentence".$_POST['foo']." with something in the middle.";
}
pi_154821154
Ik zit nu mobiel dus zal het kort houden

Je kan ipv empty ook !empty gebruiken (niet leeg)

Bij !empty alles uitvoeren
Else
Terug naar pagina
pi_154821203
dank je, ik zal erop zoeken :)
Fylax is op televisie geweest
pi_154821656
Edit: die vraag is beantwoord

Ik probeer nu het voor elkaar te krijgen dat de informatie pas naar de database wordt gestuurd als de validatie ook klopt. Dus de naam geen nummer heeft, het e-mail adres klopt enzovoort. Die validatie heb ik in orde, maar nu moet ik er nog voor zorgen dat het eerst gevalideerd wordt voordat het verzonden wordt naar de database (wat het nu wel wordt, ook dus als het e-mail adres: niksniks is)

[ Bericht 42% gewijzigd door jodelahity op 01-08-2015 18:49:38 ]
Fylax is op televisie geweest
pi_154825343
Tip: je maakt nog een vrij klassieke beginnersfout, namelijk de input (POST-data) direct in de database zetten. Dat maakt je code vatbaar voor SQL injectie. Leer jezelf meteen aan om gebruik te maken van prepared statements :)

Dit:

1
2
3
4
5
6
7
8
9
10
11
12
13
$naam=$_POST['naam'];
$email=$_POST['email'];
$website=$_POST['website'];
$comment=$_POST['comment'];

$sql = "INSERT INTO gebruikerscompleet (naam, email, website, comment)
VALUES ('$naam', '$email', '$website', '$comment')";

if ($conn->query($sql) === TRUE) {
    echo "Succesvol toegevoegd";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

Wordt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$naam=$_POST['naam'];
$email=$_POST['email'];
$website=$_POST['website'];
$comment=$_POST['comment'];

$sql = $conn->prepare("INSERT INTO gebruikerscompleet (naam, email, website, comment)
VALUES (?, ?, ?, ?)");
$sql->bind_param('ssss', $naam, $email, $website, $comment);

if (!$sql->execute()) {
    echo "Error: " . $sql->error;
} else {
    echo "Succesvol toegevoegd";
}

En voila, veilige code :)
"You wanna be bald? Do what I did: wait a while. In the meantime, there is no excuse for running around looking like a freshly circumcised dick."
  zaterdag 1 augustus 2015 @ 20:51:51 #19
436847 embedguy
Embedded in your genius dreams
pi_154825901
quote:
0s.gif Op zaterdag 1 augustus 2015 18:00 schreef jodelahity het volgende:
Edit: die vraag is beantwoord

Ik probeer nu het voor elkaar te krijgen dat de informatie pas naar de database wordt gestuurd als de validatie ook klopt. Dus de naam geen nummer heeft, het e-mail adres klopt enzovoort. Die validatie heb ik in orde, maar nu moet ik er nog voor zorgen dat het eerst gevalideerd wordt voordat het verzonden wordt naar de database (wat het nu wel wordt, ook dus als het e-mail adres: niksniks is)
Misschien kun je er zowiets van maken:
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
$Valid=TRUE;
if(empty($_POST['foo1'])) {
   echo "Error sentence 1.";
$Valid=FALSE;
}
if(empty($_POST['foo2'])) {
   echo "Error sentence 2.";
$Valid=FALSE;
}
if($Valid) {
   $naam=$_POST['naam'];
$email=$_POST['email'];
$website=$_POST['website'];
$comment=$_POST['comment'];

$sql = $conn->prepare("INSERT INTO gebruikerscompleet (naam, email, website, comment)
VALUES (?, ?, ?, ?)");
$sql->bind_param('ssss', $naam, $email, $website, $comment);

if (!$sql->execute()) {
    echo "Error: " . $sql->error;
} else {
    echo "Succesvol toegevoegd";
}
}

Of zowiets

if(){}
elseif(){}
elseif(){}
else{
//Hier het plaatsen van de gegevens in de database.
}
Never allow waiting to become a habit.
Live your dreams and take risks.
Life is happening now.
  zaterdag 1 augustus 2015 @ 20:54:08 #20
436847 embedguy
Embedded in your genius dreams
pi_154825992
quote:
0s.gif Op zaterdag 1 augustus 2015 20:35 schreef pussywillow het volgende:
Tip: je maakt nog een vrij klassieke beginnersfout,
...
En voila, veilige code :)
Never allow waiting to become a habit.
Live your dreams and take risks.
Life is happening now.
pi_154827307
Edit: was te snel. stond 2 keer error code in door mij
Fylax is op televisie geweest
  zondag 2 augustus 2015 @ 23:50:00 #22
302898 RockNijntje
Je dagelijkse dosis Zillennial
pi_154856441
Oh databases.
Als je mij ziet posten ben ik verdwaald in het verleden of mis ik jullie
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')