Hoi iedereen,

ik ben helemaal opnieuw begonnen met een propere tutorial van w3schools.com. Werkt prima, maar helaas zonder voorbeeld om de gegevens weg te schrijven naar een database.
Kan er iemand zo een voorbeeld integreren in deze tutorial? Dank bij voorbaat.
Ja, die heb ik al gevonden, maar ik weet niet goed welke waarden er aan moeten verandert worden. Zoals in onderstaand stukje code, wat moet er precies in VALUES staan? '$username' of username (uit mijn inputveld) werken allebei niet en ik krijg ook diverse foutmeldingen ivm 'fetch...'

<?php
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]')";
?>
Gezien je een " als string gebruikt, moet je elke variabele buiten quotes plaatsen door de string kortstondig dus te beëindigen, en de variabele met een . eraan te koppelen.

Test dit maar eens uit:

<?php
$variabele = "variabele";
echo "Dit is een string met een ".$variabele.", waarna er weer een string komt!";
?>


Uiteindelijk krijg je dan:

<?php
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
 VALUES ('".$firstname."', '".$lastname."', '".$mailaddress."')";
?>
Marcus geleyn op 04/08/2015 09:45:23

'$username' of username (uit mijn inputveld)

inputveld --> dus een formulier? Dan heb je $_POST nodig.
Denk wel om beveiliging van gegevens die ingevoerd worden.


Marcus geleyn op 04/08/2015 09:45:23

ik krijg ook diverse foutmeldingen ivm 'fetch...'

Welke fetch? Welke foutmeldingen?
De velden $firstname zijn in mijn geval gewoon wat verzonnen variabelen. Je kan net zo goed $_POST['firstname'] gebruiken. Let er dan op (waar Obelix al op attendeerde) dat je de invoer beveiligt tegen SQL-injection. En pas om die variabele heen de functie: mysqli_real_escape_string() toe.
Ok, bedankt allebei, dat is voor straks. Voorlopig ben ik al een eind op de goede weg (denk ik) en onderstaande code werkt reeds. Maar ik heb nog een paar vragen bij onderstaande code:

- van waar de tekst 'test-input', waar slaat die op? => $name = test_input($_POST["name"]);

- bedoel je in de plaats van 'VALUES' te gebruiken, dat het onderstaande voorbeeld beter is?
$name = mysqli_real_escape_string($db, $_POST['name']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$website = mysqli_real_escape_string($db, $_POST['website']);



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body> 

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["name"])) {
     $nameErr = "Name is required";
   } else {
     $name = test_input($_POST["name"]);
     // check if name only contains letters and whitespace
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
       $nameErr = "Only letters and white space allowed"; 
     }
   }
   
   if (empty($_POST["email"])) {
     $emailErr = "Email is required";
   } else {
     $email = test_input($_POST["email"]);
     // check if e-mail address is well-formed
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
       $emailErr = "Invalid email format"; 
     }
   }
     
   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 = "Invalid URL"; 
     }
   }

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

   if (empty($_POST["gender"])) {
     $genderErr = "Gender is required";
   } else {
     $gender = test_input($_POST["gender"]);
   }
}
function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}


if(isset($_POST['name'], $_POST['email'], $_POST['website']))
{
$servername = "****";
$username = "*****";
$password = "*****";
$dbname = "*****";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
 // Check connection
 if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO users (name, email, website)
 VALUES ('$name', '$email', '$website')";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
}

 ?> 
<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
   Name: <input type="text" name="name" value="<?php echo $name;?>">
   <span class="error">* <?php echo $nameErr;?></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: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
   <br><br>
   Gender:
   <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?>  value="female">Female
   <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?>  value="male">Male
   <span class="error">* <?php echo $genderErr;?></span>
   <br><br>
   <input type="submit" name="submit" value="Submit"> 
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;


 ?> 
</body>
</html>

test_input() is een eigen gemaakte functie, die je op lijn 59 hebt staan. Klik maar eens op de functies die er daarin worden gebruikt.

Zelf zou ik liever de inhoud pas controleren op het moment dat je het uit de database haalt, in plaats voordat je het erin stopt.


- bedoel je in de plaats van 'VALUES' te gebruiken, dat het onderstaande voorbeeld beter is?

Huh? VALUES is een onderdeel van je query. Je moet de variabelen die je hierin gebruikt onschadelijk maken met mysqli_real_escape_string. Het is geen vervanger, als je dat denkt.
Ok, wordt aan gewerkt.

Maar hoe krijg ik er nu ook nog een checkbox ingevoegd?


Voorbeeld html form:

 <form name="fruitcheckbox" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
           <input type="checkbox" name="fruit[]" value="orange"> Orange
           <input type="checkbox" name="fruit[]" value="apple"> Apple
           <input type="checkbox" name="fruit[]" value="grapefruit"> Grapefruit
           <input type="checkbox" name="fruit[]" value="banana"> Banana
           <input type="checkbox" name="fruit[]" value="watermelon"> Watermelon
         </form>

En php code:

<?php
$chkbox = array('orange', 'apple', 'grapefruit', 'banana', 'watermelon');
 
if(isset($_POST['btnsave']))
{   $fruit = $_POST['fruit'];
   $values = array();
    foreach($chkbox as $selection )
    {     if(in_array($selection, $fruit))
            { $values[ $selection ] = 1;  }
        else
            { $values[ $selection ] = 0;  }
         } // end of foreach.
 
$insert = "INSERT INTO table_location (orange, apple, grapefruit, banana, watermelon)
          VALUES ({$values['orange']}, {$values['apple']}, {$values['grapefruit']}, {$values['banana']}, {$values['watermelon']})";
 
mysqli_query($dbconnect, $insert) or die('<br/>Error reading database: '.mysqli_error($dbconnect));
 
mysqli_close($dbconnect);
}  // End of, if statement from the button check
 
?>


Moet die code op een speciale plaats staan, voor of na een andere code?
Wat ik mij ook afvraag is het volgende en ik kom diverse voorbeelden tegen op het internet: moet ik in de database slechts één veld hebben omdat php alles samen verpakt, of moet ieder (orange, appel, banana) een eigen veld hebben (boolean of varchar)? Dat begrijp ik nog niet goed. Graag uitleggen in Jip- en Janneketaal ;)



[size=xsmall]Toevoeging op 04/08/2015 11:41:22:[/size]

Marcus geleyn op 04/08/2015 11:40:16

Ok, wordt aan gewerkt.

Maar hoe krijg ik er nu ook nog een checkbox ingevoegd?


Voorbeeld html form:

 <form name="fruitcheckbox" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
           <input type="checkbox" name="fruit[]" value="orange"> Orange
           <input type="checkbox" name="fruit[]" value="apple"> Apple
           <input type="checkbox" name="fruit[]" value="grapefruit"> Grapefruit
           <input type="checkbox" name="fruit[]" value="banana"> Banana
           <input type="checkbox" name="fruit[]" value="watermelon"> Watermelon
         </form>

En php code:

<?php
$chkbox = array('orange', 'apple', 'grapefruit', 'banana', 'watermelon');
 
if(isset($_POST['btnsave']))
{   $fruit = $_POST['fruit'];
   $values = array();
    foreach($chkbox as $selection )
    {     if(in_array($selection, $fruit))
            { $values[ $selection ] = 1;  }
        else
            { $values[ $selection ] = 0;  }
         } // end of foreach.
 
$insert = "INSERT INTO table_location (orange, apple, grapefruit, banana, watermelon)
          VALUES ({$values['orange']}, {$values['apple']}, {$values['grapefruit']}, {$values['banana']}, {$values['watermelon']})";
 
mysqli_query($dbconnect, $insert) or die('<br/>Error reading database: '.mysqli_error($dbconnect));
 
mysqli_close($dbconnect);
}  // End of, if statement from the button check
 
?>


Moet die code op een speciale plaats staan, voor of na een andere code?
Wat ik mij ook afvraag is het volgende en ik kom diverse voorbeelden tegen op het internet: moet ik in de database slechts één veld hebben omdat php alles samen verpakt, of moet ieder (orange, appel, banana) een eigen veld hebben (boolean of varchar)? Dat begrijp ik nog niet goed. Graag uitleggen in Jip- en Janneketaal ;)




Als je de waardes uit je checkboxes wilt opslaan, hoef je geen nieuwe array te maken.
Je kan prima met iets als dit alle waardes uitlezen:

<?php
foreach($_POST['fruit'] as $v) {
echo $v."<br />";
}
?>
Ok, dit is nu mijn code maar ik krijg een wit scherm. Wat doe ik fout?


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;

<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}

if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}

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 = "Invalid URL";
}
}

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

if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}


if(isset($_POST['name'], $_POST['email'], $_POST['website']))
{
$servername = "";
$username = "";
$password = "";
$dbname = "";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

//proef
$chkbox = array('therapprakt', 'therapond', 'therapthuis');
if(isset($_POST['Submit']))
{ $therapie = $_POST['therapie'];
$values = array();
foreach($chkbox as $selection )
{ if(in_array($selection, $therapie))
{ $values[ $selection ] = 1; }
else
{ $values[ $selection ] = 0; }
} // end of foreach.
}
//einde proef

$sql = "INSERT INTO users (name, email, website, therapprakt, therapond, therapthuis)
VALUES ('$name', '$email', '$website', $values['therapprakt'], $values['therapond'], $values['therapthuis']";

if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}

//We protect the variables
$name = mysqli_real_escape_string($db, $_POST['name']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$website = mysqli_real_escape_string($db, $_POST['website']);
?>
<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></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: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
<br><br>
Gender:
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<form name="fruitcheckbox" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<input type="checkbox" name="therapie[]" value="therapprakt"> Therapiepraktijk
<input type="checkbox" name="therapie[]" value="therapond"> Groepspraktijk
<input type="checkbox" name="therapie[]" value="therapthuis"> Thuistherapie
<br>
</form>

<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;


?>
</body>
</html>

Reageren