MYSQL waardes middelen en weergeven

Status
Niet open voor verdere reacties.

Stinuz

Terugkerende gebruiker
Lid geworden
14 jun 2003
Berichten
1.245
Hoi, zoals je hier kan zien heb ik een tabel gemaakt die data ophaalt uit een MYSQL database en weergeeft. Op het moment wordt het gedeelte ''rating'' handmatig door mij ingevoerd en gewoon weergeven met ''SELECT''

Maar ik wil graag dat gebruikers een waarderingsgetal van 1 t/m 10 op kunnen geven en dat deze waardes worden gemiddeld en het gemiddelde vervolgens weergeven.

Weet iemand hoe ik dit voor elkaar kan krijgen? :thumb:
 
Te veel werk om het aan een nieuweling uit te leggen.

De basis komt neer op dit:

Nieuwe rating
- Formuliertje weergeven voor de rating (1 t/m 10)
- Bij submit controleren of het IP van degene niet al voorkomt in de database
- IP komt niet voor -> IP + cijfer opslaan in database

Rating weergeven
- Simpele query
PHP:
$rateQuery = "SELECT AVG(cijfer) FROM downloadrate";
 
Dus ik moet om te beginnen ook nog een extra tabel aanmaken voor de I.P. van degene die submit?
 
Tabel structuur:
Code:
Tabelnaam: downloadrate

Velden:

ID - INT - NOT NULL - auto_increment - Primary Key
IP - CHAR(16) - NOT NULL
cijfer - CHAR(2) - NOT NULL

IP opvragen in PHP:
PHP:
$ipadres = $_SERVER["REMOTE_ADDR"];
 
Hoe zorg ik dat dit IP ook daadwerkelijk verzonden wordt in het formulier?
 
Kan op 2 manieren

In het formulier
PHP:
<input type="hidden" name="ip" value="<?=$_SERVER["REMOTE_ADDR"]?>" />

Voor het toevoegen aan de database deze regel toevoegen en dan $ipadres aan de query toevoegen
PHP:
$ipadres = $_SERVER["REMOTE_ADDR"];
 
Laatst bewerkt:
Voor het toevoegen aan de database deze regel toevoegen en dan $ipadres aan de query toevoegen
PHP:
$ipadres = $_SERVER["REMOTE_ADDR"];

Mag ik aannemen dat dit eigenlijk
PHP:
$ip = $_SERVER["REMOTE_ADDR"];

moet zijn? We hebben dat gedeelte namelijk ''ip'' genoemd en niet ''ipadres'' ? Ik raak een beetje in de war :p
 
Een variabele en een tabelveld zijn twee verschillende dingen...

Onzin voorbeeld
PHP:
$helpmij = "127.0.0.1";
$tuktuk = "5";

$query = "INSERT INTO downloadrate SET ip='$helpmij', cijfer='$tuktuk'";
 
Oke, heb het formulier en verwerkingsbestand gemaakt:

test.php
HTML:
    <form action="testprocess.php" method="POST">
	
       Cijfer:<br><input type="text" size="10" name="cijfer"><br>
       <input type="hidden" name="ip" value="<?= $_SERVER["REMOTE_ADDR"];  ?>" /><br>

     <br />
     <input type="submit" value="Submit" name="submit" /><br /><br />
    </form>

testprocess.php
PHP:
<?
session_start();

include("config.php");


// Deze if statement controleert of er wel op de knop is gedruk en
// of er wel een waarde is ingevoerd.
if(isset($_POST['submit']) && isset($_POST['cijfer']))
{

  $invoegQuery = "INSERT INTO rating SET id = '', cijfer='".$_POST[cijfer]."', ip='".$_POST[ip]."'";
  $invoegResult = mysql_query($invoegQuery) or die (mysql_error());
  echo "Your rating has been added to the database.<br /><br />
            Click <a href='test.php' >here</a> to post something else.";
}
else
{
  echo "<b>ERROR: You probably didn't enter a rating, click <a href='javascript:history.go(-1)' >here</a> to return.</b>";
}
?>

Maar ik kan nu dus nog gewoon meerdere keren met dezelfde IP stemmen en hij vult zomaar ergens iets in en dit staat dus helemaal los van de ID's van de downloads in die downloadlijst, als je snapt wat ik bedoel ;p
 
Ik had mijn input nog even gewijzigd. Ik weet niet of het nou ook wel werkt want het is ook voor het eerst dat ik het zo gebruik normaal doe ik altijd
PHP:
<input type="hidden" name="ip" value="<? echo $_SERVER["REMOTE_ADDR"];  ?>" />
Maar volgens AaaJeeTee kon het ook zo:
PHP:
<input type="hidden" name="ip" value="<?=$_SERVER["REMOTE_ADDR"]?>" />


Je moet inderdaad ook wel de rating bij de download hebben, even niet aangedacht ...
Code:
tabelnaam: downloadrate

Velden
ID - INT - NOT NULL - auto_increment - Primary Key
downloadID - INT - NOT NULL
IP - CHAR(16) - NOT NULL
cijfer - CHAR(2) - NOT NULL
Stel dat je dus op de tabel pagina van de downloads een link maakt naar rating.php?id=$id waarbij $id de ID van de download is.
Vervolgens wordt op rating.php een lijst weergegeven met cijfers en daar kun je dan op submit drukken.

Maar het is logisch dat je meerdere keren met hetzelfde IP wat kunt toevoegen omdat je nergens controleert of het IP al voorkomt :rolleyes:
PHP:
$checkipQuery = "SELECT IP FROM downloadrate WHERE IP='$_POST[ip]' AND downloadID='$_GET[id]'";
$checkipResult = mysql_query($checkipQuery) or die (mysql_error());
if(mysql_num_rows($checkipResult) == 0)
{
  //Controle is geweest, IP komt niet voor
  // In deze IF statement kun je nu de INSERT query zetten
}
else
{
  echo "U kunt maar 1 keer een beoordeling meegeven.";
}

Best lastig uitleggen.... pfff
 
Laatst bewerkt:
Geloof best dat het lastig is maar je zou eens moeten weten hoe dankbaar ik je ben :D

Ik ga hier fftjes mee aan de gang :thumb:
 
Het gedeelte IP-checken gaat nu goed maar volgens mij werkt het nog niet naar behoren omdat we met 2 verschillende tabellen werken en in beide tabllen zit een ''id''

De tabel die gebruikt word om de downloads te weergeven is namelijk:

Code:
tabelnaam: pcgames

Velden
ID - INT - NOT NULL - auto_increment - Primary Key
name - VARCHAR - NOT NULL
genre - VARCHAR - NOT NULL
pic - TEXT - NOT NULL
links - TEXT - NOT NULL
screens - TEXT - NOT NULL
description - TEXT - NOT NULL
rating - VARCHAR - NOT NULL

Volgensm ij moeten we die tabellen samenvoegen wille we dit werkend krijgen, of heb ik het mis?
 
Samenvoegen is niet echt nodig, je zet gewoon de ID van pcgames in een veld in de tabel van de rating...

Dus je krijgt op de tabel van de pc games een linkje naar rating.php en daar voeg je aan toe de id (Deze haal je tegelijkertijd uit de tabel van de pcgames)

pcgames.php
PHP:
//Dit is echt heel simpel gezegd nu, ik haal nu alleen de noodzakelijke
//regels er even uit zodat het (hopelijk) duidelijk wordt

$listQuery = "SELECT * FROM pcgames";
$listResult = mysql_query($listQuery) or die (mysql_error());
while($listRow = mysql_fetch_array($listResult))
{
  echo'<tr>
      <td>'. $listRow['naam'] .'</td>
      <td>'. $listRow['genre'] .'</td>
      <td><a href="rating.php?id='. $listRow['ID'] .'">rate</a></td>
     </tr>';
}

rating.php
PHP:
<?
//DB gegevens opvragen
include("config.php");

if(isset($_GET['id']))
{
  //Even controleren of de ID wel bestaat
  $checkQuery = "SELECT id FROM pcgames WHERE ID ='$_GET[id]'";
  $checkResult = mysql_query($checkQuery) or die (mysql_error());
  if(mysql_num_rows($checkResult) != 0)
  {
    if(isset($_POST['submit']))
    {
      //IP controleren
      $checkipQuery = "SELECT IP FROM downloadrate WHERE IP='$_POST[ip]' AND downloadID='$_GET[id]'";
      $checkipResult = mysql_query($checkipQuery) or die (mysql_error());
      if(mysql_num_rows($checkipResult) == 0)
      {
        //IP komt nog niet voor dus invoegen
        $insertQuery = "INSERT INTO downloadrate SET
                        downloadID='$_GET[id]',
                        ip='$_POST[ip]',
                        cijfer='$_POST[cijfer]'";
        $insertResult = mysql_query($insertQuery) or die (mysql_error());
        echo "Beoordeling toegevoegd";
      }
      else
      {
        //Foutmelding -> IP komt al voor
        echo "U kunt maar 1 keer een beoordeling meegeven.";
      }
    )
    else
    {
      //Formulier weergeven
      echo'<form action="rating.php?id='. $_GET['id'] .'" method="POST">
            <select name="cijfer">
             <option value="1">1</option>
             <option value="2">2</option>
             <option value="3">3</option>
             <option value="4">4</option>
             <option value="5">5</option>
             <option value="6">6</option>
             <option value="7">7</option>
             <option value="8">8</option>
             <option value="9">9</option>
             <option value="10">10</option>
            </select>
            <input type="hidden" value="'. $_SERVER['REMOTE_ADDR'] .'" name="ip"/>
            <input type="submit" value="Toevoegen" name="submit" />
           </form>';
    }
  }
  else
  {
    //Foutmelding -> ID komt niet voor
    echo"Ongeldige ID.";
  }
}
else
{
  //Foutmelding -> Geen ID ingevoerd (dus alleen rating.php)
  echo"Er is geen ID ingevoerd";
}
?>

Ik weet niet of rating.php helemaal goed gaat en of de tabelnaam en velden wel helemaal klopt. Die moet je dus zelf maar even nakijken en evt wijzigen.

Hopelijk kom je er met het commentaar wel uit.
 
Laatst bewerkt:
Alles werkt goed maar bij het weergeven van de ratings gaat het mis. Er worden in de pagina al gegevens uit de tabel ''pcgames'' gehaald op de volgende manier:

Code:
$tabelQuery = "SELECT name, genre, id, rating FROM pcgames ORDER BY name ASC";
$tabelResult = mysql_query($tabelQuery) or die (mysql_error());

Dus hoe zorg ik nu dat hij ook gegevens uit de tabel ''rating'' haalt?

Op deze testpagina werkt het wel :D

test.php
PHP:
<?

include("config.php");

$rateQuery = "SELECT AVG(cijfer) FROM rating";
$rateResult = mysql_query($rateQuery) or die (mysql_error());

  while($tabelRow = mysql_fetch_array($rateResult))
  {
    echo'
'. $tabelRow['AVG(cijfer)'] .'
';
  }

  {
  }
?>
 
PHP:
$tabelQuery = "SELECT name, genre, id, rating FROM pcgames ORDER BY name ASC";
$tabelResult = mysql_query($tabelQuery) or die (mysql_error());
while($tabelRow = mysql_fetch_array($tabelResult))
{
  //Gegevens van de opgevraagde game opvragen (WHERE downloadID=)
  $rateQuery = "SELECT AVG(cijfer) FROM rating WHERE downloadID='$tabelRow[id]'";
  $rateResult = mysql_query($rateQuery) or die (mysql_error());
  $rateRow = mysql_fetch_array($rateResult);
  //
  echo'<tr>
  <td>'. $tabelRow['name'] .'</td>
  <td>'. $tabelRow['genre'] .'</td>
  <td>'. $rateRow .'</td>
  <td><a href="rating.php?id='. $tabelRow['id'] .'">Rate</a></td>
  </tr>';
}
Even controleren hoe je het veld in rating hebt genoem waar de ID van het spel in staat, ik ben uit gegaan van downloadID.

Zie ook dat ik nu een tabelbreedte van vier heb dus je moet een extra TD toevoegen in de koptitels.
 
Zo te zien werkt ie perfect, weer wat bijgeleerd :D :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan