Avatar billede fancy Mester
20. december 2009 - 20:58 Der er 4 kommentarer og
1 løsning

Tæller forkert

Hej jeg hardenne kode til at køre på min side, men den tæller forkert eller dvs hvis jeg sletter en post i db bliver den ikke trukket fra igen, den tar som jeg kan se det fra input feltet hvordan kan jeg komme ude over det

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tilmeld arrangement</title>
</head>

<body>

<?php
$aid = $_GET['aid'];//Du henter dit arrangement id f.eks.: http://www.dinside.dk/tilmeld.php?aid=1
if (is_numeric($aid)){

include 'connect.php';
$result = mysql_query("SELECT * FROM arrdb WHERE aid='$aid'")
or die(mysql_error()); 
$row = mysql_fetch_array($result) or die(mysql_error());
$anavn = $row['anavn'];
$dato = $row['dato'];
$asted = $row['asted'];
$abesk = $row['abesk'];
$tilmeldt = $row['tilmeldt'];

$pladser = $row['pladser'];
$bilsti = $row['bilsti'];

echo'<h2>'.$anavn.'</h2>
<table width="377" height="91" border="0" cellpadding="0" cellspacing="0">
<tr>
    <td width="102">Dato:</td>
    <td width="275">'.date('d-m-Y', $dato).'</td>
  </tr>
  <tr>
    <td width="102">Sted:</td>
    <td width="275">'.$asted.'</td>
  </tr>
    <tr>
    <td width="102"></td>
    <td width="275"><img src="'.$bilsti.'"/></td>
  </tr>
  <tr>
    <td>Beskrivelse</td>
    <td>'.nl2br($abesk).'</td>
  </tr>
  <tr>
    <td>Tilmeldte:</td>
    <td>'.$tilmeldt.'</td>
  </tr>
  <tr>
    <td>Pladser:</td>
    <td>'.$pladser.'</td>
  </tr>
</table><br/>';
if(isset($_POST['button'])){
$tnavn = $_POST['Navn'];
$tadr = $_POST['Adresse'];
$tpnr = $_POST['Postnr'];
$tby = $_POST['Distrikt'];
$ttel = $_POST['Telefon'];
$tmail = $_POST['Email'];
$numv = $_POST['NumV'];
$numb = $_POST['NumB'];
$medl = $_POST['Medlem'];
$kvittering = $_POST['Kvittering'];
$pers = ($numv+$numb);
$sam_tilm = ($pers+$tilmeldt);
if ($sam_tilm>$pladser){
echo 'Det er desværre ikke nok pladser ved arrangementet!';
}
else{
mysql_query("INSERT INTO tilmdb
(tnavn, tadr, tpnr, tby, ttel, tmail, numv, numb, medl, arrid) VALUES('$tnavn', '$tadr', '$tpnr', '$tby', '$ttel', '$tmail', '$numv', '$numb', '$medl', '$aid' ) ")
or die(mysql_error());
$result = mysql_query("UPDATE arrdb SET tilmeldt='$sam_tilm' WHERE aid='$aid'")
or die(mysql_error());
if($kvittering=='1'){
$to  = $tmail;

// subject
$subject = 'Tilmelding til '.$anavn.' med Langeskov';

// message
$message = '<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tilmelding til '.$anavn.' med Langeskov borgerforening</title>
</head>

<body>
<table width="593" height="191" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="170">Navn:</td>
    <td width="407">'.$tnavn.'</td>
  </tr>
  <tr>
    <td>Adresse:</td>
    <td>'.$tadr.' '.$tpnr.', '.$tby.'</td>
  </tr>
  <tr>
    <td>Telefon:</td>
    <td>'.$ttel.'</td>
  </tr>
  <tr>
    <td>E-mail:</td>
    <td>'.$tmail.'</td>
  </tr>
  <tr>
    <td>Antal voksne:</td>
    <td>'.$numv.'</td>
  </tr>
  <tr>
    <td>Antal børn:</td>
    <td>'.$numb.'</td>
  </tr>
  <tr>
    <td>Arrangement</td>
    <td><a href="http://www.langeskovborgerforening.dk/arr.php?aid='.$aid.'">'.$anavn.'</a></td>
  </tr>
</table>
</body>
</html>';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'From: Langeskov Borgerforening <karsten.leth@gmail.com>' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);
}
echo '<meta http-equiv="refresh" content="0;url=arr.php?aid='.$aid.'&con=1">';
}

//osv. her fortsætter du med at hente dine andre oplysninger fra databasen
}

if ($tilmeldte < $pladser){ //Dette betyder at hvis der er færre tilmeldte end der er pladser, sker følgende:
if($_GET['con']=='1'){
echo '<h3>Din tilmelding er sendt!</h3>';
}
else{
echo '<h3>Tilmeld dig:</h3><form id="form1" name="form1" method="post" action="arr.php?aid='.$aid.'"><table border="0" width="500">
  <tbody>
    <tr>
      <td width="136">Navn:</td>
      <td width="454"><input maxlength="100" size="50" name="Navn" /></td>
    </tr>
    <tr>
      <td width="136">Adresse:</td>
      <td width="454"><input maxlength="100" size="50" name="Adresse" /></td>
    </tr>
    <tr>
      <td width="136">Postnr.:</td>
      <td width="454"><input maxlength="4" size="6" name="Postnr" /></td>
    </tr>
    <tr>
      <td width="136">By:</td>
      <td width="454"><input maxlength="100" size="50" name="Distrikt" /></td>
    </tr>
    <tr>
      <td width="136">Telefon:</td>
      <td width="454"><input maxlength="15" name="Telefon" /></td>
    </tr>
    <tr>
      <td width="136">E-mail:</td>
      <td width="454"><input maxlength="100" size="50" name="Email" /></td>
    </tr>
    <tr>
      <td width="136">Antal voksne:</td>
      <td width="454"><input maxlength="4" size="6" name="NumV" /></td>
    </tr>
    <tr>
      <td width="136">Antal børn:</td>
      <td width="454"><input maxlength="4" size="6" name="NumB" /></td>
    </tr>
    <tr>
      <td width="136"></td>
      <td width="454"><input value="1" checked="checked" type="checkbox" name="Medlem" />
        Jeg/vi er medlem af langeskovborgerforening</td>
    </tr>
        <tr>
      <td width="136"></td>
      <td width="454"><input value="1" checked="checked" type="checkbox" name="Kvittering" />
        Jeg vil gerne modtage kvittering pr. mail</td>
    </tr>
  </tbody>
</table>
<input type="submit" name="button" id="button" value="Tilmeld!" /></form>';
}
//Her skal din formular så komme
}
else{ //Altså hvis der ikke er gør dette:
echo 'Der er desværre ikke flere pladser...';
}
}
else {
echo 'Arrangement id skal være et tal!';
}
?>
</body>
</html>
21. december 2009 - 21:28 #1
Jeg kan ikke se nogen kode der tillader at afmelde en tilmelding til et arrangement, saa jeg vil gaette paa at du fra tid til anden gaar direkte ind i databasen og sletter en tilmelding i tabellen "tilmdb".  Saa gaetter jeg videre paa at du ikke samtidig reducerer feltet "tilmeldt i tabellen "arrdb" og saa har du situationen hvor koden "taeller forkert." 

Jeg kan se at din kode er indrettet saaledes at du har en tabel arrdb med feltet "tilmeldt" der for hvert arrangement taeller op totalt antal tilmeldte.  Saa har du en tabel tilmdb hvor du i felterne numv og numb indsaetter antal reserverede pladser i hver tilmelding.  Hver gang der indgaar en tilmelding goer koden to ting:  (1) indsaetter tilmeldingen i tilmdb, og (2) foroeger feltet "tilmeldt" i arrdb. Derfor skal der, ved manuel indgriben, rettes i begge tabeller.

Jeg haaber at det loeser dit umiddelbare problem.  Men jeg vil foreslaa at du aendrer strukturen i din database saa antal tilmeldte til et arrangement kun staar i en tabel.  (Hvis du er er usikker paa det punkt foreslaar jeg at du bringer det op i et nyt spoergsmaal.)
Avatar billede fancy Mester
22. december 2009 - 00:36 #2
Hmm jeg kan godt lave det om til en tabel men er helt med på hvad det ville hjælpe.
Som jeg ser koden tager den antal fra input og ikke fra db, hvis jeg skriver en negativ tilmelding trækker den fra men hvis jeg ændre manuelt i db sker der ikke noget
Avatar billede intenz Novice
22. december 2009 - 00:48 #3
Nej, det er jo fordi du henter antallet af tilmeldte fra et integer felt i databasen. Det er logisk at det ikke opdaterer sig hvis du bare sletter noget manuelt, da databasen ikke ved at den skal gøre det.

Du kan hente antallet af tilmeldte ud ved en SUM() i MySQL.
Det er lidt svært at læse ud fra din kode hvad alle dine database felter gør, men det er ud til det er $aid den skal summere på. Og det ser ud til at den skal summere tallene fra (numv+numb)?

Du kan så hente antallet ud direkte fra tilmdb ved:
$res = mysql_query("SELECT SUM(numv+numb) AS total_tilmeldt FROM tilmdb WHERE aid='$aid' GROUP BY aid");
$row = mysql_fetch_assoc($res);
$total_tilmeldt = $row['total_tilmeldt'];

Er lidt i tvivl om man kan bruge numv+numb i SUM, men prøv at se om det virker.
22. december 2009 - 07:44 #4
OK, hvis vi skal i gang med at rekonstruere databasen saa er her en maade der foelger teorien i relational databases:  Du sletter feltet "tilmeldt" fra tabellen arrdb.  Naar der saa forespoerges paa et arrangement saa laver du en join query paa arrdb og tilmdb hvor du (som intenz siger) henter summen af numv og numb.  Hvis antallet af pladser er stoerre end summen af numv + numb saa koerer du videre med booking, ellers skriver du "Udsolgt."  Paa den maade er der ikke noget der kan regnes forkert.

For at teste det lavede jeg simple fancy_arrdb og fancy_tilmdb tabeller med kun de noedvendige felter og fyldte lidt data ind, og jeg lavede denne hjemmeside http://christianjorgensen.be/fancy.php som skriver "Udsolgt" hvis der ikke er mere plads og "Stadig plads" hvis der er plads.  Du kan kikke der eller paa koden som jeg gengiver nedenfor.

By the way jeg fandt et problem med din kode som jeg glemte at goere opmaerksom paa i gaar:  Du tester for om $sam_tilm > $pladser i hvilket tilfaelde du afviser, eller om $sam_tilm < $pladser i hvilket tilfaelde du koerer videre med booking.  Men hvad hvis $sam_tilm = $pladser?  Din kode skulle have vaeret: if ($sam_tilm>=$pladser){....}

Here har du de tabeller jeg bruger:

fancy_arrdb
aid  navn  pladser 
1 foredrag 80
2 show 100
3 fest 50

fancy_tilmdb
navn  numv  numb  aid 
hansen 3 2 1
jensen 1 7 1
andersen 5 0 1
svendsen 3 2 1
thomsen 0 2 1

Og her er saa koden paa http://christianjorgensen.be/fancy.php:

<?
$link = mysql_connect ('christianjorgensen.be.mysql', 'christianjoygen', 'dnyBKKbe') or die(mysql_erorr());
mysql_select_db('christianjoygen') or die('Could not select database');

$aid = 1;
if(is_numeric($aid))
{
  $result=mysql_query("SELECT a.aid, a.navn, a.pladser, SUM(t.numv) AS V, sum(t.numb) AS B
  FROM fancy_arrdb a
  JOIN fancy_tilmdb t ON a.aid = t.aid
  WHERE a.aid = 1
  GROUP BY a.aid") or die(mysql_error());
  $row = mysql_fetch_array($result);
  $navn=$row['navn'];
  $pladser=$row['pladser'];
  $numv=$row['V'];
  $numb=$row['B'];
  $tilmeldt = $numv + $numb;
  if($tilmeldt >= $pladser) echo "Udsolgt!";
  else echo "Stadig plads!";
}
 
mysql_close($link); 
?>
Avatar billede fancy Mester
25. december 2009 - 13:54 #5
Mange tak for den fine info, jeg vil rette snarest vil lige vente da der ligger meget data i databasen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester