tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
24
ZUGRIFFE
476
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Hallo Leute.

    In meinem Skript gibt es an einer Stelle ein interessantes Problem.

    PHP-Code:
    if ($var_5 == 'Ja') {

       if(
    preg_match('/^[A-Z0-9]{180}$/'$text) { 

    }
       else
    {

       if(
    preg_match('/^[A-Z0-9]{280}$/'$text) {

    }

    Code Code Code Code Code
    Code Code Code Code Code
    Code Code Code Code Code
    Code Code Code Code Code
    Code Code Code Code Code

       

    Die IF-Abfrage (preg_match) wird erst ein paar 100 Zeilen später geschlossen. Auf Grund einiger Veränderungen am Skript, muss ich nun eine neue IF-Abfrage dazu bauen.

    Könnte das Probleme geben? Ich meine jetzt z.B. auch Sicherheitsrelevante Probleme oder so ähnlich?

    "Weiss" das Skript das die preg_match IF-Abfrage hier NICHT geschlossen werden soll? Oder gibt es für solche Probleme eine spezielle Vorgehensweise?
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Du darfst nicht ein inneres IF nach dem äusseren schliessen. Das wirft den ganzen Code durcheinander.

    Stufe für Stufe zuerst schliessen.

    Vor allem intepretiert PHP das mit dem schliessen anderst als du. PHP sieht nur eine schliessende Klammer und schliesst damit den innersten if.
    PHP-Code:
    //So meinst du das Script:
    if($a){
        if(
    $b){
            echo 
    1;
    //if($a) schliessen
        
    echo 2;
    //if($b) schliessen)

    //Und so intepretiert PHP den Code
    if($a){
        if(
    $b){
            echo 
    1;
        } 
    //if($b) schliessen)
        
    echo 2;
    //if($a) schliessen 
    Alice bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Danke für die Antwort.

    Dann muss ich mir wohl etwas anderes ausdenken.

    Was hälst du davon?

    PHP-Code:
    $erlaubte_zeichen 'A-Z0-9';
    $erlaubte_länge '280';

    if(
    preg_match('/^[$erlaubte_zeichen]{$erlaubte_länge}$/'$text) { 
    Die Variablen "$erlaubte_zeichen" und "$erlaubte_länge" wären dann natürlich Hardcoded im Skript.

    Oder ist das zu unsicher?
     

  4. #4
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Du kannst aber mit goto arbeiten. Das sorgt außerdem dafür, dass du in deinem Quelltext nicht mehr durchsiehst, wenn du nur genügend Sprungmarken verwendest.
    Alice bedankt sich. 
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  5. #5
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Hi, das mit dem "goto" klingt interessant aber ich würde damit die Übersicht verlieren. Denn mein Skript ist schon ziehmlich lang.

    Würde es mit meinem Beispiel nicht gehen?

    PHP-Code:
    $erlaubte_zeichen 'A-Z0-9';
    $erlaubte_länge '280';

    if(
    preg_match('/^[$erlaubte_zeichen]{$erlaubte_länge}$/'$text) { 
     

  6. #6
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Keiner? Mich würde vorallem die Frage in Sachen Sicherheit interessieren.
     

  7. #7
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Wenn du dein Problem noch einmal genau definieren würdest, dann bestimmt. Momentan glaube ich einfach, dass du nicht weißt, wie du eine weitere Verschachtelungsebene einfügen sollst. Also quasi so hier:
    Vorher
    Code PHP:
    1
    2
    3
    4
    5
    
    if($omas_geburtstag === $heute) {
      echo 'Meine Oma hat heute Geburtstag';
    } else {
      echo 'Meine Oma hat heute nicht Geburtstag';
    }
    Nachher
    Code PHP:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    if($omas_geburtstag === $heute) {
      if($ich_habe_zeit) {
        echo 'Ich besuch meine Oma heute, weil sie Geburtstag hat';
      } else {
        echo 'Ich besuch meine Oma heute nicht, obwohl sie Geburtstag hat';
      }
    } else {
      echo 'Meine Oma hat heute nicht Geburtstag';
    }
    Alice bedankt sich. 
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  8. #8
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Zitat Zitat von einfach nur crack Beitrag anzeigen
    Wenn du dein Problem noch einmal genau definieren würdest, dann bestimmt. Momentan glaube ich einfach, dass du nicht weißt, wie du eine weitere Verschachtelungsebene einfügen sollst.
    Das stimmt, ich weiss es wirklich nicht. Irgendwie bin ich auch in letzter Zeit nicht wirklich Aufnahmefähig. Also bitte seit mir nicht böse.

    Auch wenn es hier nicht ins Thema gehört und eigentlich auch nicht in das Forum, möchte ich kurz an dieser Stelle erwähnen, dass ich mich Beruflich verändert (vorher KFZ-Mechatroniker in Fachrichtung Kommunikationstechnik und Bürokaufmann) habe und seit ein paar Monaten Selbstständig bin. Und die Selbstständigkeit verbraucht alle meine Reserven.

    Zum Thema:
    Nach ein paar Überlegungen wäre es mir doch lieber es so zu machen:
    PHP-Code:
    $text 'Ich mag PHP';

    if (
    $var_5 == 'Ja') {
       
    $erlaubte_zeichen 'A-Z0-9'
       
    $erlaubte_länge '180';
    }
       else
    {
       
    $erlaubte_zeichen 'A-Z0-9'
       
    $erlaubte_länge '280';
    }

    if(
    preg_match('/^[$erlaubte_zeichen]{$erlaubte_länge}$/'$text) {  

    Code Code Code
    Code Code Code
    Code Code Code


    Aber nur wenn es auch Sicher ist.
    Geändert von Alice (12.02.12 um 16:38 Uhr)
     

  9. #9
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Was soll denn daran unsicher sein? Du verwendest doch keine Nutzereingaben direkt in deinem Suchmuster.
    Alice bedankt sich. 
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  10. #10
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Das weiss ich ja nicht. Hatte deswegen ja extra den Hinweis gegeben das es Hardcoded im Skript ist.

    Also kein Problem?
     

  11. #11
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Wo hast du denn da oben bitte Nutzereingaben? Nirgendwo, nie, niemals, nicht, überhaupt nicht, gar nicht, null mal!
    Alice bedankt sich. 
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  12. #12
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    Jetzt bin ich etwas verwirrt?

    Bedeutet "Hardcoded" nicht, dass der Programmierer z.B. eine unverändere Variable gesetzt hat, die durch keine normale Eingabe eines Benutzer veränderbar ist?

    Hardcoded = Fest im Skript eingebaut ?
     

  13. #13
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    Zitat Zitat von bl5000 Beitrag anzeigen
    PHP-Code:
    $text 'Ich mag PHP';

    if (
    $var_5 == 'Ja') {
       
    $erlaubte_zeichen 'A-Z0-9'
       
    $erlaubte_länge '180';
    }
       else
    {
       
    $erlaubte_zeichen 'A-Z0-9'
       
    $erlaubte_länge '280';
    }

    if(
    preg_match('/^[$erlaubte_zeichen]{$erlaubte_länge}$/'$text) {  

    Code Code Code
    Code Code Code
    Code Code Code


    Das wird so nicht funktionieren.

    Die Variablen $erlaubte_zeichen und $erlaubte_länge (Umlaut im Variablennamen?) greifen in einem String, welcher in einfachen Anführungszeichen steht nicht.

    Das Pattern erwartet in deinem Fall entweder genau 180 Zeichen oder genau 280 Zeichen.

    Dann brauchst Du die erlaubten Zeichen auch nicht im if- und else-Block definieren, beides Mal sind die Zeichen gleich.

    Code PHP:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    $text = 'Ich mag PHP';
     
    if ( $var_5 == 'Ja' )
    {
        $erlaubte_laenge = '180';
    }
    else
    {
        $erlaubte_laenge = '280';
    }
     
    if ( preg_match( "#^[A-Z0-9]{0,$erlaubte_laenge}$#", $text ) )
    {  
        // Code und so
    }

    Gruß
     

  14. #14
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Ja eben, deshalb gibt es doch auch keine Sicherheitslücken.
    Alice bedankt sich. 
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  15. #15
    Alice Alice ist offline Mitglied Brillant
    Registriert seit
    Mar 2010
    Beiträge
    882
    @Raisch:
    Du hast natürlich recht.

    Es muss:
    PHP-Code:
    {0,$erlaubte_laenge
    sein.

    Die Pattern sind aber eigentlich auch unterschiedlich. Und die gehen als Variable nicht?
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 10.11.11, 13:08
  2. Access: Abfrage mit Ergebnissen aus Abfrage aktualisieren
    Von Communicate im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 19.09.11, 08:43
  3. Antworten: 34
    Letzter Beitrag: 23.12.09, 20:56
  4. Access : gespeicherte Abfrage als Grundlage für SQL Abfrage
    Von tombe im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 10.02.07, 22:21
  5. SQL Abfrage: Abfrage nach ungleichen Variablen? ne -.-
    Von Nilman im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 31.05.05, 13:24