Archief - PHP: probleem met doorsturen van variabele via URL

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.

polleke

Legacy Member
ik heb een html file met daarin een form:

Code:
<form name="select" method="get" action="noisegate.php">
  <select name="type">
    <option value="instrument">instrument</option>
    <option value="muzikanten">muzikanten</option>
	<input type="submit" value="Verstuur">
  </select>
</form>

dus de URL die wordt doorgegeve is noisegate.php?type=instrument of muzikanten

maar als ik dan in die php file het type wil opvragen, krijg ik een error:

PHP:
<?php
$temp_SQL="SELECT * FROM temp WHERE type=" . $_GET['type'] . " ORDER BY datetime DESC";
$temp_result=mysql_query($temp_SQL);
$no_data=mysql_num_rows(mysql_query("SELECT ID FROM temp"));
while($temp=mysql_fetch_array($temp_result)){
?>

de fout zit hem in de sql query WHERE type= ...., want als ik dit weglaat, werkt het. weet niet direct wat ik fout doe, :help:

Mvg

Obliv`

Legacy Member
welke error?

wrs komt het datatype van je kolom niet overeen
probeer het zo eens:
"SELECT * FROM temp WHERE type = '" . $_GET["type"] . "' ORDER BY datetime DESC;"

polleke

Legacy Member
EyeBallz zei:
. $_GET["type"] .

ipv

. $_GET['type'] .

error blijft, trouwens dit is de error:

Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\domains\remyvd.be\wwwroot\noisegate\noisegate.php on line 16
PHP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\domains\remyvd.be\wwwroot\noisegate\noisegate.php on line 16

op lijn 16 staat de lus om de db uit te lezen, laat ik die where type= blabla weg, gaat het zonder problemen.

polleke

Legacy Member
Obliv` zei:
welke error?

wrs komt het datatype van je kolom niet overeen
probeer het zo eens:
"SELECT * FROM temp WHERE type = '" . $_GET["type"] . "' ORDER BY datetime DESC;"

hey, super nu werkt het.
maar kan je eens juist uitleggen, wat dat verandert? dat ik deze fout niet meer zal maken.

BertG

Legacy Member
polleke zei:
hey, super nu werkt het.
maar kan je eens juist uitleggen, wat dat verandert? dat ik deze fout niet meer zal maken.

door die quotes er bij te plaatsen gaat je DB de string waarden vergelijken... niet de "echte" waarde

polleke

Legacy Member
zit terug met hetzelfde probleempje:
<meta http-equiv="refresh" content="5;url=noisegate.php?type=<?php echo $_GET["type"] ?>">
hier kan ik wel die enkele quote's niet meer gebruiken... of wel?
na 5sec opent hij de url: noisegate.php?type=
dus die GET['type'] variabele is terug leeg.... :help:

beetje confused.

orez

Legacy Member
enkele/dubbele quotes, haalt niet veel uit, zorg gewoon dat je eenlijnig bent over je volledige coding, als je start met dubbele quotes, gebruik ze dan overal ;)

killgore

Legacy Member
ru`orez zei:
enkele/dubbele quotes, haalt niet veel uit, zorg gewoon dat je eenlijnig bent over je volledige coding, als je start met dubbele quotes, gebruik ze dan overal ;)
' en " maakt wel degelijk verschil:

PHP:
$test = 5;
$teskt1 = "$test"; //levert de string "5"
$teskt2 = '$tekst'; // levert de string "$tekst"
en dit is vrij belangerijk :p.

Gebruik gewoon altijd ", maar zet ter info nooit of zo weinig mogelijk variabelen binnen de ", dit is niet alleen trager, maar ook minder leesbaar. Enige waar het echt aanvaardbaar is is mysql-code omdat er daar vrij veel moeten ingevoegd worden ;).

The Crazy Frog

Legacy Member
Uw submit staat op de verkeerde plaats ;)
Code:
<form name="select" method="get" action="noisegate.php">
  <select name="type">
    <option value="instrument">instrument</option>
    <option value="muzikanten">muzikanten</option>
  </select>
  <input type="submit" value="Verstuur">
</form>

orez

Legacy Member
killgore zei:
' en " maakt wel degelijk verschil:

PHP:
$test = 5;
$teskt1 = "$test"; //levert de string "5"
$teskt2 = '$tekst'; // levert de string "$tekst"
en dit is vrij belangerijk :p.

Gebruik gewoon altijd ", maar zet ter info nooit of zo weinig mogelijk variabelen binnen de ", dit is niet alleen trager, maar ook minder leesbaar. Enige waar het echt aanvaardbaar is is mysql-code omdat er daar vrij veel moeten ingevoegd worden ;).

ja ok soit, daar mss, maar ik gebruik altijd:
PHP:
$test = 5;
$tekst1 = "nummer: " . $test;

dusja .. :P

Lashknife

Legacy Member
killgore, moet ik toch even tegenspreken.

imo, altijd ' gebruiken.
als je "..." gebruikt, moet de php parser eerst nog gaan zien of hij wel degelijk iets moet evalueren binnen de quotes, bv: echo "dit is de inhoud van $var";

hiertegenover is echo 'Dit is de inhoud van ' . $var; op 2 manieren sneller.
1° de concattenation en niet het mengen met strings en 2° de parser moet ook niet nadenken over de inhoud van het stringgedeelte, aangezien de ' wijst op take literally

dus imo: '....' . $var . '....'

Weet je dat je veel ' als inhoud gaat gebruiken, gebruik dan " eh, begin niet met alle 100 singlequotes te escapen want dat vermindert de leesbaarheid en is dus niet de moeite.
Eveneens queries: gebruik "..." want daar zal je voor stringvalues zowiezo singlequotes moeten gebruiken (sql queries bevatten normaliter gezien geen ")

Tyfius

Legacy Member
Ik gebruik meestal ook de enkele '-tekens voor strings. Stel dat om de een of andere uitzonderlijke reden toch tekst opneemt in je code die moet getoond worden (een error message ofzo), kan je "-tekens gebruiken.
PHP:
die('Error: blaat, <a href="mailto:emailadres">notify the webmaster</a>');
Op die manier moet je niet altijd je "-tekens gaan escapen.

polleke

Legacy Member
polleke zei:
zit terug met hetzelfde probleempje:
<meta http-equiv="refresh" content="5;url=noisegate.php?type=<?php echo $_GET["type"] ?>">
hier kan ik wel die enkele quote's niet meer gebruiken... of wel?
na 5sec opent hij de url: noisegate.php?type=
dus die GET['type'] variabele is terug leeg.... :help:

beetje confused.

danku voor de uitleg, en vele reply's het begint duidelijk te worden, maar hoe kan ik dit hier dan oplossen?

"5;url=noisegate.php?type="<?php echo $_GET['type'] ?>>

of??

Tyfius

Legacy Member
Geen echo gebruiken. Echo (en print) zijn om af te drukken, gij moet gewoon uw variabele invullen.

PHP:
<meta http-equiv="refresh" content="5;url=noisegate.php?type=<?php $_GET["type"] ?>" />
should do the trick.

polleke

Legacy Member
nope, juist geprobeerd, ik blijf de url noisegate.php?type=
krijgen...

Tyfius

Legacy Member
Nu, waarom doet ge eigelijk die refresh ?
In uw eerste post geeft ge mee aan da form als action "noisegate.php", dan kunde op noisegate.php in uw code gewoon die $_GET["type"] gebruiken, zonder da ge die pagina is moet refreshen. Lijkt me eigelijk wat onlogisch.

polleke

Legacy Member
dit is voor een andere pagina, ik laat de gebruikers zoekertjes plaatsen, zodra ze het formulier versturen, gaan ze naar die refresh pagina, en na 5sec keren ze dan terug naar de zoekertjes. als ik die refresh weglaat, kan het zijn dat hun zoekertje er niet direct opstaat, en als ze dan op F5 blijven bashen...

polleke

Legacy Member
heb het opgelost, ik heb voor de meta tags, gewoon die _get['type'] in een var gestoke:

<?php
$type = $_POST['type'];
?>

en in de metatag gewoon: <?php echo $type ?> gedaan, en nu werkt het zonder probs.

merci voor de uitleg gaste!
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