Permalänk
Medlem

PHP Kod - Fel resultat

Hej.

Jag har ett litet problem.
Varje gång jag kör denna kod så får jag alltid ut att $subid = 1. Varför blir det så? :S

$res2 = mysql_query("SELECT * FROM forum_sub_categories WHERE catID='".$row['id']."'"); while($row2 = mysql_fetch_assoc($res2)){ echo "<div id=\"subcategoryholder\">"; echo "<a href=\"subcat.php?subcat='".$row2['id']."'\">$row2[name]</a>"; echo "<br />"; echo "<font size=\"1pt\">$row2[desc]</font>"; echo "</div>"; }

sedan på subcat.php är det denna kod:

<?php $res = mysql_query("SELECT * FROM forum_sub_categories WHERE id='".$subid."'"); $row = mysql_fetch_assoc($res); echo "<div id=\"categoryholder\">"; echo $row['name']; echo "</div>"; ?>

$subid = isset($_GET['subcat']);

Vad är det jag gjort fel?

Tacksam för svar.

Permalänk
Testpilot

isset returnerar bara true eller false (1 eller 0) då funktionen används för att kolla om en variabel finns eller inte, oavsett vad variabeln $_GET['subcat'] innehåller kommer isset($_GET['subcat']) alltid att returnera true så länge variabeln finns.

Vad jag antar du egentligen är ute efter är att göra om $_GET['subcat'] till ett heltal och då är det intval du är ute efter.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Tackar för svar.

Är detta rätt sätt att göra den till en intval?

$subid = intval($_GET['subcat']);

Då får jag ingen error men $row['name'] syns inte då :S

kör jag en echo $subid; så blir den alltid 0 såg jag nu :S

Permalänk
Testpilot

Du gör inte om variabeln till en intval utan intval är en funktion som gör om ett värde till en int (heltal), byt bara ut isset mot intval.

$subid = intval($_GET['subcat']);

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Det var så jag gjorde, men om jag kör en echo $subid så är den alltid 0 :S

Permalänk
Testpilot

Du har även fel på den tidigare sidan såg jag nu, där du skriver ut din länk. Din kod

echo "<a href=\"subcat.php?subcat='".$row2['id']."'\">$row2[name]</a>";

kommer resultera i den här html-koden

<a href="subcat.php?subcat='idnummer'">namn</a>

Du har alltså '-tecken runt numret vilket du inte borde. En intval av '45' kommer bli heltalet 0 då det första tecknet är '

Jag brukar alltid använda ' istället för " vid mina echos, på så vis slipper man escapea "-teknen man vill ha i sin HTML-kod och det blir (enligt mig) mindre rörigt. Så här skulle jag skrivit din rad:

echo '<a href="subcat.php?subcat='.$row2['id'].'">'.$row2['name'].'</a>';

Kolla alltid din genererade HTML-kod så den ser ut så som du vill.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Tackar för alla svaren hunden.
Det som var fel var att jag hade subcat.php?subcat='".$subcat."' . enkel fnuttarna skulle bort så det såg ut så här subcat.php?subcat=".$subcat." .

Tackar ännu en gång för responsen.

Permalänk
Medlem

Sedan kan man göra den lilla skillnaden att bara använda enkelfnuttar ifall man inte behöver tolka variabler och skriva ut dom i en sträng.

<?PHP $minVar = 'hello'; /* variant med dubbel fnuttar Detta resulterar i att PHP kollar igenom strängen och om den hittar variabler i den så tolkas dessa och skrivs ut i strängen. En liten performence hit, om man talar om väldigt många anrop. */ echo("Jag säger $minVar till dig"); /* Variant med enkel fnuttar (som jag föredrar) i Detta fallet använder vi punkter för att tala om för PHP att vi vill skriva ut en variabels innehåll inom strängen. Det blir mindre "ansträngning" för PHP på detta vis. Dessa små förbättringar visar sig ju bäst om man har en väldigt belastad PHP applikation. */ echo('Jag säger' . $minVar . ' till dig'); ?>

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.