Archief - PHP: probleempje met mysql query

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Bram

Legacy Member
kvoel me nogal stom dak hier weer een thread moet komen maken over hoogstwaarschijnlijk iets onnozel dat ik over het hoofd zie, maar goed, here goes.

Oud probleem opgelost, nieuw: zie post #3
Ik heb een tabel met items voor m'n navigatie: id, parent id, positie en dan de 4 verschillende talen.

In m'n cms loop ik door deze gegevens en stel zo een tabel op met de gegevens van elk item, om deze te updaten. Opdat ik unieke namen zou hebben voor m'n input velden en selects gebruik ik dingen als echo $row['id'].'-id'; enzovoort...

Als ik het script wil afhandelen loop ik weer door deze gegevens als volgt:
PHP:
if(isset($_POST['submNavEdit'])) {
//get highest id
$g = mysql_fetch_assoc(mysql_query("SELECT id FROM nav ORDER BY id DESC LIMIT 0, 1"));
$lp = $g['id']; //highest id

$i = 1;
while($i <= $lp) {
	$curbn = $i.'-bn';
	$curbf = $i.'-bf';
	$curfr = $i.'-fr';
	$curde = $i.'-de';
	$curpid = $i.'-pid';

	$curid = $_POST['id'];
	$pid = isset($_POST[$curpid]) ? $_POST[$curpid] : '';
	$bn = isset($_POST[$curbn]) ? $_POST[$curbn] : '';
	$bf = isset($_POST[$curbf]) ? $_POST[$curbf] : '';
	$fr = isset($_POST[$curfr]) ? $_POST[$curfr] : '';
	$de = isset($_POST[$curde]) ? $_POST[$curde] : '';
	
	$qry = "UPDATE nav SET pid = '$pid', bn = '$bn', bf = '$bf', fr = '$fr', de = '$de' WHERE id = '$curid'";
	if(mysql_query($qry)) {
		header("Location: ".REFERER);
	} else {
		die(mysql_error());
	}
	
	$i++;
}
}
Alsek print_r($_POST); doe, zie ik dat alles in orde is en alles juist wordt doorgegeven, maar ergens in m'n while loop gaat het fout, want er wordt niet geupdate...

Linwe

Legacy Member
Steekt er wel een waarde in uw $curid ?

Print de query eens af zodat je kan zien wat hij er van maakt en of alles wel effectief ingevuld is...

Bram

Legacy Member
da was dus het probleem... gvd, laat werken is nooit een goed idee :p

ik moest ook nog een current id maken, de gewone id werkte dus niet. alvast bedankt!

edit: ander probleem: m'n header("Location: ".REFERER) doet het niet meer... Headers allready sent error, maar nochtans wordt de php afgehandeld voor de HTML (admin.inc.php wordt geinclude voordat admin.tpl wordt weergegeven)...

Waarom geeft ie dan deze bug? Omdat er hoger in het document al een header() staat? (na het inlogform)

edit: opgelost: gewoon ipv van de header() te zetten, staat er nu $refer = TRUE; op het einde van het document controleert hij...

Bram

Legacy Member
v dit topic gebruik makend om geen nieuwe te hoeven starten:

M'n nav database heeft een veld id met unieke waarden. Nu normaal gezien zou je dat op auto-increment zetten, maar ik ga echter eerst de hoogste id waarde gaan achterhalen en vermeerder die dan met 1, opdat ik in m'n nav edit formulier er zou kunnen doorlopen als volgt:
HTML:
{foreach from=$all item=row}	
<input type="text" name="{$row.id}-bn" value="{$row.bn}" />
{/foreach&#8212;
(ik gebruik smarty)
en in m'n php loop ik door al deze waarden met
PHP:
$i = 1;
while($i <= $lp) {
	$curbn = $i.'-bn';

	$bn = isset($_POST[$curbn]) ? $_POST[$curbn] : '';
}
Nu zit ik echter met het probleem (of ik nu auto-increment gebruik of mijn systeem) dat, wanneer ik een menu-item delete (bv 5) de id's overspringen van 4 op 6. In m'n php while lus geeft dat echter een probleem, aangezien ie gaat zoeken naar een id nummer 5, dat niet bestaat. Gevolg: error.

Iemand een suggestie hoe dit op te lossen?

Radiance

Legacy Member
Ik heb nu 5x uw code gelezen maar versta de bedoeling nog altijd niet.
Maar waarom bereken je als het ware die IDs ? Haal ze gewoon op uit je database en toon ze in je list ?

Bram

Legacy Member
ja sorry, kwas nog nie lang wakker :p kheb het ondertussen al kunnen oplossen. De code ging op zoek naar iets wat er niet was (door die while loop). Ik moest gewoon nog een if inbouwen die controleert of den mysql result wel bestond, en zo niet, dat oversloeg in de lus.

Kzit ondertss met een ander ei :(

kmoet een aantal records selecteren uit tabel nav, maar als een overeenkomend navid voorkomt in de tabel content, dan mogen ze niet in de resulterende array opgenomen worden. khad geprobeerd met nen inner join, ma da werkt precies niet (tenzij ik iets verkeerd doe)

PHP:
$fetchid = mysql_query("SELECT * FROM nav INNER JOIN content ON content.navid != nav.id");

lang leve de mannen op irc
PHP:
"SELECT * FROM nav WHERE NOT EXISTS (SELECT * FROM content WHERE content.navid = nav.id)"
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan