php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.04.2006, 16:42  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard 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;
  }

__________________
mfg Alexander Haim
Promaetheus ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.04.2006, 17:04  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

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?
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 25.04.2006, 17:37  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

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'); 
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 26.04.2006, 06:57  
Erfahrener Benutzer
 
Registriert seit: 30.06.2008
Beiträge: 134
solitaer befindet sich auf einem aufstrebenden Ast
Standard

Das nenne ich mal einen Thread aus der Rubrik :

"ICH HABE NUR LAUT GEDACHT"

Greetz,


Werner
solitaer ist offline  
Alt 26.04.2006, 09:36  
Gast
 
Beiträge: n/a
Standard

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.
 
Alt 26.04.2006, 10:44  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

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.
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 26.04.2006, 10:47  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

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
M3g4Star ist offline  
Alt 26.04.2006, 12:48  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

wow. DAS nenne ich mal eine gute erklärung. danke 1000mal. es geht anscheinend mehreren menschen so mit regex wie mir.
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 26.04.2006, 13:34  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

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
M3g4Star ist offline  
Alt 26.04.2006, 18:59  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

meine lesezeichen (ie suxx) sind schon wieder um deine 2 einträge reicher.
__________________
mfg Alexander Haim
Promaetheus ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zahl aus String extrahieren GSJLink PHP Tipps 2008 5 13.01.2008 19:13
Event abfangen Ambience JavaScript, Ajax und mehr 4 30.08.2007 14:36
preg_replace: Zahl anstatt String FI-DD PHP-Fortgeschrittene 4 02.10.2005 14:50
Prüfen ob Zahl in String vorhanden ist PHP Tipps 2005-2 9 07.09.2005 11:32
[JS] Regex: Zahl aus String auslesen [gelöst] freq.9 HTML, Usability und Barrierefreiheit 3 27.06.2005 12:02
string -> int, nur wenn string zahl ist PHP Tipps 2005-2 3 06.06.2005 12:33
[Erledigt] String in Zahl umwandeln PHP Tipps 2005 1 12.05.2005 11:39
String nach jeder Zahl teilen yoshy PHP Tipps 2005 8 04.05.2005 03:28
[Erledigt] Sortierung nach Zahl in einem String Datenbanken 2 02.05.2005 16:01

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
\�berpr�fen\

Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.