Scoutnet vzw

We connect scouts!
Het is momenteel 27 Apr 2024 8:01

Alle tijden zijn UTC + 1 uur




Plaats een nieuw onderwerp Reageren op dit onderwerp  [ 17 berichten ]  Ga naar pagina 1, 2  Volgende
Auteur Bericht
BerichtGeplaatst: 31 Mei 2007 17:38 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 23 Sep 2003 23:00
Berichten: 76
Woonplaats: Meise
Eerst even probleem schetsen, we willen lijsten aanmaken met alle leiding die er geweest is in onze scouts. In welk jaar en in welke tak ze staan.

De tabel ziet er als volgt uit:

Naam----Voornaam----2006-2007 ----2005-2006----2004-2005 ......

Voorb----Jef------------------------------Kabouters----Kapoenen

Dus hier is Jef leider geweest van de kabouters in 2005-2006 en bij de kapoenen in 2004-2005

Nu zou ik willen dat ze op de site hun eigen kunnen toevoegen, dit kan je hier zien: http://www.scoetevanroi.be/stam/leiding.php

Maar krijg dit niet helemaal goed, hoe moet ik doen dat als je een jaar en tak ingeeft, die tak ook wel degelijk bij het jaartal in de tabel komt?

Dit had ik al, maar werkt dus niet:
Code:
<?php
error_reporting(E_ALL);
include("verbinding.php");
$tabel = "leiding";

$voornaam= addslashes($_POST['voornaam']);
$naam= addslashes($_POST['naam']);
$scoutsjaar= addslashes($_POST['scoutsjaar']);
$tak= addslashes($_POST['tak']);


if (isSet($_POST['invoer'])) {
if ($naam == "") $error="Je moet een voornaam invullen!";
elseif ($voornaam =="") $error="Je moet je naam invullen!";
elseif ($scoutsjaar =="");
elseif ($tak =="");

if (!isSet($error)) {
$query = "INSERT INTO $tabel (Naam, Voornaam)
VALUES ('$naam', '$voornaam')";
mysql_query($query) or die (mysql_error())
   if $scoutsjaar == $tabel (Scoutsjaar){
   $query = "INSERT INTO $tabel (Tak)
   VALUES ('$tak')";
   mysql_query($query) or die (mysql_error())
   }
   
echo "Uw gegevens zijn ingevoerd<br>";
echo "<a href=\"http://scoetevanroi.be/stam/leiding.html\">Terug</a>";
}
else
   echo $error;
}
?>


Dank bij voorbaat


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 31 Mei 2007 19:02 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 28 Nov 2003 0:00
Berichten: 30
Volgens mij kan je beter je tabel anders maken:

Naam --- Voornaam --- Tak --- Jaar

En dan voor elk jaar dat ze in een bepaalde tak staan een nieuwe rij toevoegen.
Vb.

Naam --- Voornaam --- Tak --- Jaar
============================
Cornelis --- Jan --- Kapoenen --- 2005-2006
Cornelis --- Jan --- Verkenners --- 2006-2007


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 31 Mei 2007 19:36 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 22 Mrt 2005 0:00
Berichten: 353
dit is de manier:

Afbeelding

Tabel Persoon:
Code:
Id - Naam -     Voornaam  - emailadres
------------------------------------------------
1   | Janssens |  Jan      | jan@hotmail.com
2   | Pieters  | Piet      | piet@hotmail.com
etc...


Tabel Tak:
Code:
Id - Naam
------------
1  | kapoenen
2  | kabouters
3  | welpen
etc...


Tabel Werkjaar:
Code:
Id - Waarde
----------------
1  | 2005 - 2006
2  | 2006 - 2007
etc...


Tabel Leidingsjaar:
Code:
Persoon_id - Tak_id - Jaar_id
----------------------------------
1          | 1      | 1
1          | 3      | 2


In dit voorbeeld heeft Jan Janssens (persoon_id = 1) in 2005 - 2006 (jaar_id = 1) bij de kapoenen (tak_id = 1) gestaan. En hij heeft in 2006 - 2007 (jaar_id = 2) bij de welpen (tak_id = 3) gestaan.


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 31 Mei 2007 21:06 
Offline
Site Admin
Site Admin
Gebruikers-avatar

Geregistreerd: 17 Jul 2002 23:00
Berichten: 1522
Woonplaats: Wetteren
De oplossing van Natrium is inderdaad de beste. Merk op dat je op die manier ook gemakkelijk nog extra info over het jaar kan bijhouden, bijvoorbeeld jaarthema, kampplaats,...

Zweer je toch bij je eigen voorstel, dan is dit de manier om het toe te voegen:

Code:
if (!isSet($error)) {
  $query = "INSERT INTO $tabel (Naam, Voornaam,'$scoutsjaar') VALUES ('$naam', '$voornaam','$tak')";
  mysql_query($query) or die (mysql_error());
  echo "Uw gegevens zijn ingevoerd<br>";
  echo "<a href=\"http://scoetevanroi.be/stam/leiding.html\">Terug</a>";
} else {
  echo $error;
}
?>


To


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 01 Jun 2007 7:07 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 23 Sep 2003 23:00
Berichten: 76
Woonplaats: Meise
Bedankt voor de hulp al, als ik is meer tijd heb (na de examens) zal ik Natrium zijn oplossing is proberen.

Dus gaak nu nog effe mijn oplossing laten staan, maar To uw voorstel werkt niet echt, ik krijg volgende foutmelding:
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 ''2005-2006') VALUES ('tester', 'test','Kapoenen')' at line 1


Zal mijn volledige code nog is plaatsen:
form:
Code:
<form action="voegtoe.php" method="post">
              
      Uw Voornaam* :
      <input type="text" name="voornaam"><br><br>
      Uw Familienaam* :
      <input type="text" name="naam"><br><br>
       Jaar:<br><br>
      <input type="text" name="scoutsjaar"><br><br>
       Tak:<br><br>
      <input type="text" name="tak"><br><br>
      
      <input type="submit" value="Voer in" name="invoer">   
      </form>


voegtoe instructie:
Code:
<?php
error_reporting(E_ALL);
include("verbinding.php");
$tabel = "Leiding";

$voornaam= addslashes($_POST['voornaam']);
$naam= addslashes($_POST['naam']);
$scoutsjaar= addslashes($_POST['scoutsjaar']);
$tak= addslashes($_POST['tak']);


if (isSet($_POST['invoer'])) {
if ($naam == "") $error="Je moet een voornaam invullen!";
elseif ($voornaam =="") $error="Je moet je naam invullen!";
elseif ($scoutsjaar =="");
elseif ($tak =="");

if (!isSet($error)) {
  $query = "INSERT INTO $tabel (Naam, Voornaam, '$scoutsjaar') VALUES ('$naam', '$voornaam','$tak')";
  mysql_query($query) or die (mysql_error());
  echo "Uw gegevens zijn ingevoerd<br>";
  echo "<a href=\"http://scoetevanroi.be/stam/leiding.html\">Terug</a>";
} else {
  echo $error;
}
}
?>


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 01 Jun 2007 8:13 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 02 Feb 2004 0:00
Berichten: 173
Zoiets?
Code:
if (!isSet($error)) {
  $query = "INSERT INTO $tabel (Naam, Voornaam,tak, jaar) VALUES ('$naam', '$voornaam','$tak','$scoutsjaar')";
  mysql_query($query) or die (mysql_error());
  echo "Uw gegevens zijn ingevoerd<br>";
  echo "<a>Terug</a>";
} else {
  echo $error;
}
?>


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 01 Jun 2007 8:18 
Offline
Site Admin
Site Admin
Gebruikers-avatar

Geregistreerd: 17 Jul 2002 23:00
Berichten: 1522
Woonplaats: Wetteren
Het probleem wordt veroorzaakt door het veld "2005-2006". Eigenlijk is het nooit een goed idee om met veldnamen te werken die een koppelteken bevatten. De reden daarvoor is dat MySQL denkt dat er "2005 min 2006" staat.

2 mogelijkheden:
> Vervang in je tabel alle koppeltekens in de veldnamen door liggende streepjes (dus: "2005_2006" in plaats van "2005-2006" als veldnaam). Je query wordt dan:
Code:
$query = "INSERT INTO $tabel (Naam, Voornaam, $scoutsjaar) VALUES ('$naam', '$voornaam','$tak')";

> Schrijf de veldnaam tussen scheve quote's (merk op dat er een verschil is tussen ` en '). Je query wordt dan:
Code:
$query = "INSERT INTO $tabel (Naam, Voornaam, `$scoutsjaar`) VALUES ('$naam', '$voornaam','$tak')";

Gelukt?

To


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 01 Jun 2007 8:28 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 23 Sep 2003 23:00
Berichten: 76
Woonplaats: Meise
Het werkt, heel heel hard bedankt!!!!


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 01 Jun 2007 8:45 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 22 Mrt 2005 0:00
Berichten: 353
scoutsrode schreef:
Het werkt, heel heel hard bedankt!!!!


overweeg ook maar om mijn voorstel te implementeren.
Niet omdat het mijn oplossing is, maar omdat het echt wel de beste oplossing is die mogelijkheid tot vele uitbreidingen biedt!

als je nog wat meer info moet hebben, dan geef je hier maar een gil


en succes met je (opkomende) examens!


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 01 Jun 2007 9:00 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 23 Sep 2003 23:00
Berichten: 76
Woonplaats: Meise
Natrium schreef:
scoutsrode schreef:
Het werkt, heel heel hard bedankt!!!!


overweeg ook maar om mijn voorstel te implementeren.
Niet omdat het mijn oplossing is, maar omdat het echt wel de beste oplossing is die mogelijkheid tot vele uitbreidingen biedt!

als je nog wat meer info moet hebben, dan geef je hier maar een gil


en succes met je (opkomende) examens!


Ben er wel nog ni aan bezig, vermits ik vollenbak aant blokke ben, maar toch al een vraagje.

Nadat je tabel persoon, tak en werkjaar hebt aangemaakt. Hoe maak je dan tabel leidingsjaar aan? Is dat met een foreign key?

en is dat dan zo iets ongeveer:
Code:
 create table leidingsjaar
(foreign key (persoon_id)
foreign key (tak_id)
foreign key (Jaar_id)
)


Zo totaal ni weten of da juist is.

Toch al bedankt


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 01 Jun 2007 9:28 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 31 Jul 2002 23:00
Berichten: 236
Je maakt deze tabel net zoals alle andere waarbij je zorgt dat de overeenkomende velden van het zelfde type en grootte zijn dan die van de gelinkte tabel.
de primaire sleutel van deze tabel is de combinatie van de 3 link velden

Code:
CREATE TABLE leidingsjaar(
   persoon_id int(11) NOT NULL,
   tak_id int(11) NOT NULL,
   jaar_id int(11) NOT NULL,
   PRIMARY KEY (persoon_id,tak_id,jaar_id)
)


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 01 Jun 2007 10:15 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 23 Sep 2003 23:00
Berichten: 76
Woonplaats: Meise
Ok, zal dit is proberern alsk we meer tijd heb.


Heb daarstraks te vroeg gejuicht denk ik, het werkte inderdaad om iemand nieuw toetevoegen. Maar als je er al instaat werkt het dus niet. Ik weet dat je dan via update moet werken, maarja.

Ik had al 2 zaken getest:

1:
Code:
<?php
error_reporting(E_ALL);
include("verbinding.php");
$tabel = "Leiding";

$voornaam= addslashes($_POST['voornaam']);
$naam= addslashes($_POST['naam']);
$mail= addslashes($_POST['naam']);
$scoutsjaar= addslashes($_POST['scoutsjaar']);
$tak= addslashes($_POST['tak']);


if (isSet($_POST['invoer'])) {
elseif ($naam =="") $error="Je moet je naam invullen!";
elseif ($voornaam =="") $error="Je moet je voornaam invullen!";
elseif ($mail =="") $error="Je moet een mailadres invullen!";
elseif ($scoutsjaar =="");
elseif ($tak =="");

if (!isSet($error)) {
  $query =  $update = "UPDATE " . $tabel . " SET `$scoutsjaar`='" . $tak . "' WHERE Naam='" . $naam . "' AND Voornaam= '" . $voornaam . "'";
  mysql_query($query) or die (mysql_error());
  echo "Uw gegevens zijn ingevoerd<br>";
  echo "<a href=\"http://scoetevanroi.be/stam/leiding.php\">Terug</a>";
} else {
  echo $error;
}
}
?>



en 2de poging:


Code:
<?php
error_reporting(E_ALL);
include("verbinding.php");
$tabel = "totem";

if (isset($_POST['naam'])) {
  $naam = addslashes($_POST['naam']);
} else {
  $naam = "";
}
if (isset($_POST['voornaam'])) {
  $voornaam = addslashes($_POST['voornaam']);
} else {
  $voornaam = "";
}

if (isset($_POST['scoutsjaar'])) {
  $scoutsjaar = addslashes($_POST['scoutsjaar']);
} else {
  $scoutsjaar= "";
}
if (isset($_POST['tak'])) {
  $tak = addslashes($_POST['tak']);
} else {
  $tak = "";
}


if (isSet($_POST['invoer'])) {
  if ($naam == "")
  elseif ($voornaam =="")
  elseif ($mail =="")
  elseif ($soutsjaar=="");
  elseif ($tak =="");
 
 
 
  if (!isset($error)) {
    if ($soutsjaar <> "") {
      $update = "UPDATE " . $tabel . " SET `$scoutsjaar`='" . $tak . "' WHERE Naam='" . $naam . "' AND Voornaam= '" . $voornaam . "'";
      $query = mysql_query($update)or die(mysql_error());
    }
   
   
    echo "Uw gegevens zijn aangepast<br>";
      echo "<a href=\"http://scoetevanroi.be/stam/indexStamcellen.html\">Terug</a>";
  } else {
    echo $error;
  }
 
}
?>
[/code]


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 09 Jun 2007 9:54 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 23 Sep 2003 23:00
Berichten: 76
Woonplaats: Meise
caygull schreef:
Je maakt deze tabel net zoals alle andere waarbij je zorgt dat de overeenkomende velden van het zelfde type en grootte zijn dan die van de gelinkte tabel.
de primaire sleutel van deze tabel is de combinatie van de 3 link velden

Code:
CREATE TABLE leidingsjaar(
   persoon_id int(11) NOT NULL,
   tak_id int(11) NOT NULL,
   jaar_id int(11) NOT NULL,
   PRIMARY KEY (persoon_id,tak_id,jaar_id)
)


Ik heb eens geprobeerd om deze aan te maken en ziet er als volgt uit:

Tabel Leiding:
Code:
 CREATE TABLE `Leiding` (
`Leiding_Id` MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Leiding_Naam` VARCHAR( 25 ) NOT NULL ,
`Leiding_Voornaam` VARCHAR 25 ) NOT NULL  ,
)



Tabel Tak:
Code:
 CREATE TABLE `Tak` (
`Tak_Id` MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Tak_Naam` VARCHAR( 25 ) NOT NULL ,
)


Tabel Werkjaar:
Code:
CREATE TABLE `Werkjaar` (
`Werjaar_Id` MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Werkjaar_waarde` VARCHAR( 10 ) NOT NULL
)


Tabel Leidingsjaar:
Code:
 CREATE TABLE `Leidingsjaar` (
`Leiding_id` MEDIUMINT( 8 ) NOT NULL ,
`Tak_Id` MEDIUMINT( 8 ) NOT NULL ,
`Werkjaar_Id` MEDIUMINT( 8 ) NOT NULL  ,
PRIMARY KEY ( `Leiding_id` , `Tak_Id`, `Leidingsjaar_Id`  )
)


Heb in de eerste 3 tabellen, dus gewoon gegevens ingevuld en in de vierde bijvoorbeeld 1 bij Leiding_Id en 5 bij Tak_Id wat overeenstemt met de eerste naam uit de leidingstabel en de 5 de tak uit tabel Tak wat overeenstemt met de Jv's en bij Werkjaar_Id bevoorbeeld 1 voor ons eerste werkjaar.

Tot hier ben ik dus al geraakt, maar hoe laat je nu de laatste tabel zien met de naam en tak van de leiding waar ze staan. Want als ik de laatste tabel opvraag krijg ik gewoon de cijfers te zien die ik heb ingevuld.


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 09 Jun 2007 16:11 
Offline
Site Admin
Site Admin
Gebruikers-avatar

Geregistreerd: 17 Jul 2002 23:00
Berichten: 1522
Woonplaats: Wetteren
Dat doe je met volgende SQL-query (ongeveer):

Code:
SELECT Leiding.*, Tak.*, Werkjaar.*
FROM Leiding, Tak, Werkjaar, Leidingsjaar
WHERE Leidingsjaar.Leiding_id=Leiding.Leiding_Id AND Leidingsjaar.Tak_Id=Tak.Tak_Id AND Leidingsjaar.Werkjaar_Id=Werkjaar.Werkjaar_Id
ORDER BY Werkjaar.Werkjaar_waarde DESC, Tak.Tak_Naam ASC;


Wil je de gegevens van slechts één jaar, dan wordt het iets als:

Code:
SELECT Leiding.*, Tak.*, Werkjaar.*
FROM Leiding, Tak, Werkjaar, Leidingsjaar
WHERE Leidingsjaar.Leiding_id=Leiding.Leiding_Id AND Leidingsjaar.Tak_Id=Tak.Tak_Id AND Leidingsjaar.Werkjaar_Id=Werkjaar.Werkjaar_Id AND Werkjaar.Werkjaar_waarde="2005-2006"
ORDER BY Werkjaar.Werkjaar_waarde DESC, Tak.Tak_Naam ASC;


waarbij de gegevens worden gesorteerd volgens werkjaar (aflopend) en taknaam (oplopend). Voor alle gegevens van één persoon wordt het dan weer:

Code:
SELECT Leiding.*, Tak.*, Werkjaar.*
FROM Leiding, Tak, Werkjaar, Leidingsjaar
WHERE Leidingsjaar.Leiding_id=Leiding.Leiding_Id AND Leidingsjaar.Tak_Id=Tak.Tak_Id AND Leidingsjaar.Werkjaar_Id=Werkjaar.Werkjaar_Id AND Leiding.Leiding_id="1"
ORDER BY Werkjaar.Werkjaar_waarde DESC, Tak.Tak_Naam ASC;


To


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 09 Jun 2007 18:11 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 23 Sep 2003 23:00
Berichten: 76
Woonplaats: Meise
Ok, heel hard bedankt To.

Maar had hier dan een vraagje bij, hoe laat je de gebruiker dit dan invoeren via de site. Zoals eerder in dit topic? Maar hier zit je dus met meerdere tabellen.

Eigenlijk maar in 2 denk ik, de leidings tabel waar je de gevens over de persoon invult en dan de leidingsjaar tabel, want de andere 2 tabellen zijn gewoon standaard gegevens.

Dank bij voorbaat


Omhoog
 Profiel  
 
Berichten weergeven van de afgelopen:  Sorteer op  
Plaats een nieuw onderwerp Reageren op dit onderwerp  [ 17 berichten ]  Ga naar pagina 1, 2  Volgende

Alle tijden zijn UTC + 1 uur


Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 31 gasten


U mag geen nieuwe onderwerpen plaatsen in dit forum
U mag geen reacties plaatsen op onderwerpen in dit forum
U mag uw berichten niet wijzigen in dit forum
U mag uw berichten niet verwijderen in dit forum
U mag geen bijlagen plaatsen in dit forum

Zoeken naar:
Ga naar:  
Powered by phpBB® Forum Software © phpBB Group
Vertaald door phpBBservice.nl.