• 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.




    Danke.
    Seb

  • 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)

  • 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?

  • 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.

  • 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.

  • Es liegt natürlich an der Syntax


    Die du uns aber leider verschweigst

    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?

  • 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?

  • 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);
  • Vielen Dank,

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



    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?

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

  • Ungetestet:

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

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



    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.

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

    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.

  • 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


    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)

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

  • 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)