Ankündigung

Einklappen
Keine Ankündigung bisher.

string auf bestehen �berpr�fen und so lange zahl anh�n

Einklappen

Neue Werbung 2019

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

  • string auf bestehen �berpr�fen und so lange zahl anh�n

    ich habe eine datenbank mit einträgen.
    wenn nun ein neuer eintrag erfolgt wird geprüft ob der eintrag schon vorhanden ist.
    falls er vorhanden ist soll einfach eine zahl von 1 aufwärts angehängt werden.
    sprich: wenn alex vorhanden ist soll alex1 eingetragen werden, danach alex2 usw.

    ich habe mir nun den ganzen nachmittag lang den kopf zermartert aber komme auf keinen gr�nen zweig.
    ich habe dies hier produziert. leider ohne erfolg.
    k�nnt ihr mir einen tipp geben was ich falsch habe, oder ist mein problem gar nicht mit einer funktion l�sbar?

    PHP-Code:
    function doublecheck($str) {
    // schauen ob der eintrag vorhanden ist
      
    $sql "SELECT name 
              FROM mitglieder 
              WHERE name = '
    $str'";
      
    $query mysql_query($sql);
      
    $res mysql_num_rows($query);
    // wenn der eintrag vorhanden ist wird hier weitergemacht und immer wieder eine zahl angeh�ngt,
    wenn nicht wird der eintrag zur�ckgegeben
      
    if($res 0) {
        for (
    $i=1$i<5$i++) {
          
    $str $str.$i;
    // jetzt wird die funktion wieder aufgerufen und geschaut ob auch dieser eintrag vorhanden ist
    // wenn die funktion als $res 0 zur�ckgibt wird der nick ausgegeben, denn dann wird die if-schleife nicht mehr weiter durchlaufen
          
    doublecheck($str);
          return 
    $str;
        }
      } else {
        return 
    $str;
      }


  • #2
    ich bin ja ein idiot. so wird ja einfach immer wieder eine 1 angeh�ngt...
    muss ich da mit substr() arbeiten um den anhang immer wieder abzul�sen und zu erh�hen? oder gibt es da eine andere m�glichkeit?

    Kommentar


    • #3
      problem gelöst...

      hab das einfach auf 2 funktionen aufgesplittet und es funzt. was sagt ihr dazu? passt ganz gut oder ginge es noch besser?

      PHP-Code:
      function doublecheck($str) {
        
      $sql "SELECT username 
                FROM mitglieder  
                WHERE username = '
      $str'";
        
      $query mysql_query($sql);
        
      $res mysql_num_rows($query);
        if(
      $res 0) {
          return 
      false;
        } else {
          return 
      true;
        }
      }

      function 
      nickgen($nick) {
        for(
      $i=1$i<1000$i++) {
          if(
      doublecheck($nick.$i) == true) {
            return 
      $nick.$i;
            break;
          }
        }
      }

      // angenommen alex, alex1 und alex2 bestehen bereits wird folgendes ergebnis ausgegeben: alex3

      echo nickgen('alex'); 

      Kommentar


      • #4
        Das nenne ich mal einen Thread aus der Rubrik :

        "ICH HABE NUR LAUT GEDACHT"

        Greetz,


        Werner

        Kommentar


        • #5
          Also ich würde nur eine Datenbank abfrage veranstalten.

          PHP-Code:
          <?php
          $sql 
          "SELECT username 
                    FROM mitglieder  
                    WHERE username RLIKE '"
          .$str."[0-9]{,3}' ORDER BY username";

          $ergeb mysql_query($sql); 
          if( (
          mysql_num_rows($ergeb) > 0)
             {
                 
          $i 1;
                 
          $name_to_check $name.$i;
                 while(
          $names mysql_fetch_assoc($ergeb) )
                     {
                          if(
          in_array($name_to_check,$names))
                             {
                                 
          $i++;
                                 
          $name_to_check $name.$i
                              }
                     }
                 echo 
          $name_to_check;
              }
          ?>
          Käme auf einen Versuch an ob das so ebenfalls funktioniert Problem
          wäre hierbei nun nur , das er nur die Namen mit username.+ 1 Zeichen
          finden würde.
          Aber dazu müsste man sich ansonsten mal MySQL Regexp anschaun.

          Deine Funktion da sträube ich mich ein wenig , angenommen wir habe
          username.0-999 drinne. Dann machst Du 1000 MySQL Abfragen , was ein
          wenig auf die Performance gehen könnte. Ist zwar nun utopisch aber
          möglich ist es

          Wo ich eben nochmal nachgesehen habe wäre die Möglichkeite gegeben dieses so zu machen.

          WHERE username LIKE '".$str."[0-9]{,3}' . MySQL sollte nun alle Namen
          finden die username0-999 sind. So bleibt es bei einer Abfrage und Du hast
          alle Namen zwischen username 0 - 999. Und update.

          Kommentar


          • #6
            das schaut viel professioneller aus. genial. vor allem war bei mir noch das problem:

            alex besteht, dann wird alex1 erstellt. wenn sich jetzt wieder ein alex anmeldet wird alex11 erstellt. und nicht alex2. ich hatte da wohl noch einen kompletten denkfehler drin. mit den mysql regex´s konnte ich bisher noch nichts anfangen. regex sind nicht mein freund... weil so kompliziert. hatte schon einige male versucht mich da einzulesen. leider ohne erfolg.

            Kommentar


            • #7
              http://www.regenechsen.de/phpwcms/index.php?regex_allg

              das müsste dich deinem Ziel näher bringen

              http://www.cix88.de/projekte/regexp/index.php?OP=GO

              und hier kannst's gleich online testen

              Kommentar


              • #8
                wow. DAS nenne ich mal eine gute erklärung. danke 1000mal. es geht anscheinend mehreren menschen so mit regex wie mir.

                Kommentar


                • #9
                  Dafür gibt es solche Seiten

                  Man muss nur wissen wie man googelt oder öfters mal im Forum schnuppern .. dann bekommst vllt auch mal ein "reichlich" gefüllten Lesezeichen-Ordner (IE = Fav) und findest meist auch ohne fragen zu stellen schnell eine Antwort

                  Kommentar


                  • #10
                    meine lesezeichen (ie suxx) sind schon wieder um deine 2 einträge reicher.

                    Kommentar


                    • #11
                      Zitat von Promaetheus
                      das schaut viel professioneller aus. genial. vor allem war bei mir noch das problem:

                      alex besteht, dann wird alex1 erstellt. wenn sich jetzt wieder ein alex anmeldet wird alex11 erstellt. und nicht alex2. ich hatte da wohl noch einen kompletten denkfehler drin. mit den mysql regex´s konnte ich bisher noch nichts anfangen. regex sind nicht mein freund... weil so kompliziert. hatte schon einige male versucht mich da einzulesen. leider ohne erfolg.
                      Ja ehm danke Ob das nun professioneller ist keine Ahnung der einzigste Unterschied ist dieser das dort nur eine MySQL abfrage gemacht wird , alles andere wird in einen Rutsch dann durchgezogen. Ob das so nun funktioniert käme auf einen Versuch an , ich hoffe es natürlich

                      Was ich mich frage , ich suche das Problem mit alex1 und alex11 in den beiden unteren Funktionen. Eigentlich kann ich mir gerade eben nicht erklären wo das passieren soll Bei der oberen ist das ja klar aber bei der unteren wir doch der Ausgangsstring nun nicht verändert.

                      Kommentar

                      Lädt...
                      X