Ankündigung

Einklappen
Keine Ankündigung bisher.

Kleine Community (mehrere PHP Fragen)

Einklappen

Neue Werbung 2019

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

  • Kleine Community (mehrere PHP Fragen)

    Morgen,

    ich würde gern eine kleine Community programmieren, wo sich User anmelden können und jeder ne Art Profil hat wo er Dinge in die DB schreiben kann.

    Als erstes würde ich gern das Thema Formulardaten bereinigen, prüfen und speichern angehen.

    Dazu würde ich gern ein paar Funktionen erstellen die gewissen Eingaben wie zum Beispiel:
    PLZ, Namen (Vor-,Nach-,Benutzername), Straße, Telefon, Fax, E-Mail, Texte

    bereinigen.

    Diese Funktionen würde ich in eine Datei packen (form_clean.php)

    Ok dann mal die ersten Funktionen die sicher nicht geeigenet, falsch oder verbessert werden müssen, für eure Tips bin ich dankbar

    PHP-Code:
    //POST Daten bereinigen

    function cleanForm() 

        if(
    get_magic_quotes_gpc())$_POST array_map('stripslashes',$_POST);
        
    $_POST array_map('trim',$_POST);



    //Prüfen ob es den Benutzernamen schon gibt

    function checkBenutzer($var)
    {
    if(
    mysql_result(mysql_query("SELECT COUNT(feldname) FROM tabelle WHERE feldname= '".mysql_real_escape_string($var)."'"),0)==1)
    {
    return 
    true;
    }
    else
    {
    return 
    false;
    }
    }


    //prüfen ob nur Zahlen eingeben wurden (hier nur maximal 3)

    function checkZahlen($var)
    {
     
    $erlaubt ='/^([0-9]{1,3})$/';
      if(
    preg_match($erlaubt,$var))
      {
      return 
    $var;
      }

    würden diese so ausreichen?

    so erstmal die 3...würde heute gegen abend mal ein formular hochladen wo man sämtliche eingaben checken kann...macht sich sicher besser als immer nur code so zusehen.

    Liebe Grüße Stephie

  • #2
    SELECT upper(COUNT(feldname))
    Was sol upper bewirken??

    Deine Funktion function checkZahlen($var) prüft nicht ob maximal 3 ziffern eingegeben wurden sondern ob der Wert in $var aus genau 3 Ziffern besteht.

    Die Funktion checkBenutzer($var) ist IMHO nicht prickelnd,
    a) gibt sie den eingabewert zurück und b) gibt sie wenn die Bedingung nicht erfolgreich war gar nichts zurück.
    Also solch eine Funktion sollte true oder false zurückgeben.

    Kommentar


    • #3
      hab es oben mal geändert.

      bei der checkBenutzer war das upper blödsinn, sorry aber ich muss ja was an die Abfrage übergeben also muss ja $var sein, oder?

      ich glaub das hab ich da jetzt net ganz verstanden.

      Kommentar


      • #4
        ist doch ganz einfach du übergibst $var als paramter, das ist ja auch richtig.
        Deine Funktion hat auch einen Rückgabe wert, aber eben nur im erfolgsfall, das funktioniert zwar grunsätzlich, aber nicht in allen Anwendungsfällen...
        besser ist im erfolgsfall return true; sonst return false;
        das ist dort eindeutig

        Kommentar


        • #5
          habs mal so geändert wie ich es jetzt verstanden habe

          Kommentar


          • #6
            Wenn möglich poste lieber relevante Codebstandteile neu, statt die Änderungen in die Ausgangsthreads zu editieren. Sonst wird der Thread irgendwie wertlos.

            Kommentar


            • #7
              ok wollte nur net da der dann ednlos lang wird.

              aber beim nächsten poste ich es neu, jetzt lass ich es erstmal noch oben

              Kommentar


              • #8
                So habe jetzt mal die obigen funktionen im einsatz zum testen

                Testseite

                bei namen gibt es -> test,scheffie,hallo,stephie,testtest

                da nix mehr zu den funktionen kam nehm ich mal an das man diese so verwenden kann und recht ok so sind

                werde demächst immer paar funktionen dazu machen...meld mich wieder

                Kommentar


                • #9
                  Hallo,

                  wenn du prüfst ob der Benutzername schon existiert würde ich dir raten
                  binary zu verwenden
                  PHP-Code:
                  $sql=" ... WHERE BINARY username='...' "
                  Ich habe die Erfahrung gemacht dass ohne binary USER==user==uSEr usw. gilt.
                  Deshalb halte es für sinnvoller das User und USer zwei verschiedene Nicks sein sollten.

                  Gruß

                  Kommentar


                  • #10
                    Das ist von der gewählten Collation abhängig. "ci" steht hier für case insensitive.

                    Kommentar


                    • #11
                      So hab mal wieder bissl was geändert...

                      meine test seite

                      http://scheffiestest.kilu.de/

                      zum prüfen ob es was in der db steht...mal hallo oder stephie eingeben...

                      hier die funktionen + verarbeitungen...


                      PHP-Code:
                      //Eingabe bereinigen
                      function cleanForm()

                       if(
                      get_magic_quotes_gpc())$_POST array_map('stripslashes',$_POST);
                       
                      $_POST array_map('trim',$_POST);


                      //Prüfen ob Checkbox aktiviert ist
                      function checkBox($var)
                      {
                       if(
                      $var <> "")
                       {
                       return 
                      $var;
                       }
                      }

                      //E-Mail auf Richtigkeit prüfen
                      function checkEmail($var
                      {
                          
                      $erlaubt '([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$/';
                          if(
                      preg_match($erlaubt,$var))
                          {
                          return 
                      $var;
                          }
                      }

                      //Telefonnummer auf Richtigkeit prüfen
                      function checkTelefon($var
                      {
                          
                      $Land '((\+[0-9]{2,4}( [0-9]+? | ?\([0-9]+?\) ?))';
                          
                      $Ort '|(\(0[0-9 ]+?\) ?)|(0[0-9]+? ?( |-|\/) ?))';
                          
                      $Nr '[0-9]+?[0-9 \/-]*[0-9]';
                          
                      $regEx '^'.$Land.$Ort.$Nr.'$';
                          if(
                      preg_match("/$regEx/",$var))
                          {
                          return 
                      $var;
                          }
                      }

                      //Prüfen ob z.B. ein Benutzername schon exitiert
                      function checkBenutzer($var,$verbindung)
                      {
                          if(
                      mysql_result(mysql_query("SELECT COUNT(feld) FROM tabelle WHERE feld = '".mysql_real_escape_string($var,$verbindung)."'"),0)==0)
                          {
                           return 
                      true;
                          }
                          else
                          {
                           return 
                      false;
                          }
                      }

                      //Prüfen ob nur Zahlen eingeben worden sind
                      function checkZahlen($var)
                      {
                          
                      $erlaubt ='/^([0-9]{1,25})$/';
                          if(
                      preg_match($erlaubt,$var))
                          {
                            return 
                      $var;
                          }
                      }

                      //Datum auf Richtigkeit prüfen
                      function checkDatum($var
                      {
                        
                      $erlaubt '((0?[1-9]|[1-2][0-9]|3[0-1])\.((0?[1-9]|1[0-2])\.?)(20)?[0-9]{2}$)';
                        if(
                      preg_match($erlaubt,$var))
                        {
                        return 
                      $var;
                        }
                      }


                      //Wenn Butten geklickt
                      if(isset($_POST["senden"]))
                      {

                      $meldung = array();
                      cleanForm();


                      if(!
                      checkBox($_POST['check']))
                      {
                       
                      $meldung[]="Checkbox wählen<br>";
                      }

                      if(!
                      checkEmail($_POST['mail']))
                      {
                       
                      $meldung[]="Email ist falsch<br>";
                      }

                      if(!
                      checkTelefon($_POST['telefon']))
                      {
                       
                      $meldung[]="Telfon ist falsch<br>";
                      }

                      if(!
                      checkBenutzer($_POST['db'],$verbindung))
                      {
                       
                      $meldung[]="Name steht bereits in der Datenbank<br>";
                      }

                      if(!
                      checkZahlen($_POST['zahlen']))
                      {
                       
                      $meldung[]="Bitte nur zahlen eingeben<br>";
                      }

                      if(!
                      checkDatum($_POST['datum']))
                      {
                       
                      $meldung[]="Datum fehlerhaft";
                      }


                      //Fehlerausgabe
                      foreach($meldung as $fehler)
                      {
                       echo 
                      $fehler.'';
                      }

                      }
                      //ENDE Button 
                      noch paar Fragen...will mich als nächstes (vorrausgesetzt das bis jetzt gemacht passt so ) an Textareas wagen und namen..welche Zeichen sollte man denn da zulassen...also bei textareaas auf jeden fall

                      Fragezeichen
                      Ausrufezeichen
                      Punkt
                      Komma
                      Klammern

                      Sprich doch so gut wie jedes Zeichen, oder?

                      Lieben Gruß Scheffie

                      Kommentar


                      • #12
                        Sprich doch so gut wie jedes Zeichen, oder?
                        Naja, schau Dir mal ne Zeichensatztabelle an.

                        Kommentar


                        • #13
                          Zitat von nikosch Beitrag anzeigen
                          Naja, schau Dir mal ne Zeichensatztabelle an.
                          Weiß im Moment ne was de meinst..sorry... was sagsten du zu den funktionen? wäre cool wenn de was sagen würdest... also würd mich freuen

                          Kommentar


                          • #14
                            Weiß im Moment ne was de meinst..sorry
                            Meinte nur: There are lot of other characters out there Du mußt Dich im Endeffekt auf irgendwas beschränken und den Mißbrauch dann verhindern. In Namen haben bspw. < > nix verloren, ' dagegen auf jeden Fall, . eventuell je nach Eingabeform ( Abkürzung Zweitname, Prof. - Titel etc.)...

                            erstes Statement:

                            - cleanForm() würde ich nie als Teil der Formularverarbeitung, sondern als grundlegende Aktion bei jedem Seitenaufruf sehen. Also den Code direkt auf der Indexseite notieren oder zumindest ein anderes globales Include verwenden.

                            - checkBox($var)
                            wird vermutlich ne Notice produzieren, weil für nicht gewählte CBs kein entspr. $_POST Wert erzeugt wird. Siehe Wiki, Formularverarbeitung.

                            - Da selbe gilt grundsätzlich auch für die anderen Feldwerte durch Verwenden gefälschter Formulare. Es sollte vor der Wertprüfung also immer erst eine isset () und auch Typprüfung erfolgen

                            - e.g. Typprüfung: Auch ein gefälschter Formaufruf der statt name="xyz" ein name="xyz[]" verwendet, erzeugt Notices und andere Probleme.

                            Kommentar


                            • #15
                              ja bei der checkbox hattes du recht

                              hab es jetzt so behoben
                              PHP-Code:
                              if(isset($_POST['check']))
                              {
                                  if(!
                              checkBox($_POST['check']))
                                  {
                                  
                              $meldung[]="Checkbox wählen<br>";
                                  }

                              zwecks der typ überprüfung..ist doch bei zahlen is_numeric, bzw is_int oder? aber was bei datum und checkboxen usw ? is_string wäre ja nicht das optimale...

                              zwecks cleanFrom soll also auf jede Seite? aber bringt doch eigentlich nix wenn keien eingaben vorhanden sind, oder sehe ich das falsch?

                              EDIT: kannst du bitte den letzten Punkt noch näher ausführen? versteh das nicht so ganz...wäre tollig

                              Kommentar

                              Lädt...
                              X