<?php session_start();
function quote_smart($value) {
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
if(version_compare(phpversion(),"4.3.0") == "-1") {
return mysqli_escape_string($value);
} else {
return mysqli_real_escape_string($value);
}
}
if(isset($_POST['submit'])){
	// code for check server side validation
	if(empty($_SESSION['captcha_code'] ) || strcasecmp($_SESSION['captcha_code'], $_POST['captcha_code']) != 0){  
		$msg="<span style='color:red'>The Validation code does not match!</span>";// Captcha verification is incorrect.		
	}else{// Captcha verification is Correct. Final Code Execute here!		
		$msg="<span style='color:green'>The Validation code has been matched.</span>";	
$servername = "a";
$username = "b";
$password = "c";
$dbname = "d";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection 
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$collection= array('orange', 'apple', 'grapefruit', 'banana', 'watermelon');
$fruit = array('orange', 'apple', 'grapefruit', 'banana', 'watermelon');
if(isset($_POST['submit']))
{   $fruit = $_POST['fruit'];
   $values = array($collection);
    foreach($collection as $selection )
    {     if(in_array($selection, $fruit))
            { $values[ $selection ] = 1;  }
        else
            { $values[ $selection ] = 0;  }
   }

$sql = "INSERT INTO guessing (student_name, student_email, student_city, orange, apple, grapefruit, banana, watermelon)
    VALUES(
        '".$conn->real_escape_string($_POST["student_name"])."',
        '".$conn->real_escape_string($_POST["student_email"])."',
        '".$conn->real_escape_string($_POST["student_city"])."',
    {$values['orange']}, {$values['apple']}, {$values['grapefruit']}, {$values['banana']}, {$values['watermelon']})";		
	
if ($conn->query($sql) === TRUE) {
echo "<script type= 'text/javascript'>alert('New record created successfully');</script>";
} else {
echo "<script type= 'text/javascript'>alert('Error: " . $sql . "<br>" . $conn->error."');</script>";
}   
 // end of foreach.
 
    // MySQL statement.    
// MySQL statement to execute the INSERT statement above.           
mysqli_query($conn, $sql) or die('<br/>Error reading database: '.mysqli_error($conn));
mysqli_close($conn);
}  // End of, if statement from the button check
;
}	
	}	
?>
<html>
    <head>

         <meta charset="utf-8">
<title>Testwebsite</title>
<script type='text/javascript'>
function refreshCaptcha(){
    var img = document.images['captchaimg'];
    img.src = img.src.substring(0,img.src.lastIndexOf("?"))+"?rand="+Math.random()*1000;
}
</script>
    </head>
    <body>
<form action="" method="post" name="form1" id="form1" >
           <input type="checkbox" name="fruit[Orange]" value="orange"> Orange
           <input type="checkbox" name="fruit[Apple]" value="apple"> Apple
           <input type="checkbox" name="fruit[Grapefruit]" value="grapefruit"> Grapefruit
           <input type="checkbox" name="fruit[Banana]" value="banana"> Banana
           <input type="checkbox" name="fruit[Watermelon]" value="watermelon"> Watermelon
		   <br>
                   <label>Student Name :</label>
                          <input type="text" name="student_name" id="name" required="required" placeholder="Please Enter Name"/><br /><br />
                   <label>Student Email :</label>
                          <input type="email" name="student_email" id="email" required="required" placeholder="[email protected]"/><br/><br />
                   <label>Student City :</label>
                          <input type="text" name="student_city" id="city" required="required" placeholder="Please Enter Your City"/><br/><br />
  
                             <meta charset="utf-8">
                             <script type='text/javascript'>
                             function refreshCaptcha(){
                             var img = document.images['captchaimg'];
                             img.src = img.src.substring(0,img.src.lastIndexOf("?"))+"?rand="+Math.random()*1000;
                             }
                             </script>
                                                   <?php if(isset($msg)){?>
                                                   <?php echo $msg;?></td>
                                                   <?php } ?>
                             Validation code:
                                 <img src="captcha.php?rand=<?php echo rand();?>" id='captchaimg'><br>
                                 <label for='message'>Enter the code above here :</label>
                                 <br>
                                 <input id="captcha_code" name="captcha_code" type="text">
                                 <br>
                            Can't read the image? click <a href='javascript: refreshCaptcha();'>here</a> to refresh.</td>
                                                <input name="submit" type="submit" value="submit">
</form>
</body>
</html>


Als ik nu deze data op sla in mijn database krijg ik bijvoorbeeld:
banaan : 1
orange : 0
enzv...

Dit is een probleem, omdat ik 200 mogelijk heden dus heb en de database laat er maar 100 toe.
Kan het niet zo gemaakt worden dat je een lijst krijgt met wat diegene heeft gekozen

gekozen : banaan, appel.
Het is raadzamer om je code even eerst op te frissen. Je hebt nu een functie bovenaan staan die controleert op magic_quotes en de versie van PHP. Nu ga ik ervanuit dat je een up-to-date PHP hebt waarbij je deze hele functie achterwege kan laten.

De enige en beste manier in dit script om SQL-injection tegen te gaan, is door $conn->real_escape_string te gebruiken.

Verder is het raadzaam om als controle of een formulier verstuurd is (regel 12) om te bouwen naar:
if($_SERVER['REQUEST_METHOD']=="POST") {


En verder ben ik benieuwd waarom je twee array's hebt met fruitsoorten? ($collection en $fruit).

Op lijn 31 controleer je wederom of je formulier verstuurd is. Die controle had je immers al eerder gedaan.

En tenslotte onderaan gebruik je opeens procedurele code, terwijl je OO gebruikt.


Op regel 32 wordt $fruit van regel 30 overschreven door een $_post waarde.
Waarom overschrijven en waarom die $_post waarde in een variabele zetten?
Maar wat is dan de reden dat er dan niks wordt uitgevoerd en eigenlijk als gewoon tekst op de pagina wordt geplakt.
Wat zie je dan precies op je scherm?
Krijg nu een error van Warning: in_array() expects parameter 2 to be array, null given.
Hoe los ik dit op?
Als ik het vertaal komt het uit op:

in_array() verwacht dat parameter 2 een array is, er is een NULL (niks) gegeven.
Je voert in_array dus de verkeerde soort gegevens die blijkbaar geen array is.
Dus ik los het op door...?
Een array mee te geven...
Als ik in jouw code kijk, moet je deze niet overschrijven door $_POST['fruit']
En wat meot ik dan wel gebruiken?
Een array natuurlijk. Lees anders dit eens:
[php]in_array[/php]

Maar als ik je code zie, vraag ik me af of het niet zinvoller is om dit weg te gooien, en opnieuw te beginnen. Waarom twee dezelfde array's etc...?

Reageren