Ankündigung

Einklappen
Keine Ankündigung bisher.

PLZ-Finder

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PLZ-Finder

    Hallo.

    Ich bin totaler Neuling. Habe ein Script erstellt, wo ich auf die Datenbank zugreifen kann und mir die Tabelle angezeigt wird.

    Kann mir jemand einen Tip geben, wie ich ein Fenster bekomme wo ich die Postleitzahl eingeben kann und mir dann die Postleitzahlen +-100 angezeigt werden. Kann ich durch einfache Änderungen das Design verändern?

    Diese Auswahl soll auf unserer Internetseite stehen und gesichert sein.
    Gibt es da vielleicht eine sichere Lösung, damit nicht jeder vollen Zugriff auf unsere Datenbank hat?

    Kann mir da jemand weiterhelfen?

    Anbei das Script:

    <html>
    <head>
    <title> Datenbank ausgeben!</title>
    </head>
    <body>

    <?php

    @mysql_connect("ORT DER DATENBANK", "BENUTZERNAME", "KENNWORT")
    or die ("Verbindung zu MySQL gescheitert!");


    @mysql_select_db("test")
    or die ("Datenbankzugriff gescheitert!");



    $res = mysql_query("SELECT name, strasse, plz, ort, telefon FROM kunde_plz order by plz");



    echo "<table border>";
    echo "<tr>";
    echo "<td><b>Name</b></td>";
    echo "<td><b>Strasse</b></td>";
    echo "<td><b>Postleitzahl</b></td>";
    echo "<td><b>Ort</b></td>";
    echo "<td><b>Telefonnummer</b></td>";
    echo "</tr>";

    while ($ds = mysql_fetch_object($res)){
    $name = $ds -> name;
    $strasse = $ds -> strasse;
    $plz = $ds -> plz;
    $ort = $ds -> ort;
    $telefon = $ds -> telefon;


    echo "<tr>";
    echo "<td>$name</td>";
    echo "<td>$strasse</td>";
    echo "<td>$plz</td>";
    echo "<td>$ort</td>";
    echo "<td>$telefon</td>";
    echo "</tr>";
    }
    echo "</table>";



    ?>
    </body>
    </html>


    Vielen Dank.
    Jamba1103


  • #2
    Willkommen im Forum. Bitte nacheditieren. Es gibt hier beim Posten einen Button, der PHP-Code schön macht bzw. nutze die BB-Tags.
    www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
    Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih

    Kommentar


    • #3
      Die verständliche lösung für Einsteiger:
      PHP-Code:
      if(is_int($_POST['plz']))
      {
      $plz1 mysql_real_escape_string($_POST['plz']-100); //plz -100 und fürs query vorbereitet
      $plz2 mysql_real_escape_string($_POST['plz']+100); //plz +100 und fürs query vorbereitet
      $res mysql_query("SELECT name, strasse, plz, ort, telefon FROM kunde_plz WHERE plz BETWEEN '".$plz1."' AND '".$plz2."' order by plz");
      //hier noch die Tabelle einfügen
      }
      else
      {
        echo 
      'eine Postleitzahl besteht aus Zahlen.';

      Ist nen bisschen doppelt-gemoppelt, weil man vorher abfragt, ob nur Zahlen eingegeben wurden. Also brauchst du eig mysql_real_escape_string() nicht mehr.
      War der Beitrag hilfreich? Dann Bedank dich mit einem klick auf .

      Kommentar


      • #4
        Zitat von Dreamwatcher Beitrag anzeigen
        Die verständliche lösung für Einsteiger:
        PHP-Code:
        if(is_int($_POST['plz']))
        {
        $plz1 mysql_real_escape_string($_POST['plz']-100); //plz -100 und fürs query vorbereitet
        $plz2 mysql_real_escape_string($_POST['plz']+100); //plz +100 und fürs query vorbereitet
        $res mysql_query("SELECT name, strasse, plz, ort, telefon FROM kunde_plz WHERE plz BETWEEN '".$plz1."' AND '".$plz2."' order by plz");
        //hier noch die Tabelle einfügen
        }
        else
        {
          echo 
        'eine Postleitzahl besteht aus Zahlen.';

        Ist nen bisschen doppelt-gemoppelt, weil man vorher abfragt, ob nur Zahlen eingegeben wurden. Also brauchst du eig mysql_real_escape_string() nicht mehr.
        Das wird so warscheinlich nicht funktionieren weil Postleizzahlen im Regelfall als String gespeichert sind weil dir sonst die führenden Nullen flöten gehen.

        Daher wäre ein Cast auf Integer im Query noch nötig, da für den Vergleich die führenden Nullen egal sind.

        Allerdings frage ich mich ob das ganze Vorhaben überhaupt sinnvoll ist.

        Denn z.B. 01571 wäre Riesa, 01475 Arnsdorf, ca. 80km Umkreis.
        01147 ist Dresden, 01241 ist auch noch Dresden was keine 80km Umkreis sind.

        Ich wüsste zumindest nicht wie man die Ergebnisse sinnvoll auswerten könnte.

        PHP-Code:
        $res mysql_query("SELECT name, strasse, plz, ort, telefon FROM kunde_plz WHERE CAST(plz AS UNSIGNED) BETWEEN '".$plz1."' AND '".$plz2."' order by plz"); 
        "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

        Kommentar


        • #5
          Habe das Script umgebaut und funktioniert leider nicht.
          Kann es vielleicht sein, das ich ne falsche Stelle ersetzt habe?
          Wo genau muss ich das Script umbauen.

          Die PLZ ist in der Datenbank als varchar angegeben, damit PLZ:00130 nicht nur 130 ausgibt.

          Ich habe noch ein weiteres Problem, meine Internetseite liegt bei der Telekom und meine Datenbank ist hier intern. Kann mir intern ohne Probleme die Tabelle auswerfen lassen, aber bekomme von außen aber keine Verbindung zur Datenbank.

          Danke vielmals.

          Kommentar


          • #6
            Zitat von Jamba1103 Beitrag anzeigen
            Ich habe noch ein weiteres Problem, meine Internetseite liegt bei der Telekom und meine Datenbank ist hier intern. Kann mir intern ohne Probleme die Tabelle auswerfen lassen, aber bekomme von außen aber keine Verbindung zur Datenbank.
            Dann gehe bei den Netzwerk-Admins betteln, dass die dir sowas erlauben. Wundere dich aber nicht, wenn die dich mit einem "NÖ" einfach fortjagen oder wahlweise erst anbrüllen und dann fortjagen.
            www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
            Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih

            Kommentar


            • #7
              Bei den meisten Hostern kannst du die Datenbank nicht von externen Servern ansprechen.
              D.h. das Script muss auch auf dem gleichen Server wie die Datenbank ausgeführt werden.

              Poste mal deinen Code, wie er jetzt ist, damit wir sehen woran es liegt.

              @Dark_Guardian: Stimmt ich hatte vergessen, dass die Postleitzahlen mit nullen aufgefüllt werden müssen.

              Aber wieso nicht als int speichern und die Postleitzahlen auf 5 zahlen wieder erweitern?

              PHP-Code:
              if(strlen($_POST['plz']) < 5)
              {
               
              $nullen null;
                for(
              $i=0;$i5-strlen($_POST['plz']);$++)
               {
                 
              $nullen .= '0';
               }
              $plz $nullen.$_POST['plz'];

              naja gut iwie doch umständlich :P
              War der Beitrag hilfreich? Dann Bedank dich mit einem klick auf .

              Kommentar


              • #8
                Zitat von Dreamwatcher Beitrag anzeigen
                PHP-Code:
                if(strlen($_POST['plz']) < 5)
                {
                 
                $nullen null;
                  for(
                $i=0;$i5-strlen($_POST['plz']);$++)
                 {
                   
                $nullen .= '0';
                 }
                $plz $nullen.$_POST['plz'];

                naja gut iwie doch umständlich :P
                Wenn du das machen wolltest, geht das auch eine ganze Spur einfacher:
                PHP-Code:
                $plz str_pad($_POST['plz'], 5'0'STR_PAD_LEFT); 
                Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
                Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)

                Kommentar


                • #9
                  Zitat von Dreamwatcher Beitrag anzeigen
                  @Dark_Guardian: Stimmt ich hatte vergessen, dass die Postleitzahlen mit nullen aufgefüllt werden müssen.

                  Aber wieso nicht als int speichern und die Postleitzahlen auf 5 zahlen wieder erweitern?
                  - Jede Eingabe aus einem Formular die auf das PLZ Feld angewendet wird muss gecastet werden
                  - Werte aus konventionellen PLZ-Datenbanken die als Vergleich dienen sollen müssen gecastet werden (bei größeren Mengen an Daten hast du dann auch shconmal eine WHERE CAST(plz AS UNSIGNED) IN (...200 von PHP gecastete Postleitzahlen...) Klausel)
                  - Bei der Ausgabe müssen alle Ergebnisse mit Nullen versehen werden
                  - ausländische Postleitzahlen mit Buchstaben funktionieren nicht mehr

                  Im Prinzip castest du dich dumm und dämlich und das nur um das Feld als Integer haben zu wollen?

                  Ich habe noch ein weiteres Problem, meine Internetseite liegt bei der Telekom und meine Datenbank ist hier intern. Kann mir intern ohne Probleme die Tabelle auswerfen lassen, aber bekomme von außen aber keine Verbindung zur Datenbank.
                  Was heißt "hier intern"? Bei dir zu Hause? Bei dir in der Firma? Der MySQL Server muss freigegeben werden sodass von außen (deine Website) drauf zugegriffen werden darf. In einer Firma wir dir das wohl nicht erlaubt werden und von dir zu Hause aus kannst es direkt vergessen weil sowohl Rechner als auch Internetleitung wohl nicht als Datenbankserver geeignet sein werden.

                  Warum beförderst du die Datenbank nicht auf deinen Webspace? Sehe ich sehr selten das ein Webspace PHP hat aber kein MySql...
                  "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                  Kommentar


                  • #10
                    if(is_int($_POST['plz']))
                    Das ist niemals true. Alle Elemente in $_POST sind Zeichenketten.

                    Was soll denn diese +-100 bezwecken?
                    :
                    if ($var != 0) {
                      
                    $var 0;

                    Kommentar


                    • #11
                      Zitat von Dark Guardian Beitrag anzeigen
                      Im Prinzip castest du dich dumm und dämlich und das nur um das Feld als Integer haben zu wollen?
                      Ja da hast du Recht, vielleicht hatte ich mir in diesem Fall auch wenig Gedanken darüber gemacht.

                      Zitat von Wolla Beitrag anzeigen
                      Das ist niemals true. Alle Elemente in $_POST sind Zeichenketten.
                      Damit hatte ich soweit ich mich erinnern kann noch nie Probleme, aber wenn das nicht die optimale Variante ist werde ich mich in das Thema nochmal einlesen. Lücken sind nie gut.
                      Zitat von Wolla Beitrag anzeigen
                      Was soll denn diese +-100 bezwecken?
                      Erreiche ich dadurch nicht, dass er von dem Wert, der im POST gespeichert ist, 100 subtrahiert / addiert?

                      Man da bin ich ja in ein Fettnäpchen gesprungen
                      War der Beitrag hilfreich? Dann Bedank dich mit einem klick auf .

                      Kommentar


                      • #12
                        Solange das Feld für die Postleitzahl in der Datenbank ein String ist (was es sein sollte!), kann man in den Queries auch "kleiner", "größer" und "gleich" verwenden...

                        Selektiert alle Datensätze im PLZ Bereich 5****
                        Code:
                        SELECT name, strasse, plz, ort, telefon FROM kunde_plz WHERE plz >= '50000' AND plz <= '59999'
                        Da brauchts keine Umkonvertierung in Zahlen...
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          Meine Frage zielte auf den Sinn ab. Wenn du aus einer PLZ = 50667 den Bereich 50567/50767 berechnet hast, was hast du dann erreicht?
                          :
                          if ($var != 0) {
                            
                          $var 0;

                          Kommentar


                          • #14
                            Zitat von lstegelitz Beitrag anzeigen
                            Solange das Feld für die Postleitzahl in der Datenbank ein String ist (was es sein sollte!), kann man in den Queries auch "kleiner", "größer" und "gleich" verwenden...

                            Selektiert alle Datensätze im PLZ Bereich 5****
                            Code:
                            SELECT name, strasse, plz, ort, telefon FROM kunde_plz WHERE plz >= '50000' AND plz <= '59999'
                            Da brauchts keine Umkonvertierung in Zahlen...
                            Das wusst ich auch noch nicht das MySQL diese Operationen auf Strings anwenden kann.... wie sieht das denn aus wenn da Buchstaben mit rein kommen bzw. auf welcher Basis werden die Vergleiche durchgeführt?
                            "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                            Kommentar


                            • #15
                              allphabetisch(A > B > C > D )
                              apt-get install npm -> npm install -g bower -> bower install <package> YOLO

                              Kommentar

                              Lädt...
                              X