Prijzen check

Status
Niet open voor verdere reacties.

BoukeWeening

Gebruiker
Lid geworden
3 apr 2007
Berichten
232
Hallo,

ik heb hier al eerder wat vragen gesteld en antwoorden gekregen over dit onderwerp en ik het tot nu toe dit:

PHP:
<?php
				// Connecting, selecting database
				$link = mysql_connect('localhost', '*********', '********')
				    or die('Could not connect: ' . mysql_error());
				    mysql_select_db('jeugdmeeting_nl') or die('Could not select database');
?>

<?php
if(isset($_POST['submit'])) {
  // Bij voorkeur allerlei controles uitvoeren op ingevulde waardes
  
  // Kijken of er een prijs op het getal is gevallen
  $lotQuery = "SELECT lid, prijs FROM loten WHERE getal ='". $_POST['getal'] ."'";
  $lotResult = mysql_query($lotQuery) or die(mysql_error());
  if(mysql_num_rows($lotResult) > 0) {
    // Er is een prijs -> kijken of die prijs niet al is vergeven
    $lotRow = mysql_fetch_array($lotResult);
    $lid = $lotRow['lid'];
    $prijs = $lotRow['prijs'];
    $winnaarQuery = "SELECT prijs FROM winnaars w INNER JOIN loten l ON w.lid=l.lid";
    $winnaarResult = mysql_query($winnaarQuery) or die(mysql_error());
    $winnaarRow = mysql_fetch_array($winnaarResult);
    if($winnaarRow['prijs'] != $prijs) {
      $insertQuery = "INSERT INTO winnaars
                 lid='". $lid ."',
                 naam='". $_POST['naam'] ."',"; //etc

      mysql_query($insertQuery) or die(mysql_error());
      // mail versturen
      echo 'Gefeliciteerd, u heeft de '. $prijs .'e prijs gewonnen.';
    } else {
      echo 'Helaas, iemand voor u heeft de '. $prijs .'e prijs al gewonnen.';
    }
  } else {
    echo 'Helaas, op uw getal is geen prijs gevallen.';
  }
} else {
?>
<form action="" method="post">
Naam: <input type="text" name="naam" /><br />
Postcode: <input type="text" name="postcode" maxlength="7" /><br />
Huisnummer: <input type="text" name="huisnummer" maxlength="4" /><br />
E-mail: <input type="text" name="email" /><br />
Code: <input type="text" name="getal" /><br /><br />
<input type="submit" name="submit" value="Verstuur" />
</form>
<?php
}
?>

Met deze SQL database:

gebruikers

gid INT(11) auto_increment Primary Key
gebruikersnaam VARCHAR(50)
wachtwoord VARCHAR(32)

loten

lid INT(11) auto_increment Primary Key
getal INT(5)
prijs INT(2)

winnaars

wid INT(11) auto_increment Primary Key
lid INT(11)
naam VARCHAR(75)
postcode VARCHAR(7)
huisnummer VARCHAR(4)
email VARCHAR(50)

Alleen het werkt nog niet...

Ik krijg deze fout als ik het formulier invul met een winnende 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 'lid='0', naam='bouke',' at line 2

zien jullie het probleem?

Of heb ik de SQL datatbase verkeerd ingevuld?

Ik hoop dat jullie me kunnen helpen...

Groet,

Bouke
 
De code voor het invoegen is in ieder geval niet juist verander:

PHP:
 $insertQuery = "INSERT INTO winnaars
                 lid='". $lid ."',
                 naam='". $_POST['naam'] ."',"; //etc

in:

PHP:
 $insertQuery = "INSERT INTO winnaars (lid,naam,postcode,huisnummer,email) values ('$lid','".$_POST["naam"]."','".$_POST["postcode"]."','".$_POST["huisnummer"]."','".$_POST["email"]."')";
 
Bedankt,

Hij doet het nu ind. beter! Maar ik heb nog wel een aantal dingetjes...

Als ik nu meerdere prijzen invul in de database en meerdere winnende nummers dan geeft hij bij de eerst wel de prijs maar 1 keer weg maar bij het tweede nummer werkt die controle niet... Wat kan ik daar aan doen?

En ik wil ook graag dat mensen maar 1 keer mee kunnen doen, dus dat er gecontroleerd wordt of ze al een keer eerder mee hebben gedaan op basis van naam, adres, postcode en mail adres...

Kan dit ook?

Groet,
 
En ik wil ook graag dat mensen maar 1 keer mee kunnen doen, dus dat er gecontroleerd wordt of ze al een keer eerder mee hebben gedaan op basis van naam, adres, postcode en mail adres...

Tuurlijk kan dat...

Extra IF-statements inbouwen tijdens het "aanmelden" waarbij je controleert met queries of hetgeen al in de database terug te vinden is.
 
maar hiervoor moet ik eerst ook altijd de gegevens van de gebruikers opslaan denk ik... of niet? En hoe doe ik dat? en hoe werken die extra IF statements?
 
Lijkt mij wel ja, kwestie van extra velden aan de tabel van gebruikers toevoegen.

De IF-statements baseer je op basis van een SELECT-query
 
Kun je me een voorbeeld geven? een klein stukje voor me invullen? kben namelijk totaal geen PHP expert...

Tnx tot zo ver!!!

En eigenlijk moet er ook een controle op komen dat de velden wel goed zijn ingevuld...
 
Laatst bewerkt:
Even niet goed naar je begincode gekeken...
Je slaat de gegevens al op bij de winnaars.

Dus wat je eigenlijk wilt doen is die controle daarop uitvoeren.

PHP:
$winQuery = "SELECT naam, postcode, huisnummer, email
             FROM winnaars
             WHERE LOWER(naam)='". strtolower($_POST['naam']) ."'
             OR LOWER(postcode)='". strtolower($_POST['postcode']) ."'
             AND huisnummer='". $_POST['huisnummer'] ."'
             OR LOWER(email)='". strtolower($_POST['email']) ."'";
$winResult = mysql_query($winQuery) or die(mysql_error());
if(mysql_num_rows($winResult) != 0) {
  echo 'Iemand gevonden!';
} else {
  echo 'Niemand met deze gegevens gevonden';
}

Voor verplichte velden heb je wellicht iets aan deze thread.
 
Hij slaat de gegevens nu nog niet op in winnaar, alleen als ze echt iets gewonnen hebben. Dit moet hij dus sowieso opslaan, ook als ze niks gewonnen hebben zodat iedereen maar 1 keer zijn nummer in kan voeren...
 
Zoals ik ook al eerder aangaf, ik ben PHP aan het leren en vat er dus nog lang niet alles van... maar begin het een klein beetje te begrijpen, super dat je me zo wilt helpen! TNX!!
 
Hij slaat de gegevens nu nog niet op in winnaar, alleen als ze echt iets gewonnen hebben. Dit moet hij dus sowieso opslaan, ook als ze niks gewonnen hebben zodat iedereen maar 1 keer zijn nummer in kan voeren...

Niet? Je hebt in de tabel Winnaars toch die velden aangemaakt en ook de code ervoor al half.

Op zich is het handiger om die velden bij de tabel Gebruikers neer te zetten.
Dat zal de query wel iets veranderen aangezien je gegevens uit 2 tabellen nodig hebt wil je weten welke gebruikers al een prijs hebben.
 
Nee, hij slaat ze alleen op als ze ook daadwerkelijk een prijs hebben gewonnen.

Het zou dus nu eigenlijk zo moeten:

Een tabel met gebruikers waarin alle gebruikers opgeslagen worden,

Een tabel met winnaars waarin alle winnaars opgeslagen worden,

Een tabel met loten waarin de winnende loten staan vermeld.

Klopt dit zo een beetje?

en hoe zou de PHP code er dan uit moeten komen te zien?
 
gebruikers
gid INT(11) auto_increment Primary Key
gebruikersnaam VARCHAR(50)
wachtwoord VARCHAR(32)
naam VARCHAR(75)
postcode VARCHAR(7)
huisnummer VARCHAR(4)
email VARCHAR(50)

loten
lid INT(11) auto_increment Primary Key
getal INT(5)
prijs INT(2)

winnaars
wid INT(11) auto_increment Primary Key
lid INT(11)

Zo'n structuur bedoel je?

Dus dat iedereen zich kan registeren maar alleen degene met een code kan mee doen aan de loting. (Ik neem aan dat daar een fysieke controle op uit wordt gevoerd)

Dan moet je dus je hele code uit moeten breiden aangezien je dan met een login van gebruikers te maken krijgt. Als iemand dan ingelogd is kan hij/zij een code invullen die dan wordt verwerkt.
 
Nee, dat bedoel ik niet helemaal, ik zal het verhaal proberen te schetsen ;)

Mensen hebben een lot (flyer) met een uniek nummer (dus ook fysieke controle).

Deze voeren ze op de website in samen met hun naam, postcode, huisnummer en mailadres. Met deze combinatie kunnen mensen dus maar 1 lotnummer invoeren.

Als ze dus het formulier invullen dan moet er dus gecontroleerd worden of ze al eerder mee hebben gedaan, zo ja, dan mogen ze niet weer mee doen, zo nee, dan wordt het lotnummer gecontroleerd. Heeft ie prijs dan wordt dat direct mee gedeeld, heeft hij geen prijs dan wordt dat ook mee gedeeld.

Snap je het ;)
 
Als het goed is moet ik het snappen aangezien ik je ook aan de begincode heb geholpen ;)

Maar ik begrijp dan niet waarom je dit zegt
Hij slaat de gegevens nu nog niet op in winnaar, alleen als ze echt iets gewonnen hebben. Dit moet hij dus sowieso opslaan, ook als ze niks gewonnen hebben zodat iedereen maar 1 keer zijn nummer in kan voeren...
Als ik je verhaal zo volg dan staan de gegevens in de winnaars tabel dus kun je die gewoon gaan controleren op het voorkomen van gegevens m.a.w. dubbele winnaars qua adres e.d.
 
Maar in de winnaars tabel slaat hij alleen de personen op die ook echt gewonnen hebben, de mensen die niks winnen slaat hij niet op. Hierdoor kun je dus niet controleren of mensen al eerder meegedaan hebben...

Trouwens bedankt ook voor die begin code :)
 
Laatst bewerkt:
Hmm, iets zegt mij dat een extra tabel handig is.

De tabel gebruikers is voor de "admins" :rolleyes:

gebruikers
gid INT(11) auto_increment Primary Key
gebruikersnaam VARCHAR(50)
wachtwoord VARCHAR(32)

Loten
lid INT(11) auto_increment Primary Key
getal INT(5)
prijs INT(2)

Deelnemers
did INT(11) auto_increment primary key
naam VARCHAR(75)
postcode VARCHAR(7)
huisnummer VARCHAR(4)
email VARCHAR(50)

Winnaars
wid INT(11) auto_increment Primary Key
did INT(11)
lid INT(11)
 
Oke, maar admins worden in eerste instantie nog niet gebruikt... het moet eerst maar eens werken ;)

ik heb nu dit:

PHP:
<?php
	// Connecting, selecting database
	$link = mysql_connect('localhost', '***', '***')
	or die('Could not connect: ' . mysql_error());
	mysql_select_db('jeugdmeeting_nl') or die('Could not select database');
?>

<?php
if(isset($_POST['submit'])) {
  // Bij voorkeur allerlei controles uitvoeren op ingevulde waardes


if(empty($naam)) {
  // We geven een nieuwe element door aan $errorMsg
  $errorMsg[] = 'U bent vergeten een naam in te vullen.';
}

if(empty($postcode)) { 
  // Melding
  $errorMsg[] = 'U bent vergeten een postcode op te geven.';
}

if(empty($huisnummer)) {
  // Melding
  $errorMsg[] = 'U bent vergeten een huisnummer op te geven.';
} elseif(!is_numeric($huisnummer)) {

  $errorMsg[] = 'Het ingevoerde huisnummer is niet geldig.';
}

// Controle(s) op e-mail
// Eerst controleren op foute tekens
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
if(empty($email)) {
  // Melding
  $errorMsg[] = 'U bent vergeten een email adres op te geven';
} elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  // Email validatie uitgevoerd
  // Melding
  $errorMsg[] = 'Het door u ingevulde e-mailadres is ongeldig.';
}

if(empty($code)) {
  // Melding
  $errorMsg[] = 'U bent vergeten het lotnummer in te voeren.';
} elseif(!is_numeric($code)) {

  $errorMsg[] = 'Het ingevoerde lotnummer is niet geldig.';
}	


  
  // Kijken of er een prijs op het getal is gevallen
  $lotQuery = "SELECT lid, prijs FROM loten WHERE getal ='". $_POST['getal'] ."'";
  $lotResult = mysql_query($lotQuery) or die(mysql_error());
  if(mysql_num_rows($lotResult) > 0) {
    // Er is een prijs -> kijken of die prijs niet al is vergeven
    $lotRow = mysql_fetch_array($lotResult);
    $lid = $lotRow['lid'];
    $prijs = $lotRow['prijs'];
    $winnaarQuery = "SELECT prijs FROM winnaars w INNER JOIN loten l ON w.lid=l.lid";
    $winnaarResult = mysql_query($winnaarQuery) or die(mysql_error());
    $winnaarRow = mysql_fetch_array($winnaarResult);
    if($winnaarRow['prijs'] != $prijs) {
    
$insertQuery = "INSERT INTO winnaars (lid,naam,postcode,huisnummer,email) values ('$lid','".$_POST["naam"]."','".$_POST["postcode"]."','".$_POST["huisnummer"]."','".$_POST["email"]."')";  

      mysql_query($insertQuery) or die(mysql_error());
      // mail versturen
      echo 'Gefeliciteerd, u heeft de '. $prijs .'e prijs gewonnen.';
    } else {
      echo 'Helaas, iemand voor u heeft de '. $prijs .'e prijs al gewonnen.';
    }
  } else {
    echo 'Helaas, op uw getal is geen prijs gevallen.';
  }
} else {
?>
<form action="" method="post">
Naam: <input type="text" name="naam" /><br />
Postcode: <input type="text" name="postcode" maxlength="7" /><br />
Huisnummer: <input type="text" name="huisnummer" maxlength="4" /><br />
E-mail: <input type="text" name="email" /><br />
Code: <input type="text" name="getal" /><br /><br />
<input type="submit" name="submit" value="Verstuur" />
</form>
<?php






}
?>

En die controles die werken dus nog niet :s ligt dat aan mij ;) En die emailcontrole uit het forum wat jij aangaf werkte helemaal niet :s...

:eek::shocked:
 
Laatst bewerkt:
Oke, ik heb de tabellen zo nu aangemaakt... en nu :eek:.. Ik loop nu een beetje helemaal vast... Zou je me nog een beetje verder kunnen helpen??
 
"sleur-en-pleur" gaat niet werken he ;)

Variabelen controleren lijkt me een goed idee. Je hernoemt de $_POST variabelen niet i.t.t. het script waar je de controles vandaan hebt.

Daarnaast doe je niets met het weergeven van de fouten.

Zou je het zelf kunnen repareren of lijkt het je verstandiger dat een van ons het doet (waarschijnlijk ik :D)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan