php mysql insert in database werkt niet

Status
Niet open voor verdere reacties.

AmcUhrd

Gebruiker
Lid geworden
5 okt 2011
Berichten
53
hallo.

ik ben bezig met een soort narrow casting systeem voor school. ik heb een cms gemaakt, waarmee ik info in de database kan stoppen. nu heb ik als test een klein stukje code toegevoegd bij een invulveld, om te laten controleren of de ingevoerde waarde al in de database staat, en op basis daarvan een actie doet. ik heb hierbij de bestanden toe gevoegd.

probleem is nu dus de if/else statement. als ik de insert sql query buiten de else haal, werkt hij. ook de echo die in de else staat, wordt getoond op de pagina. maar zodra ik de sql insert in de else statement (of de if statement) stop, voegt hij niks toe aan de database, al laat hij de echo nog steeds zien. ik heb het net al afgespeurd maar nergens kunnen ontdekken wat ik fout doe.

p.s. let niet op de structuur van mijn code, die breng ik later pas aan haha :)
 

Bijlagen

  • snackbar.rar
    1,4 KB · Weergaven: 20
Kan je de relevante codes hier delen? Een .rar-bestand ga ik niet doorspitten.
 
oke

dit is het php bestand dat aan het formulier hangt:
PHP:
<?php //kijken of het formulier is gesubmit
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
	//gegevens ophalen uit het formulier
	$products = $_POST['products'];
	$price = $_POST['price'];
	$sale_price = $_POST['sale_price'];
	$categories = $_POST['categories'];

	
	//kloppen de gegevens
		
	
	
	//query maken voor insert
	$sql = "INSERT INTO products(name, price, sale_price) VALUES ('$products', '$price', '$sale_price')";
	
	
	
	$result = $conn->query($sql);
	
	if($result == false) {
		die('fout in de query: ' . $conn->error);
	
	
}

$check_cat = "SELECT name FROM categories WHERE name ='$categories'";
 $uitkomst=mysqli_query($conn,$check_cat);
  
   if(mysqli_num_rows($uitkomst) > 0)
    {
      echo "Deze categorie bestaat al";
    }
  else{
		$sql = "INSERT INTO categories(name) VALUES ('$categories')";
	  echo "dit werkt niet";
  }
}

dit is de database connect:
PHP:
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "snackbar";

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

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// Select database
$conn->select_db("snackbar");


// Check SQL errors
if($conn->error) {
	die('Query failed: '. $conn->error);
}






?>

en dit is het formulier:
HTML:
	<?php include ('include/php/db_connect.php');?>
	<?php include ('include/php/form.php');?>


<!DOCTYPE HTML!>

<html>

<head>

<title>

</title>

</head>

<body>
	
	<h1>Control panel Snackbar Narrow Casting System</h1>

	<h2>content toevoegen</h2>
		<form method="post">
		
		<div>
				Product <br />
			<input type="text" name="products" id="products"/>
		</div>
		
		<div>
				Prijs <br />
			<input type="number" step="any" name="price">
		</div>
		
		<div>
				Aanbiedings prijs <br />
			<input type="number" step="any" name="sale_price">
		</div>
		
		<div>
					Categorie <br />
			
			<!-- <input type="radio" value="Snacks" name="" checked/></br>
			
			<input type="radio" value="Drankjes" name="" />Drankjes</br>
			
			<input type="radio" value="ijs" name="" />Ijs</br> -->
		
			<form action="upload.php" method="post" enctype="multipart/form-data">
				Select image to upload:
			<input type="file" name="images" id="fileToUpload">
			
			<input type="submit" value="Upload Image" name="submit"></br>
				add a catagorie <br />
			<input type="text" name="categories" id="categories"/>
			
		</div>
		
			<button name="submit" type="submit">Opslaan</button>
	</form>
</body>

</html>
 
Op lijn 35 voer je geen query uit, je slaat alleen een string op in een variabele.

Verder is er SQL-injection mogelijk, en ben je nu vatbaar voor hackers.
Dus gebruik mysqli_real_escape_string().

Verder zou ik geen procedureel (mysqli_xxxxxx()) en OO ($mysqli->xxxxxxxx) door elkaar gebruiken.
Het kán wel, maar is niet efficiënt en handig om te lezen.
 
Laatst bewerkt:
oke, en hoe kan ik dat oplossen dan, want alle echos binnen de if else werken wel, en als ik die zelfde sql buiten de else statement haal, werkt hij wel!

voor de rest hoef ik met nog niet te focussen op beveiliging en dergelijke, dat gaan we in een later stadium van de opleiding pas behandelen ^^
 
Bouw je ook altijd een deur zonder slot tijdens het bouwen van een huis? Het lijkt mij geen kwaad te kunnen om direct naar beveiliging te kijken.

De oplossing op je vraag is door mysqli_query() te gebruiken.
 
ik snap je punt, maar daar ben ik op dit moment nog niet naar op zoek. zoals je ziet ben ik nog een beginner als het aankomt op php/mysqli.

ik dank je iig voor je oplossing!!
 
Ik denk dat dit wel de oplossing is welke je zoekt. Je voert je query gewoon niet uit, en dus wordt er niks geINSERT.
 
Yes dat is het ook. Heb het aangepast en werkend gekregen. De vraag staat inmiddels op opgelost. Bedankt!!!
 
mogelijks weet je het maar:
bij het script :"en dit is het formulier:" (HTML Code)

zie ik :
22 <form method="post">
48 <form action="upload.php" method="post" enctype="multipart/form-data">
59 </form>

en mogelijks sluipt hier ook een probleem binnen (en mogelijks werkt het bij sommige brouwsers)

betreffende beveiliging: kan je ook het script indien niet nodig niet kenbaar te maken dus als de file locatie(dir) niet beschikbaar is of kenbaar gemaakt word is het voldoende beveiligt . als het publiek is dan is het best beveiligd dit kan je ook door htaccess

... /?([A-Za-z0-9\.\=]+)
door twee lijnen (door een beveiligings expert) kan je veel leed besparen. Ik kan geen voorbeeld plaatsen omdat dit geval per geval te bekijken is. bovenstaande zal GET moeten beveiligen er ontbreekt nog aan de nodig paden en zou er
zo
RewriteRule ^([A-Za-z0-9\.]+)/([A-Za-z0-9\.]+)/$ ./?loc=$1&action=$2&%
kunnen uitzien en laat enkel de toegelaten char's toe
Bij POST ligt het anders.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan