Post functie werkt niet

Status
Niet open voor verdere reacties.

Stinuz

Terugkerende gebruiker
Lid geworden
14 jun 2003
Berichten
1.245
Hoi hoi, ik heb vandaag een scriptje gemaakt maar het werkt niet naar behoren. Ik heb het volgende bestand:

PHP:
<?php

include("config.php");

include("header.php");

echo'

 <div id="content">
    <div id="main">';

include("lettersaction.php");

echo'

    <form action="action.php?id='. $_GET['id'] .'&genre='. $_GET['genre'] .'" method="POST">

    <span id="sort">
     &nbsp;&nbsp;Sort by: <select name="sort"> 
             <option value="name">Name</option>
             <option value="rlsdate">Release Date</option>
             <option value="date">Date added</option>
             <option value="publisher">Developer</option>
            </select>
      </span> 
     <input type="submit" value="Submit" name="submit" /><br /><br />
    </form>

';

$id = $_GET['id']."%";
$sort = $_POST['sort'];

$tabelQuery = "SELECT * FROM games WHERE name like '$id' and genre='$_GET[genre]' ORDER by '$sort' ";
$tabelResult = mysql_query($tabelQuery) or die (mysql_error());
if (mysql_num_rows($tabelResult) == "0")
            {
              //Melding bij geen quotes in database
              echo"<center>Nothing found!</center><br><br>";


}
else
{


    while($tabelRow = mysql_fetch_array($tabelResult))
    {

  $rateQuery = "SELECT AVG(rating) FROM gamerating WHERE gameID='$tabelRow[id]'";
  $rateResult = mysql_query($rateQuery) or die (mysql_error());
  $rateRow = mysql_fetch_array($rateResult); 
      extract($tabelRow); 
    echo'

<h8><a href=gameaction.php?id='. $id .'>'. $name .'</a> - '. $date .'</h8>
	<p><img src='. $pic .' width=10%></p>
	<p>Developer: '. $publisher .'</p>
	<p>Release Date: '. $rlsdate .'</p>
	<p>Rating: '. $tabelRow['AVG(rating)'] .'</p>
';
}
}

?>

<? include("footer.php"); ?>

Zoals je kan zien heb ik dit formulier:
HTML:
    <form action="action.php?id='. $_GET['id'] .'&genre='. $_GET['genre'] .'" method="POST">

    <span id="sort">
     &nbsp;&nbsp;Sort by: <select name="sort"> 
             <option value="name">Name</option>
             <option value="rlsdate">Release Date</option>
             <option value="date">Date added</option>
             <option value="publisher">Developer</option>
            </select>
      </span> 
     <input type="submit" value="Submit" name="submit" /><br /><br />
    </form>

En het is dus de bedoeling dat de gekozen optie in deze mysql quiry wordt opgenomen:

PHP:
$id = $_GET['id']."%";
$sort = $_POST['sort'];

$tabelQuery = "SELECT * FROM games WHERE name like '$id' and genre='$_GET[genre]' ORDER by '$sort' ";
$tabelResult = mysql_query($tabelQuery) or die (mysql_error());

maar het probleem is dus dat hij dit absoluut NIEt doet. Er gebeurt niks als ik een optie kies en op submit druk. Hij opent gewoon dezelfde pagina nogmaals en er wordt niks gesorteerd :/

Wat doe ik verkeerd?
 
Laatst bewerkt:
Ik heb het even vluchtig door gelezen, dus ik weet niet of het script voor de rest klopt.
Kijk, jouw formulier gebruikt de method="post". Vervolgens ga jij met $_GET dingen ophalen, die er niet zijn. Dus je moet in ieder geval method veranderen in method="GET".
Succes!
 
Dus je moet in ieder geval method veranderen in method="GET".
Succes!

Je hebt hem inderdaad vluchtig doorgekeken. Die GET-waardes worden voor iets anders gebruikt.

Ik vraag mij af of de waardes die je hier neerzet
PHP:
<option value="name">Name</option>
             <option value="rlsdate">Release Date</option>
             <option value="date">Date added</option>
             <option value="publisher">Developer</option>
of dat ook overeenkomt met tabelvelden. Dus dat je een tabelveld hebt welke name heet etc etc..

Laat anders de $tabelQuery eens echoen, dan kun je kijken of het resultaat zo is als dat jij wilt.
 
De tabel heet ''games'' en hierin zitten o.a. de velden name, genre, publisher, rlsdate. Als ik ipv
Code:
ORDER by '$sort' ";
gewoon
Code:
ORDER by rlsdate
invul, sorteert hij ze netjes op release date dus ik denk niet dat het daar aan ligt :confused:
 
Probeer dit eens:
PHP:
$id = $_GET['id']."%";
$sort = $_POST['sort'];

$tabelQuery = "SELECT * FROM games
               WHERE name like ". $id ."
               AND genre=". $_GET['genre'] ." ORDER BY ". $sort;
$tabelResult = mysql_query($tabelQuery) or die (mysql_error());
if(mysql_num_rows($tabelResult) == "0")
{
  //Melding bij geen quotes in database
  echo"<center>Nothing found!</center><br><br>";
}
else
{
  while($tabelRow = mysql_fetch_array($tabelResult))
  {
    $rateQuery = "SELECT AVG(rating) FROM gamerating
                  WHERE gameID=". $tabelRow['id'];
    $rateResult = mysql_query($rateQuery) or die (mysql_error());
    $rateRow = mysql_fetch_array($rateResult); 
    extract($tabelRow); 
    echo'
    <h8>
     <a href="gameaction.php?id='. $id .'">'. $name .'</a>
     - '. $date .'
    </h8>
    <p><img src="'. $pic .'" width="10%" /></p>
    <p>Developer: '. $publisher .'</p>
    <p>Release Date: '. $rlsdate .'</p>
    <p>Rating: '. $rateRow .'</p>';

    //Kijken of er iets mis gaat
    echo'<br />Error checking...<br /><br />
   '. $tabelQuery .'<br />'. $rateQuery;
  }
}
Er is niet veel aan veranderd, maar ik wil voor de zekerheid even de weten of de resultaten uit de error checking ook inderdaad kloppen.
 
Als ik die probeer krijg ik:
Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '% AND genre= ORDER BY' at line 2

En ik had al wel PHP tags toegevoegd.
 
Kan zijn dat ik het fout heb gedaan, normaal escape ik geen variabelen in een query dus probeer onderstaande even in plaats van die hierboven.
PHP:
$tabelQuery = "SELECT * FROM games 
               WHERE name LIKE $id 
               AND genre='$_GET[genre]' ORDER BY $sort";

Wat me nu opvalt is dat je een LIKE over een getal uitvoert maar dat getal moet voorkomen in de naam van een game... Ik denk dat je eerder bedoelde WHERE id='$_GET[id]' AND genre='$_GET[genre]' of niet?
 
Laatst bewerkt:
Nee dat bedoelde ik niet, als ik bij ID bijvoorbeeld A invul laat hij alle games zien die met een A beginnen, zo is alles gemakkelijk op alfabet te sorteren...

Ik laat hier niet 1 bepaalde game zien maar de hele lijst.

gameaction.php?id=A laat alle games die met een A beginnen zien
gameaction.php?id=B laat alle games die met een B beginnen zien
etc.

nu eens even die andere query proberen....

EDIT:
Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '% AND genre='' ORDER BY' at line 2

Nogsteeds geen sucess dus :<
 
Laatst bewerkt:
Oke, zoiets dacht ik al maar door het gebruik van ID werd ik wat verward...
 
Probeer het eens op een andere manier, je wilt het nu via de POST-methode doen. Probeer onderstaande eens, die werkt met de GET

PHP:
<?php

include("config.php");

include("header.php");

echo'

<div id="content">
    <div id="main">';

include("lettersaction.php");

echo'

    <form action="action.php?id='. $_GET['id'] .'&genre='. $_GET['genre'] .'" method="GET">

    <span id="sort">
     &nbsp;&nbsp;Sort by: <select name="sort"> 
             <option value="name">Name</option>
             <option value="rlsdate">Release Date</option>
             <option value="date">Date added</option>
             <option value="publisher">Developer</option>
            </select>
      </span> 
     <input type="submit" value="Submit" name="submit" /><br /><br />
    </form>

';



//Array voor het sorteren, aanvullen indien nodig
$sorting_array = array('name', 'rlsdate', 'publisher', 'date');
//Standaard sorteermethode
$default_sort = $sorting_array[0];
//Controleren of $_GET['sort'] ingesteld is en de waarde voorkomt in de array
if(isset($_GET['sort']) && in_array($_GET['sort'], $sorting_array)) {
  //Controleren of $_GET['id'] ingesteld is
  if(isset($_GET['id'])) {
    $id = $_GET['id'].'%';
    $tabelQuery = "SELECT * FROM games WHERE name LIKE '$id' AND genre='$_GET[genre]' ORDER BY '$_GET[sort]'";
  }
  //Letter niet ingesteld dus alles weergeven op sorteermethode
  else {
    $tabelQuery = "SELECT * FROM games WHERE genre='$_GET[genre]' ORDER BY '$_GET[sort]'";
  }
}
else {
  //Sorteermethode niet ingesteld maar wel een letter
  if(isset($_GET['id'])) {
    $id = $_GET['id'].'%';
    $tabelQuery = "SELECT * FROM games WHERE name LIKE '$id' AND genre='$_GET[genre]' ORDER BY '$default_sort'";
  }
  //Sorteermethode niet ingesteld en ook geen letter, alles weergeven dus
  else {
    $tabelQuery = "SELECT * FROM games WHERE genre='$_GET[genre]' ORDER BY '$default_sort'";
  }
}

$tabelResult = mysql_query($tabelQuery) or die (mysql_error());
//Melding bij geen quotes in database
if(mysql_num_rows($tabelResult) == 0) {
  echo"<center>Nothing found!</center><br><br>";
}
else {
  while($tabelRow = mysql_fetch_array($tabelResult))
  {
    $rateQuery = "SELECT AVG(rating) FROM gamerating WHERE gameID='$tabelRow[id]'";
    $rateResult = mysql_query($rateQuery) or die (mysql_error());
    $rateRow = mysql_fetch_array($rateResult);
    echo'
        <h8>
         <a href=gameaction.php?id='. $tabelRow['id'] .'>'. $tabelRow['name'] .'</a> - '. $tabelRow['date'] .'
        </h8>
        <p><img src='. $tabelRow['pic'] .' width="10%"></p>
        <p>Developer: '. $tabelRow['publisher'] .'</p>
        <p>Release Date: '. $tabelRow['rlsdate'] .'</p>
        <p>Rating: '. $rateRow .'</p>';
  }
}
include("footer.php");
?>
 
Laatst bewerkt:
Als ik nu vanaf de pagina tester.php?genre=Action&id=2 in de drop-down-box rlsdate kies, krijg ik het volgende: tester.php?sort=rlsdate&submit=Submit

En als ik handmatig dit doe: tester.php?sort=rlsdate&id=2&genre=Action sorteert hij nog niks...

Iets gaat er mis volgens mij :/
 
Laatst bewerkt:
Klopt, vervang het formulier gedeelte met onderstaand en probeer het dan nog eens.
PHP:
$url = 'action.php?genre='. $_GET['genre'] .'&id='. $_GET['id'];
echo'
    <span id="sort">&nbsp;&nbsp;Sort by: 
      <a href="'. $url.'&sort=name">Name</a> | 
      <a href="'. $url.'&sort=rlsdate">Release Date</a> | 
      <a href="'. $url.'&sort=publisher">Publisher</a> | 
      <a href="'. $url.'&sort=date">Date</a>
      </span><br /><br />';
Overigens heb ik de ID hetzelfde als jij had, dus een ID is een letter.
 
En nu zijn we weer terug bij af :/ Je zou zeggen dat hij zo zou moeten werken maar er gebeurt helemaal niets. Hij sorteert echt alleen maar als ik het direct in de query aangeef.
 
Zet voor $tabelResult een
PHP:
echo $tabelQuery;
Kijk dan wat er uit komt en probeer die query in PHPMyAdmin, krijg je dan wel een resultaat dan weet ik het denk ik ook niet meer...
 
Ik zou het ook niet meer weten, het zou allemaal gewoon moeten werken :/ Iets in die $_GET en POST functie gaat mis maar ik zou niet weten wat. Toch eens een andere oplossing zoeken :confused:
 
De echo toegepast? Resultaat?

Want als het niet goed gaat met de $_GET dan zul je dat in de query terug moet zien...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan