Toon posts:

[PHP&MySQL] Variabele in de query

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het volgende probleem waar ik niet helemaal uit kom.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php $db=mysql_connect("localhost", "****", "****") or die (mysql_error());
mysql_select_db('Inbouwdatabase', $db) or die (mysql_error());

$result2 = mysql_query("SELECT AutotypeNaam FROM autotype WHERE AutomerkID LIKE ' ". $merkid ." ' ORDER BY AutotypeNaam") or die (mysql_error());


$result3 = mysql_query("SELECT AutomerkID FROM automerk WHERE AutomerkNaam LIKE '%". $_POST["Automerk"] . "%'")or die (mysql_error());
?>



<form name="form2" action="Autototaal.php" method="post">
    Autotype: <select name="Autotype">

        <?php
        // de selectielijst vullen met beschikbare ID's
        while (list($id) = mysql_fetch_row($result2)){
            echo("<option value=\"$id\">$id</option>\n");
        }?>
        </select>
    <input type="Submit" value="Tonen">
    </form>

    <?php
         list($merkid) = mysql_fetch_row($result3);
    echo ("MerkID is $merkid");
      $merkid = mysql_fetch_row($result3);
    ?>


Alleen wanneer ik de code draai geeft hij Notice: Undefined variable: merkid in c:\www\apache\htdocs\autotype.php on line 4
Ik heb geprobeerd te zoeken naar een vergelijkbaar probleem maar ik kwam niet op veel dingen uit.
In principe zou hij de gegevens die ik via $merkid krijg moeten gebruiken in $result2 om tot een resultaat te komen, maar gezien de foutmelding lukt dat niet helemaal. Iemand een idee om dit probleempje op te lossen? Of doe ik gewoon iets wat niet mogelijk is?

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Als register_globals uitstaat dan werkt $merkid niet. Je moet dan $_GET["merkid"] gebruiken voor GET variabelen en $_POST["merkid"] voor POST variabelen. Ik denk dat dit je probleem is.

Oops, ergens overheen gelezen. :X

[ Voor 17% gewijzigd door Grijze Vos op 04-01-2005 15:12 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Verwijderd

Topicstarter
Grijze Vos schreef op dinsdag 04 januari 2005 @ 14:50:
Als register_globals uitstaat dan werkt $merkid niet. Je moet dan $_GET["merkid"] gebruiken voor GET variabelen en $_POST["merkid"] voor POST variabelen. Ik denk dat dit je probleem is.
PHP:
1
2
$result2 = mysql_query("SELECT AutotypeNaam FROM autotype WHERE 
AutomerkID LIKE '%". $_POST["merkid"] . "%' ORDER BY AutotypeNaam") or die (mysql_error());


Werkt niet echt, en ook niet met GET. En mijn register globals staat op uit.

[ Voor 28% gewijzigd door Verwijderd op 04-01-2005 14:56 ]


  • DumbAss
  • Registratie: April 2002
  • Laatst online: 16-08-2025
Waar moet hij merkid dan vandaan halen?

Vanutsteen.nl => nerds only | iRacing


  • daaan
  • Registratie: Maart 2000
  • Laatst online: 03-12-2025

daaan

Brandweer Zoutkamp

Probeer eerst eens of die variable überhaupt wel een waarde heeft.

PHP:
1
2
echo "Waarde zonder POST: ". $merkid."<br>";
echo "Waarde met POST: ". $_POST["merkid"];


oid.

One's never alone with a rubber duck.


Verwijderd

Topicstarter
DumbAss schreef op dinsdag 04 januari 2005 @ 15:03:
Waar moet hij merkid dan vandaan halen?
$merkid = mysql_fetch_row($result3); Hiervan? Of werkt dat zo niet?
daaan schreef op dinsdag 04 januari 2005 @ 15:04:
Probeer eerst eens of die variable überhaupt wel een waarde heeft.

PHP:
1
2
echo "Waarde zonder POST: ". $merkid."<br>";
echo "Waarde met POST: ". $_POST["merkid"];


oid.
Hm, ik krijg dit terug;
Waarde zonder POST:

Notice: Undefined index: merkid in c:\www\apache\htdocs\autotype.php on line 75
Waarde met POST:

Terwijl ik met
PHP:
1
2
list($merkid) = mysql_fetch_row($result3);
    echo ("MerkID is $merkid");
MerkID is 4 terugkrijg.

  • DumbAss
  • Registratie: April 2002
  • Laatst online: 16-08-2025
Verwijderd schreef op dinsdag 04 januari 2005 @ 15:09:
[...]


$merkid = mysql_fetch_row($result3); Hiervan? Of werkt dat zo niet?


[...]


Hm, ik krijg dit terug;
Waarde zonder POST:

Notice: Undefined index: merkid in c:\www\apache\htdocs\autotype.php on line 75
Waarde met POST:

Terwijl ik met
PHP:
1
2
list($merkid) = mysql_fetch_row($result3);
    echo ("MerkID is $merkid");
MerkID is 4 terugkrijg.
Ja, maar dan is $merkid net gevuld. Op regel4 staat er nog niks in $merkid. Moet je die niet eerst vullen?

Vanutsteen.nl => nerds only | iRacing


  • daaan
  • Registratie: Maart 2000
  • Laatst online: 03-12-2025

daaan

Brandweer Zoutkamp

Dat komt omdat jij bij het tweede voorbeeld eerst de waarde uit de database haalt.
Bovenin jou php file heeft $merkid nog geen waarde. Die waarde kun je bijvoorbeeld mee geven met
file.php?merkid=4

edit:

Lol @ dubbelle antwoorden.

[ Voor 11% gewijzigd door daaan op 04-01-2005 15:15 ]

One's never alone with a rubber duck.


Verwijderd

Topicstarter
DumbAss schreef op dinsdag 04 januari 2005 @ 15:12:
[...]

Ja, maar dan is $merkid net gevuld. Op regel4 staat er nog niks in $merkid. Moet je die niet eerst vullen?
Moet ik dan eerst nog een stukje code voor de query typen zodat hij deze vult? Ik dacht dat eerst altijd alles doorgelopen werd alser niets gevonden werd. Of zie ik het verkeerd?

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Je gebruikt bovenaan een waarde die later in het programma gebruikt wordt.
Bovendien is je programmeerstijl bijzonder slordig.

Misschien tijd om een basics-tutorial door te nemen?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • DumbAss
  • Registratie: April 2002
  • Laatst online: 16-08-2025
Grijze Vos schreef op dinsdag 04 januari 2005 @ 15:16:
Je gebruikt bovenaan een waarde die later in het programma gebruikt wordt.
Bovendien is je programmeerstijl bijzonder slordig.

Misschien tijd om een basics-tutorial door te nemen?
:|

Vanutsteen.nl => nerds only | iRacing


Verwijderd

Topicstarter
Grijze Vos schreef op dinsdag 04 januari 2005 @ 15:16:
Je gebruikt bovenaan een waarde die later in het programma gebruikt wordt.
Bovendien is je programmeerstijl bijzonder slordig.

Misschien tijd om een basics-tutorial door te nemen?
Slordig? In wat voor opzicht? Ik vond het vrij duidelijk eigenlijk. *shaamt*
Maar ik gebruik een waarde die later gebruikt wordt, en zo te lezen is dat niet echt ok. Dus moet ik zorgen dat die;
-Niet later nog eens gebruikt wordt?
-Door mijn query begrepen/gezien kan worden.

Verwijderd

Met slordig wordt bedoeld dat je jezelf een constant-te-gebruiken methode van scripten/programmeren aan zou moeten leren. Niet alleen voor anderen, maar vooral voor jezelf.

Over je probleem; omschrijf eerst eens -voor jezelf- in stappen wat je wilt, bijv.:
  • Ik wil de gebruiker een formulier laten zien waarin hij een keuze kan maken uit een aantal auto-merken.
  • Als de gebruiker een keuze heeft gemaakt en op submit heeft gedrukt wil ik met behulp van de waarde die hij geposted heeft een aantal rows uit een database ophalen en die tonen aan hem.
Denk in een logische volgorde als je de gebruiker iets wilt laten doen en ga vervolgens je script maken met die volgorde in gedachten (of op papier als het wat lastiger wordt..).
Ik heb het script even bekeken maar er zit geen logische volgorde in de stappen die je neemt. Kijk daar nog een goed naar en ga met behulp van hetgeen je nu al hebt een nieuw script maken.

Is mijn advies..

Nog even over de slordigheid waar over gesproken wordt; leer jezelf aan om duidelijke variabelen namen te gebruiken en vermijd namen als `result2` etc. Daarnaast raad ik aan om niet teveel te 'spelen' met hoofdletters, zoals je doet in onder andere je veld- en tabelnamen.

[ Voor 13% gewijzigd door Verwijderd op 04-01-2005 15:36 ]


Verwijderd

Topicstarter
Ok, dank je voor de toelichting.
Dan zal ik eens met een nieuw bestandje beginnen.
Bedankt voor de geboden hulp. :)

  • DumbAss
  • Registratie: April 2002
  • Laatst online: 16-08-2025
Verwijderd schreef op dinsdag 04 januari 2005 @ 15:34:
Met slordig wordt bedoeld dat je jezelf een constant-te-gebruiken methode van scripten/programmeren aan zou moeten leren. Niet alleen voor anderen, maar vooral voor jezelf.

Over je probleem; omschrijf eerst eens -voor jezelf- in stappen wat je wilt, bijv.:
  • Ik wil de gebruiker een formulier laten zien waarin hij een keuze kan maken uit een aantal auto-merken.
  • Als de gebruiker een keuze heeft gemaakt en op submit heeft gedrukt wil ik met behulp van de waarde die hij geposted heeft een aantal rows uit een database ophalen en die tonen aan hem.
Denk in een logische volgorde als je de gebruiker iets wilt laten doen en ga vervolgens je script maken met die volgorde in gedachten (of op papier als het wat lastiger wordt..).
Ik heb het script even bekeken maar er zit geen logische volgorde in de stappen die je neemt. Kijk daar nog een goed naar en ga met behulp van hetgeen je nu al hebt een nieuw script maken.

Is mijn advies..

Nog even over de slordigheid waar over gesproken wordt; leer jezelf aan om duidelijke variabelen namen te gebruiken en vermijd namen als `result2` etc. Daarnaast raad ik aan om niet teveel te 'spelen' met hoofdletters, zoals je doet in onder andere je veld- en tabelnamen.
Een hele goed opmerking, idd. Altijd voor jezelf omschrijven wat je wilt doen met het stuk code. Ook dan is het makkelijker voor andere tweakers om te snappen wat je hebt fout gedaan.

Vanutsteen.nl => nerds only | iRacing


Verwijderd

Verwijderd schreef op dinsdag 04 januari 2005 @ 15:39:
Ok, dank je voor de toelichting.
Dan zal ik eens met een nieuw bestandje beginnen.
Bedankt voor de geboden hulp. :)
Als je even noteert wat je wilt met je script wil ik je wel ietwat opweg helpen, in de vorm van een pseudo-code.

Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 04 januari 2005 @ 15:46:
[...]


Als je even noteert wat je wilt met je script wil ik je wel ietwat opweg helpen, in de vorm van een pseudo-code.
Goed, iemand wil wat informatie over een bepaald autotype opvragen. Dan komt hij eerst op een pagina waar hij het merk op kiest, dat werkt allemaal goed. En daarna moet hij een lijst krijgen met de autotypen die daar bij horen, zodat hij niet 1000 autotypen hoeft af te scrollen voor hij bij zijn auto komt.

Alleen is er het volgende probleem, als hij het automerk selecteert geeft hij alleen het merk mee, en niet het automerkID wat nodig is om het autotype te identificeren.
Het ziet er zo uit;

Automerk
`AutomerkID` INTEGER (11) NOT NULL AUTO_INCREMENT ,
`AutomerkNaam` varchar (20),

Autotype
`AutoTypeId` INTEGER (11) NOT NULL AUTO_INCREMENT ,
`AutomerkID` INTEGER (11),
`AutoTypeNaam` varchar (30),

En dus wou ik eerst het AutomerkID ophalen zodat hij de lijst kan vullen met de juiste gegevens voor het autotype, maar dat werkt niet al te soepel.
Alvast mijn dank, ik blijf(uiteraard) ook zelf er aan werken. :)

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php

/*
 * IS ER AL EEN MERK GESELECTEERD?
 */

    if($_SERVER['REQUEST_METHOD'] != 'POST' OR !isset($_POST['AutomerkID']))
    {

    /*
     * FORMULIER TONEN
     * Toon hier een formulier dat de gebruiker een keuze laat maken
     * uit alle beschikbare merken. Zorg ervoor dat dit formulier 
     * de variable $_POST['AutomerkID'] door gaat sturen.
     * De query kun je statisch samenstellen.
     */

    }

/*
 * IS ER AL EEN MERK GESELECTEERD MAAR GEEN TYPE?
 */

    else if($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_POST['AutomerkID']) AND !isset($_POST['AutotypeID']))
    {

    /*
     * FORMULIER- OF LIJST VAN ALLE TYPES TONEN VAN HET GESELECTEERDE MERK
     * Toon hier een formulier of lijst die alle types toont.
     * Zorg ervoor dat als men een keuze maakt in het formulier,
     * of op een link klinkt in de lijst,
     * dat de variabele POST['AutomerkID'] blijft behouden en
     * dat de variabel POST['AutotypeID'] wordt verzonden.
     * Maak in je dynamische query (waarin je alle types van het merk ophaalt) gebruik 
     * van de variabele $_POST['AutomerkID'].
     */

    }

/*
 * IS ER AL EEN MERK GESELECTEERD ÉN EEN TYPE?
 */

    else if($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_POST['AutomerkID']) AND isset($_POST['AutotypeID']))
    {

    /*
     * DETAILS VAN EEN TYPE TONEN
     * Hier kun je details tonen van het geselecteerde type wagen.
     * Maak in je wederom dynamische query gebruik van de variabele $_POST['AutotypeID'].
     * Tip: maak gebruik van een JOIN in je query om het automerk (de naam) te tonen.
     */

    }

?>

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

Als ik zo je tabellen zie, denk ik dat je alles ook wel met alleen `Autotype` kunt doen. Je selecteerd dmv DISTINCT alle verschillende AutoTypeNamen 1x, daarmee laat je de lijst zien. Hierna selecteer je alles waarvan `AutoTypeNaam` = '%s' en je bent klaar. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Topicstarter
Dank jullie zeer, ik ga er morgen mee aan het werk. :)

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

PHP:
1
$result2 = mysql_query("SELECT AutotypeNaam FROM autotype WHERE AutomerkID LIKE ' ". $merkid ." ' ORDER BY AutotypeNaam") or die (mysql_error());
Het lijkt wel of je een spatie teveel hebt bij LIKE 'SPATIE".
Geen idee of het daarop mis gaat, maar het viel me wel op. :)

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.

Pagina: 1