1. Dashboard
  2. Artikel
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. HTML - Webmaster Forum
  2. Programmierung - Entwickler Forum
  3. PHP Forum - Apache - CGI - Perl - JavaScript und Co.

Website mit MySQL

  • sero79
  • 16. November 2008 um 21:11
  • sero79
    Schüler
    Beiträge
    71
    • 16. November 2008 um 21:11
    • #1

    Hallo,

    hier ist mein erster Versuch einer Website mit MySQL.
    Der komplette Inhalt für diese html wird aus der DB bezogen. Die Abfrage erfolgt über einen Query String: bei Eingabe von

    meineWebsite.php?wahl=1

    wird der Inhalt für den 1. Projekteintrag abgefargt und angezeigt. wahl=2 ergibt die Abfarge für den 2. Datensatz usw.
    Ich habe dafür folgende if Schleife verwendet:

    PHP
    if ($_GET['wahl'] == $row['nummer'])


    Soweit funktioniert es ganz gut. Seht ihr Bedenken in dieser Umsetzung oder ist das so ok?
    Wenn man nur meineWebsite.php aufruft, wird nichts angezeit. Es wäre gut, wenn hier eine Meldung kommen würde.

    HTML
    <html>
      <head>
         <title>Projekte</title>
      </head>
      <body >
        <center>
            <h2>+++ Projekte +++</h2>
        </center>
     
     <?php
     
     while($row = mysql_fetch_assoc($Ergebnis))
     {
     
      if ($_GET['wahl'] == $row['nummer']) 
      {
      echo "ID:" . $row['id']; //Kontrolle
     ?>  
     
        <table align="center" width="80%" border="1" bordercolordark="1"  cellpadding="0" cellspacing="2">
         <tr>
      <td colspan="2" >&Uuml;berschrift:<br> <h1><?php echo $row['name']; ?></h1></td>
     </tr>
     <tr>
      <td>Kategorie:<br> <?php include $row['gruppe']; ?></td>
      <td>Projektnummer (sortiert nach Projektnummer):<br> <?php echo $row['nummer']; ?></td>
         </tr>
         <tr>
          <td>Bild:<br>
       <img src="img/<?php echo $row['bild']; ?>" alt="" border="0" width="100" > 
       </td>
          <td>Textteil:<br><?php echo $row['text']; ?></td>
         </tr>
        </table>
     
     <?php  
      }
     }
     ?>
     
      </body>
    </html>
    Alles anzeigen


    PHP
    <?php
     include 'function.php';
     
     $nummer   = $_POST['nummer'];
     $name    = $_POST['name'];
     $gruppe   = $_POST['gruppe'];
     $text    = $_POST['text'];
     $bild    = $_POST['bild'];
     $Ergebnis = AbfrageProjekt( $id, $nummer, $name, $gruppe, $text, $bild ); 
     include "Test-AusgabeDB.html";
     
    //--------------------------------------------------------------------------- 
    function AbfrageProjekt( $id, $nummer, $name, $gruppe, $text, $bild )
    {
     $Verbindung = VerbindungHerstellen(); 
     
     $Abfrage = "SELECT id, nummer, name, gruppe, text, bild FROM links ORDER BY nummer";
     $Ergebnis = mysql_query($Abfrage, $Verbindung);
     
     return $Ergebnis;
    }
     
    ?>
    Alles anzeigen



    Danke.
    Seb

  • Bandit
    Gast
    • 16. November 2008 um 21:18
    • #2

    Wenn du bei der Abfrage eine Bedingung einbaust, kannst du dir die Schleife schenken. Und wozu übergibst du der Funktion Variablen, die du dann doch nicht nutzt?

    Nachtrag: http://www.if-schleife.de/

    Einmal editiert, zuletzt von bandit600 (16. November 2008 um 21:27)

  • sero79
    Schüler
    Beiträge
    71
    • 17. November 2008 um 10:18
    • #3

    Du hast recht, die Variablen brauche ich in der Funktion nicht.
    Wie sollte das mit der Bedingung aussehen?
    Bedingung hier festlegen:

    PHP
    $Abfrage = "SELECT id, nummer, name, gruppe, text, bild FROM links";



    Meinst du sowas wie

    PHP
    WHERE nummer =  $_GET['wahl']


    Leider funktioniert das nicht. Bekomme ich noch ein Tip?

  • Bandit
    Gast
    • 17. November 2008 um 10:23
    • #4
    Zitat

    Leider funktioniert das nicht.


    Das ist eine denkbar schlechte Problembeschreibung!

    Was auch noch auffällt, du stellst die Verbinung zum MySQL-Server in einer Funktion her, das ist schlecht. Wird diese Funktion mehrfach in einem Script gebraucht, wurde immer wieder ein Connect stattfinden. In deinem Fall wird die Funktion zwar nur einmal aufgerufen, aber man sollte sich solche Dinge erst garnicht angewöhnen.

  • sero79
    Schüler
    Beiträge
    71
    • 17. November 2008 um 10:59
    • #5

    Es liegt natürlich an der Syntax:

    Zitat

    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\myStaff\Datenbank-Test\Test-meineDB.php on line 20



    Meinst du diese Funktion hier:

    PHP
    VerbindungHerstellen();


    Warum ist das denn so schlecht? Ich habe es eigentlich im Kurs so gelernt.

  • Bandit
    Gast
    • 17. November 2008 um 11:03
    • #6
    Zitat von sero79

    Es liegt natürlich an der Syntax


    Die du uns aber leider verschweigst

    Zitat von sero79

    Ich habe es eigentlich im Kurs so gelernt.


    Das ist der Kurs schlecht. Wie schon erwähnt, in diesem Falle ist das nicht so dramatisch, weil die Funktion AbfrageProjekt nur einmal aufgerufen wird. Jetzt stelle dir aber eine Funktion vor, die mehrfach in einem Script aufgerufen wird und du hast da VerbindungHerstellen(); drin. Das ist doch dann Käse, oder?

  • sero79
    Schüler
    Beiträge
    71
    • 17. November 2008 um 11:26
    • #7

    Das ist der verschwiegene Code:

    PHP
    $Abfrage = "SELECT id, nummer, name, gruppe, text, bild FROM links WHERE nummer = $_GET['wahl']";



    Sollte anstatt VerbindungHerstellen() besser das in der Abfrage Funktion AbfrageProjekt ():

    PHP
    $Servername  = 'localhost';
     $Benutzername  = '';
     $Passwort   = '';
     
     $Verbindung = mysql_connect ( $Servername, $Benutzername, $Passwort )
        or die ('Keine Verbindung möglich. Benutzername oder Passwort sind falsch.' . mysql_error() );
     
     $AuswahlDB = 'homepage';
     mysql_select_db( $AuswahlDB )
        or die ('Die Datenbank existiert nicht.' . mysql_error() );



    Aber das wäre doch das gleiche in grün. Du meinst ich sollte die ganze AbfrageProjekt () weglassen, oder?

  • Bandit
    Gast
    • 17. November 2008 um 11:42
    • #8
    PHP
    $Abfrage = "SELECT id, nummer, name, gruppe, text, bild FROM links WHERE nummer = " . mysql_real_escape_string($_GET['wahl']);


    Ich würde es (wenn überhaupt) so machen:

    PHP
    $con = VerbindungHerstellen();
    
    
       $result = AbfrageProjekt($con);

    Und noch ein Tipp: Schreibe immer

    PHP
    ... = mysql_query (...) or die ("MySQL-Error: " . mysql_error());

    Auch sehr hilfreich während der Entwicklung eines Scriptes sind diese beiden Zeilen am Anfang:

    PHP
    error_reporting(E_ALL);
    ini_set("display_errors", true);
  • sero79
    Schüler
    Beiträge
    71
    • 17. November 2008 um 12:13
    • #9

    Vielen Dank,

    die GET Abfrage funktioniert jetzt aber mit der Funktion gibt es noch Probleme. Ich habe mal das so umgeschrieben:

    PHP
    <?php
     
     include 'function.php';
     
     $nummer   = $_POST['nummer'];
     $name    = $_POST['name'];
     $gruppe   = $_POST['gruppe'];
     $text    = $_POST['text'];
     $bild    = $_POST['bild'];
     $Ergebnis = AbfrageProjekt( $id, $nummer, $name, $gruppe, $text, $bild ); 
     include "Test-AusgabeDB.html";
     
    //--------------------------------------------------------------------------- 
     error_reporting(E_ALL);
     ini_set("display_errors", true); 
     
     
     $con = VerbindungHerstellen();
     $Ergebnis = AbfrageProjekt($con); 
     
    function AbfrageProjekt($con)
    {
     
     $Abfrage = "SELECT id, nummer, name, gruppe, text, bild FROM links WHERE nummer = " . $_GET['wahl'];
     $Ergebnis = mysql_query($Abfrage, $con)
      or die ("MySQL-Error: " . mysql_error() );
     
     return $Ergebnis;
    }
     
    ?>
    Alles anzeigen



    Fehlermeldung:

    Zitat

    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\myStaff\Datenbank-Test\Test-meineDB.php on line 27
    MySQL-Error:


    Line 27 ist das hier:

    PHP
    $Ergebnis = mysql_query($Abfrage, $con)



    Was mache ich falsch?

  • Bandit
    Gast
    • 17. November 2008 um 12:16
    • #10

    Entweder geht der connect in die Hose oder dein VerbindungHerstellen() liefert nicht die Resource-ID.

  • Bandit
    Gast
    • 17. November 2008 um 12:34
    • #11

    Ungetestet:

    PHP
    <?php
      //-------------------------------------------
      //
      //  connect.inc.php
      //
      //-------------------------------------------
    
    
      $dbServer   = "ServerName";
      $dbUser     = "Username";
      $dbPassword = "passwort";
      $dbDatabase = "DatenbankName";
    
      $dbCon = @mysql_connect($dbServer, $dbUser, $dbPassword)
                   or die ("Connection failed");
    
      @mysql_select_db($dbDatabase)
                   or die ("Database not exist");
    ?>
    Alles anzeigen
    PHP
    <?php
      //-------------------------------------------
      //
      //  function.inc.php
      //
      //-------------------------------------------
    
    
      function abfrage($query, $con)
      {
     
         $result = mysql_query($result, $con)
            or die ("MySQL-Error: " . mysql_error() );
     
         return $result;
      }
    ?>
    Alles anzeigen
    PHP
    <?php
      //-------------------------------------------
      //
      //  Test-AusgabeDB.html
      //
      //-------------------------------------------
    ?>
    <html>
      <head>
         <title>Projekte</title>
      </head>
      <body >
        <center>
            <h2>+++ Projekte +++</h2>
        </center>
     
    <?php
       while($row = mysql_fetch_assoc($result))
       {
         echo '<table align="center" width="80%" border="1" bordercolordark="1"  cellpadding="0" cellspacing="2">
                 <tr>
                  <td colspan="2" >&Uuml;berschrift:<br> <h1>' . $row['name'] . '</h1></td>
                 </tr>
                 <tr>
                  <td>Kategorie:<br>' . $row['gruppe'] . '</td>
                  <td>Projektnummer (sortiert nach Projektnummer):<br>' . $row['nummer'] . '</td>
                 </tr>
                 <tr>
                  <td>Bild:<br>
                   <img src="img/' . $row['bild']. '" alt="" border="0" width="100" > 
                  </td>
                  <td>Textteil:<br>' . $row['text'] . '</td>
                </tr>
               </table>' . "\n";
     
       }
    ?>
      </body>
    </html>
    Alles anzeigen
    PHP
    <?php
    
    
      error_reporting(E_ALL);
      ini_set("display_errors", true);  
    
      if (isset($_GET['wahl']))
      {  
         include ("connect.inc.php");
     
         include ("function.inc.php");
    
    
         $query = "SELECT 
                     id, 
                     nummer, 
                     name, 
                     gruppe, 
                     text, 
                     bild 
                   FROM 
                     links 
                   WHERE 
                     nummer = " . mysql_real_escape_string($_GET['wahl']);
    
         $result = abfrage($query, $dbCon);
    
         if (mysql_num_rows($result))
         {
            include "Test-AusgabeDB.html";  
         }
      }
      else
        echo "Kein Parameter vorhanden";
    ?>
    Alles anzeigen

    Einmal editiert, zuletzt von bandit600 (17. November 2008 um 12:37)

  • sero79
    Schüler
    Beiträge
    71
    • 17. November 2008 um 14:07
    • #12

    Danke, es funktioniert jetzt. Ich hatte bloß eine Variable falsch benannt in meiner Verbindung Herstellen()
    So sieht der Code jetzt aus:

    PHP
    <?php
     
     include 'function.php';
     error_reporting(E_ALL);
     ini_set("display_errors", true); 
     
     
     $Verbindung = VerbindungHerstellen();
     
     $Ergebnis = AbfrageProjekt($Verbindung);
     
    //--------------------------------------------------------------------------- 
    function AbfrageProjekt($Verbindung)
    { 
     $Abfrage = "SELECT id, nummer, name, gruppe, text, bild FROM links WHERE nummer = " . mysql_real_escape_string($_GET['wahl']);
     $Ergebnis = mysql_query($Abfrage, $Verbindung)
      or die ("MySQL-Error: " . mysql_error() );
     
     return $Ergebnis;
    }
    include "Test-AusgabeDB.html";
     
    ?>
    Alles anzeigen



    In dem du $Verbindung an die Funktion AbfrageProjekt() übergibts, verbindet sich die Funktion nur einmal, bzw. ist beriets verbunden. Ist das so korrekt?
    Trifft das auch für weitere Funktionen, wie z.B. EintragProjekt(), wo ich über ein Formular Enträge in die DB machen kann, zu.

  • sero79
    Schüler
    Beiträge
    71
    • 17. November 2008 um 15:58
    • #13

    Danke für deine professionelle Hilfe. Eine kurze Frage habe ich aber noch, wozu verwendest du

    PHP
    mysql_num_rows

    .

  • pApAnoAh
    Schüler
    Reaktionen
    1
    Beiträge
    81
    • 17. November 2008 um 16:01
    • #14
    Zitat von sero79

    Danke, es funktioniert jetzt. Ich hatte bloß eine Variable falsch benannt in meiner Verbindung Herstellen()
    So sieht der Code jetzt aus:

    PHP
    <?php
     
     include 'function.php';
     error_reporting(E_ALL);
     ini_set("display_errors", true); 
     
     
     $Verbindung = VerbindungHerstellen();
     
     $Ergebnis = AbfrageProjekt($Verbindung);
     
    //--------------------------------------------------------------------------- 
    function AbfrageProjekt($Verbindung)
    { 
     $Abfrage = "SELECT id, nummer, name, gruppe, text, bild FROM links WHERE nummer = " . mysql_real_escape_string($_GET['wahl']);
     $Ergebnis = mysql_query($Abfrage, $Verbindung)
      or die ("MySQL-Error: " . mysql_error() );
     
     return $Ergebnis;
    }
    include "Test-AusgabeDB.html";
     
    ?>
    Alles anzeigen

    In dem du $Verbindung an die Funktion AbfrageProjekt() übergibts, verbindet sich die Funktion nur einmal, bzw. ist beriets verbunden. Ist das so korrekt?
    Trifft das auch für weitere Funktionen, wie z.B. EintragProjekt(), wo ich über ein Formular Enträge in die DB machen kann, zu.

    hmm... Hier z.B.

    Der frühe Vogel fängt den Wurm,
    aber die zweite Maus bekommt den Käse.

  • Bandit
    Gast
    • 17. November 2008 um 16:01
    • #15

    Gegenfrage: was macht mysql_num_rows? ;) Was soll man ausgeben, wenn es keine Treffer gibt?

    pApAnoAh
    Was soll uns der Link sagen?

  • pApAnoAh
    Schüler
    Reaktionen
    1
    Beiträge
    81
    • 17. November 2008 um 16:05
    • #16
    Zitat von bandit600

    Gegenfrage: was macht mysql_num_rows? ;) Was soll man ausgeben, wenn es keine Treffer gibt?

    Du darfst auch spicken, wir sind ja nicht in einer Klausur/Arbeit oder was auch immer. Ich will spicken

    Zitat von bandit600


    pApAnoAh
    Was soll uns der Link sagen?

    Zitat


    In dem du $Verbindung an die Funktion AbfrageProjekt() übergibts, verbindet sich die Funktion nur einmal, bzw. ist beriets verbunden. Ist das so korrekt?

    Es soll uns sagen, dass es Lokale und globale Variablen gibt und das, wenn man sie nicht entweder via Parameter an die Funktion übergibt oder als globale definiert, man kein Zugriff auf sie hat.

    Der frühe Vogel fängt den Wurm,
    aber die zweite Maus bekommt den Käse.

    3 Mal editiert, zuletzt von pApAnoAh (17. November 2008 um 16:12)

  • Bandit
    Gast
    • 17. November 2008 um 16:26
    • #17

    Wobei gesagt werden sollte, dass "als globale definiert" schlechter Stil ist und das "global" bei einer Fehlersuche das Leben unnötig schwer macht. ;)

  • The User
    Forum Guru
    Beiträge
    4.044
    • 17. November 2008 um 17:27
    • #18

    Danke für den Link.
    Das nervt mich auch öfters.

    Freiheit bedeutet mehr.

    "Mir ist die gefährliche Freiheit lieber als eine ruhige Knechtschaft."
    (Jean Jacques Rousseau)
    Mein Blog zum Programmieren, GNU/Linux etc.
    Free Chelsea Manning!
    Stolzer Nutzer von KDE, openSUSE und Qt.

  • sero79
    Schüler
    Beiträge
    71
    • 17. November 2008 um 17:46
    • #19

    mysql_num_rows: hat die Abfrage Treffer ja oder nein. Bei ja werden die Treffer angezeigt und bei nein kommt z.B. echo "keine Treffer gefunden";

    hab ich's erraten!

    Einmal editiert, zuletzt von sero79 (17. November 2008 um 18:19)

  • Bandit
    Gast
    • 17. November 2008 um 18:18
    • #20

    Man kann das auch für die Ausgabe der Anzahl Treffer nutzen.

Tags

  • www
  • link
  • server
  • http
  • links
  • text
  • funktion
  • bild
  • php
  • website
  • schleife
  • script
  • mysql
  • variable
  • string
  • schenken
  • select
  • connect
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
Zitat speichern