Goeieavond,

Ik ben nu een 2-tal weken bezig met php & mysql. Ik werk aan de hand van een boek die pas uitgekomen is en van de recentste Lynda.com videos. Ik focus me op Mysqli ipv PDO omdat ik zelf toch uitsluitend werk met Mysql. Het bevalt me enorm! Het enige dat er natuurlijk gebeurd is dat je na een tijdje begint te experimenteren. Het werkt en je bent blij...maar is het wel goed?...of correct?

Ik heb bijvoorbeeld iets simpels in elkaar geflanst, vlug vlug...

Doordat men enorm waarschuwt voor sql injection werk ik met prepared statements....

Kan iemand mij vertellen of mijn spaghetticode op "iets" trekt en veilig is? Ben ik op de goede weg?


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>
  <body>
  	<form action="homes.php" method="POST">
  		<p>Zoek: <input type="text" name="search" /></p>
  		<p>Voornaam: <input type="text" name="Voornaam" /></p>
  		<p>Achternaam: <input type="text" name="Achternaam" /></p>
  		<p>Adres: <input type="text" name="Adres" /></p>
  		<p>Discipline: <input type="text" name="Discipline" value="1 tot 5" /></p>
  		<p>Bevestig zoeken: <input type="submit" name="Submit" /></p>
  		<p>Voeg toe aan databank <input type="submit" name="Add_DB" value="Add to Database" /></p>
  	</form>
  <?php
	require_once 'isset.php';
	?>
  </body>
</html>



This is the PHP

<?php
	require_once 'login.php';
	$dbcon =  mysqli_connect($db_host, $db_username, $db_password, $db_database);
	if(mysqli_connect_errno()) die ("Error during connection");

	if(isset($_POST['Submit'])){
		

		$Naam = $_POST['search'];

		$Result = mysqli_query($dbcon,"SELECT * FROM customers WHERE Voornaam = '$Naam'");
		if(!$Result) die ("Nothing to show");

		$Rows = $Result->num_rows;

		for($i=0; $i < $Rows; $i++){
			$Row = mysqli_fetch_array($Result, MYSQLI_ASSOC);
			echo "Voornaam: " . $Row['Voornaam'] . "<br>";
			echo "Achternaam: " . $Row['Achternaam'] . "<br>";
			echo "Adres: " . $Row['Adres'] . "<br>";
			echo "<hr>";
			
		}
	}

		if(isset($_POST['Add_DB'])){
			$sql="INSERT INTO customers(Voornaam, Achternaam, Adres, Actief, Discipline)
				VALUES(?,?,?,NOW(),?)";

			if($stmt = $dbcon->prepare($sql)){

					$stmt->bind_param('sssi', $Voornaam, $Achternaam, $Adres, $Discipline);
					
					$Voornaam = $_POST['Voornaam'];
					$Achternaam = $_POST['Voornaam'];
					$Adres = $_POST['Adres'];
					$Discipline = $_POST['Discipline'];
					$stmt->execute();
					

					echo "New records created successfully";
}
		}

		mysqli_close($dbcon);
?>



Groeten,
Michaël
Eerder omgekeerd: je moet niet allerlei blingbling toevoegen die leuk lijkt maar waarvan je de werking nog niet helemaal begrijpt.

Begin bij de basis: PHP-input opschonen plus valideren en SQL-injectie uitsluiten. Ga daarna verder.
Ik dacht dat mijn PHP-input redelijk proper was en ik reeds SQL-injectie had uitgesloten?...validatie heb ik inderdaad nog niet gedaan. Ik wil nu eerst gewoon mijn data uitlezen via een zoekveld EN daarbij sql-injectie via het zoekveld uitsluiten :)

Ik heb ook altijd mijn database altijd ongeveer hetzelfde zoals jij het aanroept aangeroepen.
Ik dacht dat dit altijd best veilig was alleen echo ik altijd de informatie vanuit mijn database inplaats van de $_POST.

Wat jij doet is,
 
if(isset($_POST['zoeken'])){

        $stmt = $db_con->prepare="SELECT * FROM customers WHERE Voornaam = ?";
        $stmt->bind_param("s", $zoeknaam);
            $zoeknaam = $_POST['Voornaam'];

        $stmt->execute();

        echo $zoeknaam;



    }


En ik doe dit altijd gebaseerd op $_POST.. zoals dit.


$zoeknaam = $_POST['Voornaam'];
$stmt = $db_con->prepare("SELECT * FROM customers WHERE Voornaam=?");
$stmt->bindParam(1, $zoeknaam);
$stmt->execute();

vervolgens pak ik ze met een foreach functie uit de database..
Ik hoor ook graag wat een betere manier is hiervoor..
Zo zou het beter moeten gaan, maar het werkt helaas niet


$zoeknaam = $_POST['Voornaam']; // declare the input here
$stmte = $db_con->prepare("SELECT * FROM customers WHERE Voornaam = ?");
$stmte->bind_param("s", $zoeknaam); // then use inside here
$stmte->execute();

if($stmte->num_rows > 0) {
    $results = $stmte->get_result();
    while($row = $results->fetch_assoc()) {
        echo $row['Voornaam'] . '<br/>';
        echo $row['Achternaam'] . '<br/>';
        // and other columns
    }
}
Op regel 1 gebruik je $_POST['Voornaam'] maar je noemt twee andere controles niet: wordt er wel een POST gebruikt (en bijvoorbeeld geen GET) en bestaat $_POST['Voornaam'] wel?
<?php
	
	require_once 'login.php';
	$db_con= new mysqli($db_host, $db_username, $db_password, $db_database);
	$db_con->set_charset("utf8");
	if($db_con->connect_error) die ("(" . $db_con->connect_error . " Error during connection");

	if(isset($_POST['zoeken'])){


	$zoeknaam = $_POST['Zoek']; // declare the input here
	$stmte = $db_con->prepare("SELECT * FROM customers WHERE Voornaam = ?");
	$stmte->bind_param("s", $zoeknaam); // then use inside here
	$stmte->execute();


	$rows = $stmte->num_rows;

	if($stmte->num
		_rows > 0) {
    $results = $stmte->get_result();
    while($row = $results->fetch_assoc()) {
    
    echo $row['Achternaam'] . '<br/>';
        // and other columns
   
}



?>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <link rel="stylesheet" href="style.css">
    <link href='http://fonts.googleapis.com/css?family=Raleway:200' rel='stylesheet' type='text/css'>
    <script src="script.js"></script>
  </head>
  <body>
 <table class="table_form">
      		<form method="POST" action="test.php">
      			<tr>
      				<td>Zoeken</td><td><input type="text" name="Zoek" /></td>
      			</tr>
      			<tr>
      				<td>Bevestigen</td><td><input type="submit" name="zoeken" /></td>
      			</tr>

      		</form>
      </table>

<div class="field">
<?php
  require_once 'issset.php';
?>
</div>
 </body>
</html>


Kijk, zo heb ik het nu...ik krijg geen fouten, maar ik krijg ook geen resultaten.
Bij regel 19 op Enter gedrukt:

if($stmte->num
_rows > 0) {
Ja, is op deze pagina gebeurd, staat juist in mijn editor. Werkt niet....

Misschien een domme vraag maar kan het liggen aan het feit dat ik PHP Version 5.3.1 heb?

[size=xsmall]Toevoeging op 17/12/2014 16:33:36:[/size]

Ja, is op deze pagina gebeurd, staat juist in mijn editor. Werkt niet....

Misschien een domme vraag maar kan het liggen aan het feit dat ik PHP Version 5.3.1 heb?
Schoon de code eens op en post dan het échte resultaat?

We moeten anders maar raden hoe het origineel er zou kunnen uitzien.
<?php
	
	require_once 'login.php';
	$db_con= new mysqli($db_host, $db_username, $db_password, $db_database);
	$db_con->set_charset("utf8");
	if($db_con->connect_error) die ("(" . $db_con->connect_error . " Error during connection");

	if(isset($_POST['zoeken'])){


	$zoeknaam = $_POST['Zoek']; // declare the input here
	$stmte = $db_con->prepare("SELECT * FROM customers WHERE Voornaam = ?");
	$stmte->bind_param("s", $zoeknaam); // then use inside here
	$stmte->execute();


	$rows = $stmte->num_rows;

	if($stmte->num_rows > 0) {
    $results = $stmte->get_result();
    while($row = $results->fetch_assoc()) {
    
    echo $row['Achternaam'] . '<br/>';
        // and other columns
   
}
}
}


?>


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <link rel="stylesheet" href="style.css">
    <link href='http://fonts.googleapis.com/css?family=Raleway:200' rel='stylesheet' type='text/css'>
    <script src="script.js"></script>
  </head>
  <body>
 <table class="table_form">
      		<form method="POST" action="test.php">
      			<tr>
      				<td>Zoeken</td><td><input type="text" name="Zoek" /></td>
      			</tr>
      			<tr>
      				<td>Bevestigen</td><td><input type="submit" name="zoeken" /></td>
      			</tr>

      		</form>
      </table>

<div class="field">
<?php
  require_once 'issset.php';
?>
</div>
 </body>
</html>



Voila

Reageren