MySql Datenbank

  • Die AnlagenNr sollte im Jahr nur ein mal vorkommen. Wenn dies jedoch mehrmals vorkommt, soll nur 1 mal der Datensatz erscheinen.


    Währe es möglich die 2 Tabelle auch noch zu filtern?
    Also dijenige mit der ProjektBezeichnung noch einen Filter einbauen auf die Spalte "erhalten" ?


    Deine Lösung funktioniert.

  • Naja, für solche Sachen nutzt man 0 und 1.
    Wenn es aber keine Massen an Daten in den Tabellen gibt (hunterttausende oder mio), dann kann man das auch mit ja/nein machen.
    Der Sinn dahinter ist, dann man nicht zB 3 mio mal "ja" in der Tabelle hat.

    Anderes Bsp wäre ein Ort. 1 mio Einträge haben das Feld "ort" mit "Berlin" belegt.
    Damit nicht 1 mio VARCHAR in den Tabellen auftauchen, kann man eine Detailtabelle anlegen.
    In der Detailtabelle steht dann zB "1" für "Berlin". Andere Tabellen können dann einen einfachen Zahlenwert nutzen.


    Aber das könn´ wir nicht komplett ausführen :D
    Kannst ja bei Gelegenheit hier rein sehen: http://www.php-kurs.com/daten-…rieren-fuer-datenbank.htm


    zum Thema:
    Das schöne an HAVING ist, das man noch "Platz für WHERE" hat:

  • Das mit den Tabellen (1,2,3, = berlin,wien,amsterdam) habe ich schon realisiert :) (Dies vor allem wenn es eine Allgemeine Änderung gibt das ich diese nur 1 mal eintragen muss :)


    Probleme habe ich hauptsächlich nur bei komplexen abfragen wie z.b. meine nächste xD meinen Suchstring:

    SQL
    //sql befehl
    $sql = 'SELECT * 
    		FROM tblAnlagenNr
    		WHERE AnlagenNr LIKE \'%'.$_POST['suchstring'].'%\' 
    		OR ProjektBezeichnung LIKE \'%'.$_POST['suchstring'].'%\'';


    Hier müsste noch

    SQL
    WHERE `Autr-Erh` = '1' AND `revidiert` = 'Nein' AND `aktiv` = 'Ja'";


    Hinein, alles auf der Tabelle "tblAnlagenNr"


    Edit:
    Es soll noch neben dem Suchfeld eine Checkbox geben ob z.b. "autr-Erh" beachtet werden soll oder nicht. :s

  • Keine Nutzerdaten in die Query! =)
    Du nutzt doch glaub ich mysqli. Dann nutz die Platzhalter ? um die POSTs einzufügen.
    Mit dem WHERE: das kannst Du wir in PHP schreiben:

    Code
    php: if( (this or that) and those and any )
    sql:
    WHERE (this or that) and those and any


    SQL
    SELECT * 
    FROM `tblAnlagenNr`
    WHERE 
    	(`AnlagenNr` LIKE ? OR `ProjektBezeichnung` LIKE ?) 
    	AND `Autr-Erh` = '1' 
    	AND `revidiert` = 'Nein' 
    	AND `aktiv` = 'Ja'


    die % musst Du noch über die parameter mitgeben.
    Also schickst Du nicht $_POST['suchstring'] als Parameter,
    sondern

    PHP
    ...
    $suchstr = '%' . $_POST['suchstring'] . '%'; 
    ...->bind_param("s", $suchstr)



    zu EDIT:
    dann halt:

    SQL
    AND `Autr-Erh` = ?


    und in php

    PHP
    ...
    $autr_erh = (int)(isset($_POST['Autr-Erh'])); 
    // (int) bewirkt, dass der Wert in eine Ganzzahl (integer) umgewandelt wird. 
    // (isset(...)) gibt true oder false zurück. also kann nur 0 oder 1 rauskommen
    ...->bind_param("i", $autr_erh) // "i" für int
  • Das raffe ich jetzt nicht gant :s :wacko:



    Gibt nichts aus :s

  • Du hast ja immernoch
    $db->error()
    anstatt
    $db->error
    =)
    und den Fehler bei Zeile 12

    PHP
    echo"<table id=" *hier bricht der php string ab * myTable" class="tablesorter" rules="all">";


    entweder:

    PHP
    echo"<table id="myTable" class="tablesorter" rules="all">";


    EDIT: hier im Forum funktionieren keine Backslashes.
    Es sollte also ein maskiertes " mit einem Backslash zu sehen sein
    oder

    PHP
    echo"<table id='myTable' class='tablesorter' rules='all'>";


    Und das hier sieht "komisch" aus:

    PHP
    $db->query ($sql)


    besser

    PHP
    $db->query($sql) // leerzeichen weg


    und Augaben (selbst wenn sie aus der db kommen) maskieren: htmlspecialchars()
    zB:

    HTML
    <td>' . htmlspecialchars($row["AnlagenNr"]) . '</td>


    Denn "reverse injection" (Danke Basii =) wollen wir nicht.
    Wie soll das gehen?
    Duch Unaufmerksamkeit gelangt ein String "<script>alert(1)</script>" in die db auf zB Spalte `ProjektBezeichnung`.
    Beim unmaskierten Ausgeben auf der Seite wird der Inhalt (das Script) bei dem Betrachter ausgeführt!


    Was geht denn jetzt eigtl nicht?
    "Gibt nichts aus :s" gerade gesehen =)


    Du hast ->bind_param("...", ...) vergessen

  • Sorry muss gestehen habe den error() noch nicht überall ausgemerzt... bin jetzt aber gerade dran :)


    Die Suche-Abfrage


    Gibt mir einen Fehler jedoch Funktioniert es nicht :)

  • PHP
    $suchstr = '%' . $_POST['suchstring'] . '%'; 
    ...->bind_param("s", $suchstr)


    nicht vergessen die Parameter zu übergeben.
    Und htmlspecialchars auch bei
    $row["AnlagenNr"]
    und
    $_POST['suchstring']


    also egtl IMMER. Es gibt nur wenige Ausnahmen, warum man einen String ohne Maskierung in HTML einbaut.

  • Ich glaub irgendewas stimmt nocht nicht 8o


    Es wird nichts gefunden :s :)

  • BIND PARAM ! :D

    PHP
    $suchstr = '%' . $_POST['suchstring'] . '%'; 
    ...->bind_param("s", $suchstr)


    Du musst doch die Parameter für die ? übergeben.


    EDIT ich seh grade, da ist ja nicht mal ein $stmt->execute()

  • Hier:

    SQL
    <td><a href="anlagen_details.php?navi=2&ida=' . htmlspecialchars($row["AnlagenNr"]) .'&sda='%' .  htmlspecialchars($_POST['suchstring'] . '%') .'">Ändern</td>


    habe ich doch noch einen Fehler mit ' und " nicht?


    Edit:


    Ich bin glaube ich zu müde xD


  • PHP
    // falsch
    echo '
    <td>
        <a href="anlagen_details.php?navi=2&ida=' . htmlspecialchars($row["AnlagenNr"]) .
            '&sda='%FEHLER' .  htmlspecialchars($_POST['suchstring'] . '%FEHLER') .'">
        Ändern
    </td> 
    ';


    PHP
    // richtig
    echo '
    <td>
        <a href="anlagen_details.php?navi=2&ida=' . htmlspecialchars($row["AnlagenNr"]) .
            '&sda=' . htmlspecialchars($_POST['suchstring']) . '">
        Ändern
    </td> 
    ';


    Was Du übrigens vorhast mit den % im HTML
    kann ein Endlos-Anhängen werden.

    Code
    &sda=%' .  htmlspecialchars($_POST['suchstring']) . '%


    Beim ersten Absenden des Formulars steckt (suchstring zB "Hallo")
    "%Hallo%"
    in $_POST['suchstring'].


    Beim Ausgeben hänst Du erneut 2 mal % an. Ergibt dann:
    "%%Hallo%%"
    und beim absenden .... usw.
    Also weg mit den %.


    Zwecks sql:
    Beispiel #2 : http://php.net/manual/de/mysql…t.prepared-statements.php

    PHP
    $mysqli = new mysqli("example.com", "user", "password", "database");
    // ... error checks
    $stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)");
    // ... error checks
    $stmt->bind_param("i", $id);
    // ... error checks
    $stmt->execute();
    // ... error checks
    // und jetzt kannst du die rows in der while "holen"
    while(...)
  • Es geht nicht mehr lange er-schisse ich mich xD


  • Mach langsam =)
    Wichtig ist ja vor allem, dass Du auch verstehst was Du machst/änderst.


    Ich schreibe mal in den Code mit Kommentaren:

  • Hab jetzt alles schön Angepasst:


    Dabei gibt er mir bei Zeile 10 den fehler:

    HTML
    syntax error, unexpected '$suchstr' (T_VARIABLE) in
  • Wat machste denn :D
    Guck Dir mal in Ruhe den Code an. Wenn "unexpected" error auftucht, ist meistens davor irgendwas vergessen worden oder zu viel =)


    BTW: welchen Editor nutzt Du? Der sollte Dir Solche Sachen eigl schon farblich anzeigen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!