Hallo allemaal,

Ik ben nieuw op dit forum en ook in de wereld van PHP en mySQL.
Ik ben dus een "groentje"...

Ik heb een leuk lopende site gemaakt waar ik momenteel een evenmenten kalender op heb staan welke ik zelf handmatig bijwerk.
Nu wil ik deze kalender automatiseren zodat de bezoekers zelf een evenement kunnen aanmaken en dat de evenementen daarna in volgorde (eerste datum eerst) worden geplaatst.
Tevens moet een evenement welke al is geweest, automatisch worden verwijderd.

Het invullen van evenement zou ik graag zien in de vorm van een standaard formulier.

Kan iemand me vertellen hoe ik te werk moet gaan? Het lieft is een beetje Jip & Janneke taal.
Mijn site is te vinden op www.oudebrommers.nl

Alvast bedankt,

André

Alvast bedankt.
Dan klopt je code/datamodel volgens mij niet helemaal...
A. de Kruijf schreef op 24.05.2008 18:48
Ik heb de code geplaatst.
Het veld rubriek bevindt zich in een andere/aparte tabel...

Dat klopt. De gegevens van de rubrieken en de organisaties halen we op uit de andere tabellen. Dat is de volgende stap die gedaan moet worden.
Zet de volgende code onder het gedeelte waar je verbinding maakt met de database. Hiermee halen we de gegevens van de rubrieken op uit de tabel 'rubrieken'.

$query_rubrieken = ("SELECT * FROM rubrieken ORDER BY rubriek ASC");
$result_rubrieken = mysql_query($query_rubrieken) or die(mysql_error());
$numrows_rubrieken = mysql_num_rows($result_rubrieken);


En pas je formulier weer iets aan. Verander:

<span style="color: #000080; font-size: 12px">Rubriek:</span><br />
<input name="rubriek" type="text" class="input"/><br>


in:

<?php
  if ($result_rubrieken)
  {
    $numrows_rubrieken = mysql_num_rows($result_rubrieken);

    echo '<select name="rubriek_ID" class="input">';
    while ($row = mysql_fetch_array($result_rubrieken))
		{
		  echo '<option value="'.$row['ID'].'">'.$row['rubriek'].'</option>';
		}
  }
  echo '</select><br>';
?>

Als je dat gedaan hebt zie je in je formulier de namen van de rubrieken (die je eerder in je database hebt ingevoerd) terug in een pulldownmenu.
Even voor de duidelijkheid, ik blijf de code van Jezpur gebruiken, toch?
Dit heb ik nu wel gedaan en ik heb je wijzigingen doorgevoerd.
En alles lijkt goed te gaan.

Moet ik nog wat testen om te kijken of het nu in de database komt?

A. de Kruijf schreef op 25.05.2008 18:43
Even voor de duidelijkheid, ik blijf de code van Jezpur gebruiken, toch?

Ja hoor, prima. We moeten alleen even een kleine aanpassing doen en wel het volgende.

$fields = array(
    'evenement' => '',
    'locatie' => '',
    'datum_aanvang' => '',
    'datum_einde' => '',
    'van' => '',
    'tot' => '',
    'rubriek' => '',
    'organisatie' => '',
//    'website' => '',
//    'e_mail' => '',
//    'telefoon' => '',
    'info' => ''


De velden 'website', 'e_mail' en 'telefoon' staan namelijk niet in de tabel 'events', maar in de tabel 'organisations'. Daarom zijn ze hier niet nodig.

Moet ik nog wat testen om te kijken of het nu in de database komt?

Ja, het eerste formulier zou nu redelijk goed moeten werken. Voer iets in in de velden 'evenement' en 'locatie' en submit het formulier. Deze gegevens behoren dan in je database terecht te komen.

Plak onderstaande code onderaan je formulier. Je moet dan de ingevoerde resultaten terugzien, direct onder je formulier. Later maken we hier een nette aparte pagina van, dit is alleen om het even te testen.


Upcoming events:<br>

	<?php
	  $query = ("SELECT * FROM events ORDER BY datum_aanvang ASC");
	  $result = mysql_query($query) or die(mysql_error());

    while ($row = mysql_fetch_array($result)) 
		{
			echo $row['ID'] . " - ";
			echo $row['evenement'] . " - ";
			echo $row['locatie'] . " - ";
			echo $row['datum_aanvang'] . " - ";
			echo $row['datum_einde'] . " - ";
			echo $row['van'] . " - ";
			echo $row['tot'] . " - ";
			echo $row['info'] . " - ";
			echo $row['rubriek'] . " - ";
			echo $row['organisatie'] . "<br>";
		}
?>
Ik heb gedaan wat je me hebt gevraagd.
Ik kan alleen nog geen evenement toevoegen. Volgens mij komt dit door het rubriek en organisatie veld. Deze kan hij niet vinden volgens mij.

Mijn code is nu als volgt.


          <?php 
// Laat alle errors zien 
error_reporting(E_ALL); 

$host = "localhost"; 
$db = "oudebro_events"; //hier de naam van de database
$user = "oudebro_events"; //hier de naam van de gebruiker
$password = "xxxxxxxx";  //hier het wachtwoord van de gebruiker 

mysql_connect ($host, $user, $password) or die ("geen verbinding 1"); 
mysql_select_db ($db) or die ("geen verbinding 2"); 

$query_rubrieken = ("SELECT * FROM rubrieken ORDER BY rubriek ASC");
$result_rubrieken = mysql_query($query_rubrieken) or die(mysql_error());
$numrows_rubrieken = mysql_num_rows($result_rubrieken); 

$fields = array(
    'evenement' => '',
    'locatie' => '',
    'datum_aanvang' => '',
    'datum_einde' => '',
    'van' => '',
    'tot' => '',
    'rubriek' => '',
    'organisatie' => '',
//    'website' => '',
//    'e_mail' => '',
//    'telefoon' => '',
    'info' => ''
);

// is er iets gepost?
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    // input controleren en bewerken
    foreach($_POST as $key => $value) {
        if(in_array($key, array_keys($fields))) $fields[$key] = mysql_real_escape_string ($value);
    }
    
    // insert het record
    $query = "INSERT INTO events 
    (".implode(',',array_keys($fields)).") 
    VALUES 
    ('".implode('\',\'',$fields)."')";
    $result = mysql_query($query);
    if($result) {
        if(mysql_affected_rows() == 1) {
            $msg = 'Record toegevoegd';
        }
    } else {
        $msg = mysql_error();
        $msg .= '<br />';
        $msg .= htmlentities($query);
    }
    
    if(!empty($msg)) {
        echo '<p>'.$msg.'</p>';
    }
}
?>
    <form name="form1" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
      <label></label>
      <p align="center"><span style="color: #000080; font-size: 12px">Evenement:</span><br />
          <input name="evenement" type="text"/>
          <br>
          <span style="color: #000080; font-size: 12px">Locatie:</span><br />
          <input name="locatie" type="text" class="input"/>
          <br>
          <span style="color: #000080; font-size: 12px">Datum (Aanvang):</span><br />
          <input name="datum_aanvang" type="text" class="input"/>
          <br>
          <span style="color: #000080; font-size: 12px">Datum (Einde):</span><br />
          <input name="datum_einde" type="text" class="input"/>
          <br>
          <span style="color: #000080; font-size: 12px">Aanvangstijd:</span><br />
          <input name="van" type="text" class="input"/>
          <br>
          <span style="color: #000080; font-size: 12px">Eind tijd:</span><br />
          <input name="tot" type="text" class="input"/>
          <br>
          <span style="color: #000080; font-size: 12px">Rubriek:</span><br />
          <?php
  if ($result_rubrieken)
  {
    $numrows_rubrieken = mysql_num_rows($result_rubrieken);

    echo '<select name="rubriek_ID" class="input">';
    while ($row = mysql_fetch_array($result_rubrieken))
        {
          echo '<option value="'.$row['ID'].'">'.$row['rubriek'].'</option>';
        }
  }
  echo '</select><br>';
?> 
          <span style="color: #000080; font-size: 12px">Organisatie:</span><br />
          <input name="organisatie" type="text" class="input"/>
          <br>
          <span style="color: #000080; font-size: 12px">Website:</span><br />
          <input name="website" type="text" class="input"/>
          <br>
          <span style="color: #000080; font-size: 12px">e-mail adres:</span><br />
          <input name="e_mail" type="text" class="input"/>
          <br>
          <span style="color: #000080; font-size: 12px">Telefoon:</span><br />
          <input name="telefoon" type="text" class="input"/>
          <br />
          <span style="color: #000080; font-size: 12px">Aanvullende informatie:</span><br />
          <textarea name="info" cols="50" rows="4">Typ hier uw tekst</textarea>
          <br>
          <br>
          <input type="submit" name="btnSubmit" value="Voeg toe" class="button"/>
      </p>
      </form>




Het resultaat kun je nog hier vinden: http://www.oudebrommers.nl/testevenement.php

Kan het komen doordat de rubriek en de organisatie ook niet in het events formulier staan opgeslagen? Want in dit formulier staat id_rubriek en id_organisatie?

Als ik de code aanpas naar:

fields = array(
    'evenement' => '',
    'locatie' => '',
    'datum_aanvang' => '',
    'datum_einde' => '',
    'van' => '',
    'tot' => '',
    'rubriek' => '',
    'organisatie' => '',
//    'website' => '',
//    'e_mail' => '',
//    'telefoon' => '',
    'info' => ''
);

dan werkt hij wel, maar krijg ik een foutmelding. Telkens als ik op f5 druk om te verversen komt bovendien de laatst toegevoegde regel er opnieuw bij.

Als ik de pagina sluit en weer opnieuw open dan zijn de evenementen onder aan de pagina overigens ook weg, maar ze staan nog wel in de database.
A. de Kruijf schreef op 26.05.2008 18:42

Volgens mij komt dit door het rubriek en organisatie veld. Deze kan hij niet vinden volgens mij.

Klopt, mijn code bevatte een foutje. Ik had 'rubriek_ID' gebruikt, maar dat moest gewoon 'rubriek' zijn.

De namen van de velden in de tabel 'events' moeten exact overeenkomen met het volgende lijstje: ID, evenement, locatie, datum_aanvang, datum_einde, van, tot, rubriek, organisatie, info

Vervang
echo '<select name="rubriek_ID" class="input">';
door
echo '<select name="rubriek" class="input">';

Telkens als ik op f5 druk om te verversen komt bovendien de laatst toegevoegde regel er opnieuw bij.

Dat klopt, de gegevens worden dan opnieuw gepost, komt later goed.

Als ik de pagina sluit en weer opnieuw open dan zijn de evenementen onder aan de pagina overigens ook weg, maar ze staan nog wel in de database.

Da's vreemd, je hoort ze altijd te zien. Staan ze werkelijk helemaal onderaan je pagina, en niet toevallig binnen de afvraging 'of er iets gepost is'?

Dit zou het einde van je pagina kunnen zijn, hoewel ik zag dat daar ook nog wat scripts o.i.d. stonden.

[code]
</table>

Upcoming events:<br>
<?php
$query = ("SELECT * FROM events ORDER BY datum_aanvang ASC");
$result = mysql_query($query) or die(mysql_error());

while ($row = mysql_fetch_array($result))
{
echo $row['ID'] . " - ";
echo $row['evenement'] . " - ";
echo $row['locatie'] . " - ";
echo $row['datum_aanvang'] . " - ";
echo $row['datum_einde'] . " - ";
echo $row['van'] . " - ";
echo $row['tot'] . " - ";
echo $row['info'] . " - ";
echo $row['rubriek'] . " - ";
echo $row['organisatie'] . "<br>";
}
?>

</body>
</html>
[code]
Ik heb gedaan wat je me verteld:

A. de Kruijf schreef op 26.05.2008 18:42 Volgens mij komt dit door het rubriek en organisatie veld. Deze kan hij niet vinden volgens mij.


Klopt, mijn code bevatte een foutje. Ik had 'rubriek_ID' gebruikt, maar dat moest gewoon 'rubriek' zijn.

De namen van de velden in de tabel 'events' moeten exact overeenkomen met het volgende lijstje: ID, evenement, locatie, datum_aanvang, datum_einde, van, tot, rubriek, organisatie, info

Vervang
echo '<select name="rubriek_ID" class="input">';
door
echo '<select name="rubriek" class="input">';

dit is aangepast, ik heb even een screendump gemaakt van mijn drie tabellen hier kun je ze vinden.

Tabelnaam is: events
http://www.oudebrommers.nl/teststuff/events.jpg

Tabelnaam is: organisation
http://www.oudebrommers.nl/teststuff/oranisatie.jpg

Tabelnaam is: rubrieken
http://www.oudebrommers.nl/teststuff/rubriek.jpg


Da's vreemd, je hoort ze altijd te zien. Staan ze werkelijk helemaal onderaan je pagina, en niet toevallig binnen de afvraging 'of er iets gepost is'?


Ik heb een klein foutje ontdekt, er stond namelijk een </body> en </html> code dubbel in. En nu blijft het wel staan.
Kan ik straks ook nog de opmaak van de weergave bewerken?
En kan de datum notatie anders? Nu geeft hij 00-00-0000 maar ik wil eigenlijk bijv. 08-mei-2008.
Of loop ik nu op de zaken vooruit?

En wat is de volgende stap?

k heb even een screendump gemaakt van mijn drie tabellen hier kun je ze vinden.
Handig!
En nu blijft het wel staan.
Mooi!
Kan ik straks ook nog de opmaak van de weergave bewerken?
Uiteraard! Maak er maar een mooi weergave van. We gaan de code nog wel een paar keer aanpassen.
En kan de datum notatie anders? Nu geeft hij 00-00-0000 maar ik wil eigenlijk bijv. 08-mei-2008.
Zie hierna.
En wat is de volgende stap?

Zet deze query in je code, direct onder 'query_rubrieken'.

$query_organisaties = ("SELECT ID, organisatie FROM organisaties ORDER BY organisatie ASC");
$result_organisaties = mysql_query($query_organisaties) or die(mysql_error());
$numrows_organisaties = mysql_num_rows($result_organisaties);

setlocale (LC_TIME, "nl_NL");


Zet de volgende code in het formulier, daar waar nu het inputveld van de organisatie staat.

<?php
  if ($result_organisaties)
  {
    $numrows_organisaties = mysql_num_rows($result_organisaties);

    echo '<select name="organisatie" class="input">';
    while ($row = mysql_fetch_array($result_organisaties))
		{
		  echo '<option value="'.$row['ID'].'">'.$row['organisatie'].'</option>';
		}
  }
  echo '</select><br>';
?>

Je moet nu ook de organisaties in een pulldownmenu kunnen zien, net zoals de rubrieken.

Tot slot de weergave van de datum.

echo strftime ('%e %B %Y', strtotime($row['datum_aanvang'])) . " - ";
echo strftime ('%e %B %Y', strtotime($row['datum_einde'])) . " - ";

Tip: type de datum nu even in als 2008-05-27, zodat je het resultaat kunt zien. Daar zoeken we later een Javascriptkalender voor.
Ik zal het morgen even doorvoeren.

Even een vraag, waarvoor dient een query? Maak ik daarmee kenbaar uit of in welke tabel hij de gegevens weg moet schrijven?


Uiteraard! Maak er maar een mooi weergave van. We gaan de code nog wel een paar keer aanpassen.

Ik werk zelf met dreamweaver en gebruik graag tabellen om een en ander netjes onder elkaar te zetten. kan ik dan de verschillende echo $row.... regels in een aparte cel plaatsen? En moet dan het stukje van while ($row...... ook telkens mee gekopieerd worden?


Voorbeeld:

Evenement:<br>
    <?php
      $query = ("SELECT * FROM events ORDER BY datum_aanvang ASC");
      $result = mysql_query($query) or die(mysql_error());

    while ($row = mysql_fetch_array($result)) 
        {
            echo $row['evenement'] . " <br> ";
         }
?>

locatie:<br>
    <?php
      $query = ("SELECT * FROM events ORDER BY datum_aanvang ASC");
      $result = mysql_query($query) or die(mysql_error());

    while ($row = mysql_fetch_array($result)) 
        {
            echo $row['locatie'] . " <br> ";
         }
?>


enz. Of denk ik dan verkeerd?
Ik werk zelf met dreamweaver en gebruik graag tabellen om een en ander netjes onder elkaar te zetten. kan ik dan de verschillende echo $row.... regels in een aparte cel plaatsen? En moet dan het stukje van while ($row...... ook telkens mee gekopieerd worden?


Het gaat er ongeveer zo uitzien:
- eerst de query uitvoeren. Met een query kun je gegevens uit je database ophalen, bewerken, bewaren en verwijderen. De query staat al op de goede plek.
- dan de tabelstart <TABLE>, etc.
- dan de while-loop beginnen:
while ($row = mysql_fetch_array($result))
{
<tr><td>Evenement:</td><td><? echo $row['evenement']; ?></td></tr>
<tr><td>Locatie:</td><td><? echo $row['locatie']; ?></td></tr>
..... rest van de gegevens ......
- dan de while-loop afsluiten
}

Misschien een goed idee om deze resultatenpagina direct in een nieuwe pagina op te bouwen, en niet onder het formulier. Dat was alleen even voor de test.

Reageren