1965/66 - 2014/2015

Seite
Menü
News
Sie sind hier:   Startseite > Online-Abfragen > ...Anleitung und Theorie

...Anleitung und Theorie

Ein aufwändiger Datenkonsolidierungsprozess von Schülerdaten hat zu einem konsistenten Datenbestand geführt. Es wäre schade, diese wertvollen Daten, die in einer MySQL-Datenbank bereit liegen, nicht zu nützen. Mit Hilfe von HTML-Formularen und der Server-Sprache PHP gelingt es, auf diese Daten mit formularbasierten Abfragen zuzugreifen und die gewünschten Anzeigen auf dem Bildschirm zu generieren.

In diese Sprache PHP, bzw. ins Client-Server Konzept muss man sich erst einarbeiten. Aber mit den ersten funktionierenden Skripts wird man belohnt. Um effektiv dynamische Internetseiten zu entwickeln, ist es empfehlenswert, auf dem lokalen Computer den Apache-Server inklusive Mysql-Datenbank und er Skriptspache PHP zu installieren, Das geht sehr einfach mit der Open Source Software XAMPP. Mit dem ausgefeilten Programm  Phpmyadmin kann die Datenbank am Server verwaltet werden.

Verbindung mit der Datenbank

Um auf die Datenbank zugreifen zu können, muss zuerst eine Verbindung zur Datenbank aufgebaut werden. In PHP geschieht dies durch:

 $db = mysqli_connect("Adresse der Datenbank", "benutzer", "passwort", "datenbankname");

Die Variable db wird auf 0 gesetzt, falls der Verbindungsaufbau nicht zustande kam.
Es kann auch ein möglicher Verbindungsfehler ausgegeben werden:

  if(!$db){
          exit("Verbindungsfehler: ".mysqli_connect_error());
  }

Um eine Abfrage zu starten, wird diese in eine String Variable gespeichert. Hierzu sind natürlich SQL Kenntnisse notwenig. Beispielabfragen befinden sich am Ende des Textes.
Um alle verschiedene Vornamen aufzulisten, dient folgende Abfrage:

$abfrageVorname = "Select Distinct s_vn from schueler order by s_vn";

 Diese Abfrage wird dann mit

  $ergebnis = mysqli_query($db, $abfrageVorname);

 abgeschickt. In $ergebnis befinden sich dann die zurückgegebenen Daten, welche nach Zeilen, also Einträgen geordnet sind.
Wie in einer Liste, kann man nach einander eine Zeile nach der anderen abholen:

$row = mysqli_fetch_object($ergebnis);

 Da wir die Ausgabe in Tabellenform möchten, realisieren wir dies hiermit:

echo "<table>";
while($row = mysqli_fetch_object($ergebnis))
{
    echo "<tr>";  echo "<td>";  echo $row->s_vn;   echo "</td>";   echo "</tr>";                      
 }                                 

echo "</table>";

$row entspricht einem Objekt, welches in anderen Fällen auch mehrere Attribute haben kann.
In diesem Fall wird mit $row->s_vn auf das Attribut s_vn (der Vorname) zugegriffen.
Mit echo wird der String als HTML Element an den Host gesendet. 

Diese einfachen Schritte reichen, um auf eine Datenbank zugreifen und Daten anzeigen zu lassen.
In unserem Projekt wollen wir aber natürlich individuelle Abfragen haben. Auch eingabe vom Nutzer soll möglich sein. 

Bei der folgenden Abfrage, gibt man als Eingabe den Vor und Nachnamen eines Absolventen ein
und bekommt die Informationen welche Klasse er in welchem Jahr besuchte.

 

Um so ein Eingabeform zu generieren wurde im HTML Teil der Seite folgendes eingebaut:

<form         class="abfrageForm"
                        action="abfragen/schueler.php"
                        method="post">
<fieldset style="color:red" ">
<legend>Gebe sie den Namen des gewünschten Schüler ein!</legend>
<label for="vorname">Vorname</label>
<input id="vorname" name="vorname" placeholder="Peter"
</br>
<label for="nachname">Nachname</label>
<input id="nachname" name="nachname"
                                  placeholder="Micheuz" ><br/><br/>
<input type="submit" value="Los">
</fieldset>
</form> 

Diese Form generiert 2 Eingabefelder und einem Button, welcher beim Klick die PHP-Seite schueler.php öffnet.
Vor- und Nachname werden dann der Seite übergeben.

Mit diesen Codezeilen, übernimmt man Vor und Nachname und weißt ihnen variablen zu:

if (isset($_POST['vorname'])){
$vorname = $db->real_escape_string($_POST['vorname']);
}if (isset($_POST['nachname'])){
$nachname = $db->real_escape_string($_POST['nachname']);
}

 Anschließend wird wie oben wieder eine Datenbankverbindung aufgebaut und folgende Abfrage abgeschickt:

 $abfrageVornameNachname = "select s.s_id as sid, s.s_vn as vorname, s.s_name as nachname, s.s_sex as geschlecht ,k.k_klasse as klasse, k.k_schuljahr AS schuljahr
from schueler s, schueler_klasse sk, klassen k where s.s_id=sk.s_id and sk.k_id=k.k_id and s_name like '%$nachname%' and s_vn like '%$vorname%'
order by k.k_schuljahr";

Die Ausgabe sollte dann so aussehen, wetten?
Probieren Sie es aus!

 

 Hier noch ein paar Beispielabfragen, welche auch verwendet worden sind:

 Geburtstagskinder ausgeben:

 $tag = date ("d");
$monat = date ("m");                            

$abfrageGeburtstag= "select distinct s.s_vn as vorname, s.s_name as nachname, s.s_gebdat as geburtstag

from schueler s, schueler_klasse sk, klassen k where s.s_id=sk.s_id and sk.k_id=k.k_id and s.s_gebdat like '%-$monat-$tag'

order by k.k_schuljahr";

Alle Klassen mit Ihren Schülerzahlen ausgeben:
Select k.k_klasse as klasse, k.k_schuljahr as schuljahr, count(s.s_name) AS anzahl
from schueler s, schueler_klasse sk, klassen k where s.s_id=sk.s_id and sk.k_id=k.k_id group by k.k_id
order by k.k_schuljahr, k.k_klasse";

 Jahrgangsinformationen ausgeben:

Eingabe: Jahr, Klasse

Ausgabe: Vorname, Nachname, Klasse, Jahr

 Select  s.s_vn as vorname, s.s_name as nachname, s.s_sex as geschlecht ,s.s_gebdat as Geburtsdatum
from schueler s, schueler_klasse sk, klassen k where s.s_id=sk.s_id and sk.k_id=k.k_id and k_klasse = '$klasse' and k_schuljahr = '$schuljahr'
order by s.s_name

 Mitschüler finden:

 Eingabe: Schülervorname, Nachname

Ausgabe: Schülervorname, Nachname, Klasse Jahrgang, Geschlecht

select s_name as nachname, s_vn as vorname, k_klasse as klasse , k_schuljahr as schuljahr
from schueler s, schueler_klasse sk, klassen k where s.s_id=sk.s_id and sk.k_id=k.k_id and sk.k_id
       in (Select k_id from schueler a, schueler_klasse b  where a.s_id = b.s_id and s_vn = '$vorname' and s_name = '$nachname')
order by k_schuljahr, k_klasse, s_name

Seite
Menü
News
Seite
Menü
News

Powered by CMSimple | Template by CMSimple | Login