Het lukt me maar niet om de juiste query te maken zodat het de juiste gegevens uit de database pakt. Ik heb op het internet gekeken en vind alles over JOINS, maar hier kom ik maar niet aan uit, want snap daar serieus niks van.

Is er iemand die me kan helpen hiermee?

Mysql error:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\linkbuilding\instellingen.php on line 76



<?php
if(isset($_POST['submit'])) 
{

	/* Tabel style */
	$bodyBG = mysql_real_escape_string($_POST['bodyBG']);
	$headerBG = mysql_real_escape_string($_POST['headerBG']);
	$subBalkBG = mysql_real_escape_string($_POST['subBalkBG']);
	$subBalkText = mysql_real_escape_string($_POST['subBalkText']);
	$menuBG = mysql_real_escape_string($_POST['menuBG']);
	$menuText = mysql_real_escape_string($_POST['menuText']);
	$menuHover = mysql_real_escape_string($_POST['menuHover']);
	$menuDropHover = mysql_real_escape_string($_POST['menuDropHover']);
	$lettertype = mysql_real_escape_string($_POST['lettertype']);

	/* Tabel tablestyle */
	$tableHeaderBG = mysql_real_escape_string($_POST['tableHeaderBG']);
	$tableHeaderText = mysql_real_escape_string($_POST['tableHeaderText']);
	$tableContentText = mysql_real_escape_string($_POST['tableContentText']);
	$tableRowOneBG = mysql_real_escape_string($_POST['tableRowOneBG']);
	$tableRowTwoBG = mysql_real_escape_string($_POST['tableRowTwoBG']);
	$tableRowHoverBG = mysql_real_escape_string($_POST['tableRowHoverBG']);
	
	
	$queryEdit = mysql_query("UPDATE style, tablestyle SET bodyBG = '$bodyBG', headerBG = '$headerBG', subBalkBG = '$subBalkBG', subBalkText = '$subBalkText', menuBG = '$menuBG', menuText = '$menuText', menuHover = '$menuHover', menuDropHover = '$menuDropHover', lettertype = '$lettertype', tableHeaderBG = '$tableHeaderBG', tableHeaderText = '$tableHeaderText', tableContentText = '$tableContentText', tableRowOneBG = '$tableRowOneBG', tableRowTwoBG = '$tableRowTwoBG', tableRowHoverBG = '$tableRowHoverBG' WHERE id = 1");
	if ($queryEdit) 
	{
		$queryLogboek = mysql_query("INSERT INTO logboek (name, action, date) VALUES ('$username', 'Heeft het thema van de website aangepast', '$date')");

		if($queryLogboek)
		{
			$melding = 'Het thema is aangepast!';
		}
	}
}
	$querySelect = mysql_query("SELECT * FROM style, tablestyle where id = 1");
	$queryFetch = mysql_fetch_array($querySelect);

?>

Je query zal mislukt zijn.
Bouw eens nette foutafhandeling in dan ga je wat zien.
Ik denk dat je heel blij mag zijn dat de queries niet uitgevoerd werden, want je vergeet een heel belangrijk onderdeel van de join, nl de join voorwaarden. Zonder die creeƫr je een CROSS JOIN.

Het probleem is opgelost.

Ik heb er een fouthandeling aan toegevoegd en de select query aangepast. Verder heb ik ook geleerd dat een update query geen 2 tabellen tegelijk kan aanpassen en dat het in 2 aparte query's moet.

Als het CMS af is zal ik hem wel laten zien bij het bijbehorende topic.


<?php
if(isset($_POST['submit'])) 
{
	$bodyBG = mysql_real_escape_string($_POST['bodyBG']);
	$headerBG = mysql_real_escape_string($_POST['headerBG']);
	$subBalkBG = mysql_real_escape_string($_POST['subBalkBG']);
	$subBalkText = mysql_real_escape_string($_POST['subBalkText']);
	$menuBG = mysql_real_escape_string($_POST['menuBG']);
	$menuText = mysql_real_escape_string($_POST['menuText']);
	$menuHover = mysql_real_escape_string($_POST['menuHover']);
	$menuDropHover = mysql_real_escape_string($_POST['menuDropHover']);
	$lettertype = mysql_real_escape_string($_POST['lettertype']);
	
	$tableHeaderBG = mysql_real_escape_string($_POST['tableHeaderBG']);
	$tableHeaderText = mysql_real_escape_string($_POST['tableHeaderText']);
	$tableContentText = mysql_real_escape_string($_POST['tableContentText']);
	$tableRowOneBG = mysql_real_escape_string($_POST['tableRowOneBG']);
	$tableRowTwoBG = mysql_real_escape_string($_POST['tableRowTwoBG']);
	$tableRowHoverBG = mysql_real_escape_string($_POST['tableRowHoverBG']);
	
	
	$queryEdit1 = mysql_query("UPDATE style SET bodyBG = '$bodyBG', headerBG = '$headerBG', subBalkBG = '$subBalkBG', subBalkText = '$subBalkText', menuBG = '$menuBG', menuText = '$menuText', menuHover = '$menuHover', menuDropHover = '$menuDropHover', lettertype = '$lettertype' WHERE id = 1");
	$queryEdit2 = mysql_query("UPDATE tablestyle SET tableHeaderBG = '$tableHeaderBG', tableHeaderText = '$tableHeaderText', tableContentText = '$tableContentText', tableRowOneBG = '$tableRowOneBG', tableRowTwoBG = '$tableRowTwoBG', tableRowHoverBG = '$tableRowHoverBG' WHERE id = 1");	
	if ($queryEdit1 && $queryEdit2) 
	{
		$queryLogboek = mysql_query("INSERT INTO logboek (name, action, date) VALUES ('$username', 'Heeft het thema van de website aangepast', '$date')");

		if($queryLogboek)
		{
			$melding = 'Het thema is aangepast!';
		}
	}
	else
	{
		$melding = 	'Er is iets fout gegaan. Herlaad de website en probeer het opnieuw!';
	}
}
	$querySelect = mysql_query("SELECT * FROM style, tablestyle WHERE style.id = tablestyle.id AND style.id = 1");
	$queryFetch = mysql_fetch_array($querySelect);

?>
Waarom maak je al die variabelen aan (regel 4 t/m 19)?
Ik zou de basis voor mysql en php eerst even leren voor je begint met het echte logica gedeelte want je moet eerst A beheersen voor je naar B gaat. Ik kan nu zoveel fouten opnoemen in je 41 regels code dat er misschien 1 regel overblijft die goed is.

Obelix en Idefix op 15/04/2014 23:12:01

Waarom maak je al die variabelen aan (regel 4 t/m 19)?


Hoe wil je het anders doen? als je andere oplossing weet die sneller en makkelijker is dan zou het fijn zijn :P

Toevoeging op 16/04/2014 09:19:35:

Reshad F op 15/04/2014 23:28:36

Ik zou de basis voor mysql en php eerst even leren voor je begint met het echte logica gedeelte want je moet eerst A beheersen voor je naar B gaat. Ik kan nu zoveel fouten opnoemen in je 41 regels code dat er misschien 1 regel overblijft die goed is.




Reshad momenteel is er niks fout aan me code, want het werkt perfect en is niet te injecten, maar als jij weet hoe ik het beter kan doen dan mag jij je skills tonen, leer ik ook van :)

en over het leren van PHP gesproken, ik ga toevallig binnenkort beginnen met een abonnement op TreeHouse.
Hoe wil je het anders doen?

<?php

$queryEdit1 = mysql_query("UPDATE style SET bodyBG = '". mysql_real_escape_string($_POST['bodyBG'] ."', ... ?>

Bijkomend voordeel is, dat je ook zeker ziet dat je de betreffende vars hebt escapet.
Ivo P op 16/04/2014 09:20:47

Hoe wil je het anders doen?

<?php

$queryEdit1 = mysql_query("UPDATE style SET bodyBG = '". mysql_real_escape_string($_POST['bodyBG'] ."', ... ?>

Bijkomend voordeel is, dat je ook zeker ziet dat je de betreffende vars hebt escapet.



Dit is inderdaad een goeie alternatief, maar is niet overzichtelijk en aangezien een stagiaire dit CMS volgend jaar moet overnemen en ze op de manier die ik doe werken op school is het wel handig om het zo te houden.
Het is ook handig om stagairs een goede manier van werken te leren.

Leerlingen lopen stage om in de werkelijkheid te kunnen kijken. Theorie is leuk, maar in de praktijk gaat het vaak anders.
Veel docenten zijn geen expert op elk vakgebied.Ze dragen een bepaalde manier van werken over op leerlingen, zodat ze vast kunnen beginnen.
Als tijdens de lessen alleen met variabelen met namen als $x en $y gewerkt wordt, is dat bijvoorbeeld geen reden om vars als $naam maar te vermijden.

Het kost je ongeveer 5 minuten bij een trage leerling om uit te leggen dat die vars gewoon in de query geplaatst kunnen worden.
Tevens zou het minder geheugen kunnen gebruiken, omdat de waarden niet opnieuw onthouden moeten worden (niet 100% waar trouwens).

Vroeger was dat een issue, omdat een programma in een max aantal kB geheugen moest passen.
Maar dat is geen reden om nu de volle 8GB van je server te vullen, "omdat het kan".

Los daarvan:
Je moet nu een heel eind naar boven zoeken of variabele $x gemaakt is met mysql_real_escape_string(), of dat dat vergeten is, of dat de var een heel andere afkomst had.

Daarnaast: $bodyBG is nu alleen bruikbaar om in een query in te zetten.
Zou je hem naar het scherm willen sturen, dan is deze vervuild door mysql_real_escape_string. Immers, voor output naar het scherm heb je htmlspecialchars() nodig




Toevoeging op 16/04/2014 09:37:35:

Qua overzichtelijk:

Dat is nog maar de vraag. Ik vind het niet niet overzichtelijk dat eerst een heel blok vars aangemaakt wordt.
Zou er 1 bijkomen, die ook naar de update query moet , dan moet je die op 2 plekken toevoegen.

En jij schrijft je query uit op 1 regel, maar
<?php

$update = "UPDATE tabel
SET kolom1 = '123',
kolom2 = 'ABC',
kolom3 = '".mysql_real_escape_string($_POST['x'], $conn) ."',
kolom4 = '".mysql_real_escape_string($_POST['y'], $conn)."'
WHERE id = '999'";
?>

mag ook, en is nog leesbaar ook....
Ivo P op 16/04/2014 09:34:11

Het is ook handig om stagairs een goede manier van werken te leren.

Leerlingen lopen stage om in de werkelijkheid te kunnen kijken. Theorie is leuk, maar in de praktijk gaat het vaak anders.
Veel docenten zijn geen expert op elk vakgebied.Ze dragen een bepaalde manier van werken over op leerlingen, zodat ze vast kunnen beginnen.
Als tijdens de lessen alleen met variabelen met namen als $x en $y gewerkt wordt, is dat bijvoorbeeld geen reden om vars als $naam maar te vermijden.

Het kost je ongeveer 5 minuten bij een trage leerling om uit te leggen dat die vars gewoon in de query geplaatst kunnen worden.
Tevens zou het minder geheugen kunnen gebruiken, omdat de waarden niet opnieuw onthouden moeten worden (niet 100% waar trouwens).

Vroeger was dat een issue, omdat een programma in een max aantal kB geheugen moest passen.
Maar dat is geen reden om nu de volle 8GB van je server te vullen, "omdat het kan".

Los daarvan:
Je moet nu een heel eind naar boven zoeken of variabele $x gemaakt is met mysql_real_escape_string(), of dat dat vergeten is, of dat de var een heel andere afkomst had.

Daarnaast: $bodyBG is nu alleen bruikbaar om in een query in te zetten.
Zou je hem naar het scherm willen sturen, dan is deze vervuild door mysql_real_escape_string. Immers, voor output naar het scherm heb je htmlspecialchars() nodig




Toevoeging op 16/04/2014 09:37:35:

Qua overzichtelijk:

Dat is nog maar de vraag. Ik vind het niet niet overzichtelijk dat eerst een heel blok vars aangemaakt wordt.
Zou er 1 bijkomen, die ook naar de update query moet , dan moet je die op 2 plekken toevoegen.

En jij schrijft je query uit op 1 regel, maar
<?php

$update = "UPDATE tabel
SET kolom1 = '123',
kolom2 = 'ABC',
kolom3 = '".mysql_real_escape_string($_POST['x'], $conn) ."',
kolom4 = '".mysql_real_escape_string($_POST['y'], $conn)."'
WHERE id = '999'";
?>

mag ook, en is nog leesbaar ook....



Bedankt voor de uitleg, ik zal je manier binnenkort is uitvoeren op 1 van me codes en laat hem daarna hier zien.



Toevoeging op 16/04/2014 10:05:19:

Zou het nog korter of beter kunnen of is dit de juiste manier?


<?php
if(isset($_POST['submit'])) 
{
	
	$update1 = "UPDATE style 
					SET bodyBG = '" . mysql_real_escape_string($_POST['bodyBG']) . "', 
						headerBG = '" . mysql_real_escape_string($_POST['headerBG']) . "', 
						subBalkBG = '" . mysql_real_escape_string($_POST['subBalkBG']) . "', 
						subBalkText = '" . mysql_real_escape_string($_POST['subBalkText']) . "', 
						menuBG = '" . mysql_real_escape_string($_POST['menuBG']) . "', 
						menuText = '" . mysql_real_escape_string($_POST['menuText']) . "', 
						menuHover = '" . mysql_real_escape_string($_POST['menuHover']) . "', 
						menuDropHover = '" . mysql_real_escape_string($_POST['menuDropHover']) . "', 
						lettertype = '" . mysql_real_escape_string($_POST['lettertype']) . "' 
					WHERE id = 1";
					
	$update2 = "UPDATE tablestyle 
					SET tableHeaderBG = '" . mysql_real_escape_string($_POST['tableHeaderBG']) . "', 
						tableHeaderText = '" . mysql_real_escape_string($_POST['tableHeaderText']) . "', 
						tableContentText = '" . mysql_real_escape_string($_POST['tableContentText']) . "', 
						tableRowOneBG = '" . mysql_real_escape_string($_POST['tableRowOneBG']) . "', 
						tableRowTwoBG = '" . mysql_real_escape_string($_POST['tableRowTwoBG']) . "', 
						tableRowHoverBG = '" . mysql_real_escape_string($_POST['tableRowHoverBG']) . "' 
					WHERE id = 1";
	
	$queryEdit1 = mysql_query($update1);
	$queryEdit2 = mysql_query($update2);
		
	if ($queryEdit1 && $queryEdit2) 
	{
		$queryLogboek = mysql_query("INSERT INTO logboek (name, action, date) VALUES ('$username', 'Heeft het thema van de website aangepast', '$date')");

		if($queryLogboek)
		{
			$melding = 'Het thema is aangepast!';
		}
	}
	else
	{
		$melding = 	'Er is iets fout gegaan. Herlaad de website en probeer het opnieuw!';
	}
}

	$querySelect = mysql_query("SELECT * FROM style, tablestyle WHERE style.id = tablestyle.id AND style.id = 1");
	$queryFetch = mysql_fetch_array($querySelect);
?>

Reageren