Normaal gesproken werken SQL-queries op mijn localhost gewoon zoals het hoort, dus zonder extra keer F5.
Maar nu heb ik een pagina met 2 sql queries.
De ene is:

<?php
$query2 = "SELECT naam, Prijs, product_id, fotonaam FROM webshop WHERE fotonaam='$naam'";
$result2 = mysqli_query($con,$query2) or die ("Error in query: $query2. ".mysqli_error($con));
if (mysqli_num_rows($result2) > 0) {
	while($row2 = mysqli_fetch_array($result2))
	{?>

En de tweede is:

<?php
mysqli_select_db($con, 'webshop') or die ("Kan niet verbinden met de database!");
$query = "INSERT INTO winkelwagen (productnaam, product_id, user_id, prijs)
VALUES ('$F_Naam', '$P_id', '$id', '$Prijs')";
$result = mysqli_query($con,$query) or die ("Error in query: $query. ".mysqli_error($con));
if (mysqli_num_rows($result) > 0) {
	while($row = mysqli_fetch_array($result))
	{
?>

De eerste pakt hij gewoon. De tweede alleen na een keertje F5, waarbij de error
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\webshop\BestelProducten.php on line 56
gewoon blijft staan.

Waarom verwerkt hij de query pas na f5 (de insert query) en waarom geeft hij de error?

De hele pagina:

<?php
    session_start();
HTMLCODE
  include 'style2.css';	 include 'style.css';
$con=mysqli_connect("localhost","root","superbart","webshop");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
include 'conn.php';
if(isset($_GET['id']))
{ 
  $id = intval($_GET['id']);
}
if(isset($_GET['naam']))
{ 
  $naam = $_GET['naam'];
}include 'navigatie.php';?>
			<div class="col-md-12">
				<div class="thumbnail">
				<?php
mysqli_select_db($con, 'webshop') or die ("Kan niet verbinden met de database!");
$query2 = "SELECT naam, Prijs, product_id, fotonaam FROM webshop WHERE fotonaam='$naam'";
$result2 = mysqli_query($con,$query2) or die ("Error in query: $query2. ".mysqli_error($con));
if (mysqli_num_rows($result2) > 0) {
	while($row2 = mysqli_fetch_array($result2))
	{
	echo "<h3>Artikelgegevens:</h3>";
	$Naam = $row2['naam'];
	$P_id = $row2['product_id'];
	$F_Naam = $row2['fotonaam'];
	$Prijs = $row2['Prijs'];
	echo "$Naam";
	}
}
else
{
echo "<center>Het legen van de winkelwagen is mislukt.</center>";
};
mysqli_select_db($con, 'webshop') or die ("Kan niet verbinden met de database!");
$query = "INSERT INTO winkelwagen (productnaam, product_id, user_id, prijs)
VALUES ('$F_Naam', '$P_id', '$id', '$Prijs')";
$result = mysqli_query($con,$query) or die ("Error in query: $query. ".mysqli_error($con));
if (mysqli_num_rows($result) > 0) {
	while($row = mysqli_fetch_array($result))
	{
    echo "Het product is succesvol toegevoegd aan uw winkelwagen.<br> Je word automatisch teruggestuurd naar de webshop!";
	}
} else
{
    echo "ERROR: Could not able to execute $query. " . mysqli_error($con);
}
?>
Echo eens $query2, en kijk bij beide keren eens eens naar de verschillen. Ik vermoed dat je variabele niet meegenomen wordt.

Verder een goede tip: Nummer geen queries, maar geef aan wat ze precies ophalen.
Want weet jij straks nog wat $query8 doet?
Ook die() is geen nette foutafhandeling.
Waarom verwacht je bij een INSERT query resultaten? :/

Indien een functie/methode iets onverwachts doet zou je eerste impuls het raadplegen van de documentatie moeten zijn.

Daar had je het volgende kunnen lezen (onder het kopje Return Values):
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.

Ingeval een INSERT-query krijg je te allen tijde een boolean terug (true of false). Daar probeer je vervolgens mysqli_num_rows() op toe te passen terwijl deze een mysqli_result object verwacht.

Wacht eens even... Dat was PRECIES de foutmelding die je kreeg:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\webshop\BestelProducten.php on line 56


Leer jezelf aan foutmeldingen te begrijpen. Deze reiken je vaak direct de oorzaak van het probleem aan...
Ik heb nu dat als ik het product de eerste keer aanklik, hij hem gelijk toevoegd aan het winkelwagentje in de db. Maar, staat het product al in het winkelwagentje, en klik ik bij het product op bestellen dan zet hij het alleen in de database als ik de pagina die verschijnt na op bestellen druk, f5?!
de code van de query nu.

mysqli_select_db($con, 'webshop') or die ("Kan niet verbinden met de database!");
$query = "INSERT INTO winkelwagen (productnaam, product_id, user_id, prijs)
VALUES ('$F_Naam', '$P_id', '$id', '$Prijs')";
if(mysqli_query($con, $query)){
    echo "Het product is succesvol toegevoegd aan uw winkelwagen.<br> Je word automatisch teruggestuurd naar de webshop!";
	}
else
{
    echo "ERROR: Could not able to execute $query. " . mysqli_error($con);
}

<?php
$query = "INSERT INTO winkelwagen (productnaam, product_id, user_id, prijs)
VALUES ('$F_Naam', '$P_id', '$id', '$Prijs')";
?>

Leg eens uit wat nou hier de uitkomst van is.
Ik kan me eigenlijk niet voorstellen dat je zonder blikken of blozen kan zeggen dat je deze query eens op je scherm hebt neer gezet. dus met een:

$query = "INSERT INTO winkelwagen (productnaam, product_id, user_id, prijs)
VALUES ('$F_Naam', '$P_id', '$id', '$Prijs')";
echo $query;
?>

Wat hier uitkomt is letterlijk '$F_naam' e.d. dus dat kan nooit kloppen met de waardes die jij voor ogen hebt. Oftewel variabelen buiten quotes plaatsen. (basic php)
De F_naam variabelen zijn erboven benoemd wat het moet zijn.

$F_Naam = $row2['fotonaam']; bijv.
Goed, ik zal je matsen:

<?php
$query = "INSERT INTO winkelwagen (productnaam, product_id, user_id, prijs)
VALUES ('".$F_Naam."', '".$P_id."', '".$id."', '".$Prijs."')";
?> 

Zoals je ziet zijn de kleurtjes nu anders geworden.
En zal het dus een waarde geven die je bijvoorbeeld in '$F_Naam' hebt gegeven.
Oftewel echo je query om te debuggen. Ik weet heel zeker dat je dat niet hebt gedaan.
edit
Betere uitleg:

<?php
$var = 'variabele';
// Hier zal komen te staan "ik ben een variabele"
$string = "Ik ben een $var";
echo $string;
// hier staat "Ik ben een $var"
$string2 = 'Ik ben een $var';
echo $string2;
?>

Daarom variabele buiten quotes houden...
Bart V B op 28/12/2016 22:37:15

<?php
$query = "INSERT INTO winkelwagen (productnaam, product_id, user_id, prijs)
VALUES ('$F_Naam', '$P_id', '$id', '$Prijs')";
?>
Leg eens uit wat nou hier de uitkomst van is.
Ik kan me eigenlijk niet voorstellen dat je zonder blikken of blozen kan zeggen dat je deze query eens op je scherm hebt neer gezet.

Wat hier uitkomt is letterlijk '$F_naam' e.d. dus dat kan nooit kloppen met de waardes die jij voor ogen hebt. Oftewel variabelen buiten quotes plaatsen. (basic php)


@Bart: Bovenstaande code werkt gewoon.
Waar jij het over hebt geldt voor een echo met enkele quotes.

Ik ben het wel eens met $vars altijd buiten de quotes houden.
Nadat je iets in je karretje hebt geduwd zul je opnieuw moeten controleren wat er in het karretje zit / enige weergave die de inhoud van het karretje toont moeten verversen. Althans ik denk dat je dit vraagt. Dat heeft echter niets te maken met je code in het begin. Daar behandel je ten onrechte een INSERT query als een SELECT query... Stop het inserten in een aparte actie en ververs daarna de gehele pagina of de plak HTML waarin de inhoud van je cart wordt getoond.

Ik denk echter niet dat het verstandig is dat je een webshop in elkaar aan het klussen bent als je niet volgt hoe de mysqli functies werken.
Ik was gister zo te zien niet helemaal wakker.

Het bouwen van dat webshopje is niet bedoeld voor daadwerkelijk gebruik.
Bart thnx, wist eigenlijk niet eens dat het zoveel uitmaakte of je ' of " gebruikt.

Nog steeds dezelfde vraag, waarom insert het pas na een refresh?

mysqli_select_db($con, 'webshop') or die ("Kan niet verbinden met de database!");
$query = "INSERT INTO winkelwagen (productnaam, product_id, user_id, prijs)
VALUES ('".$F_Naam."', '".$P_id."', '".$id."', '".$Prijs."')";
if ($con->query($query) === TRUE) {
    echo "<br><b>De registratie is geslaagd!</b>";
	echo $query;
} else {
    echo "Error: " . $query . "<br>" . $con->error;
};
?>

De registratiequery + php code is identiek zowat aan deze, maar werkt wél zonder refresh.
Ligt dat dan aan omdat er een select boven zit die de Values selecteert (dat denk ik dan tenminste) of?
Al is het wel zo dat zonder refresh hij ook al in echo $query, laat zien dat hij de benodigde gegevens al in de value vakjes heeft staan.

Reageren