PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UID aufeinmal 6-stellig



cesar
16.05.2010, 11:37
Hey,


ich hab eine kleines problem und zwar alle neu gereggten user auf meiner seite bekommen eine 6-stellige uid, auch wenn ich erst ca. 170 mitglieder hab, bzw. die UID eigentlich bei 180 weitergehen sollte gehts aufeinmal bei 368809 weiter.


Woran liegt das?



mfg

jpwfour
16.05.2010, 11:41
Tabelle vms_kontodaten, da den "nächste Autoindex" (next auto increment,...) Wert anschaun/umstellen.

Woran das liegt, kann viele Ursachen haben, das sollte man natürlich auch noch rausfinden.

Evtl. hast du manuell was an den Tabellen gemacht?
Oder ein User hat sich doch mit seienr KlammID angemeldet (kann man ja leicht rausfinden, bei welchem User die "großen" Zahlen anfangen). In dem Fall ist evtl. deine anmelden.php fehlerhaft.

eselfutter
16.05.2010, 12:06
Tabelle vms_kontodaten, da den "nächste Autoindex" (next auto increment,...) Wert anschaun/umstellen.

Habe ich bei dem User schon probiert.
Umgestellt und abgespeichert, aber der neue Wert wird nicht übernommen.

cesar
16.05.2010, 12:08
wo find ich die next-autoincreament?


ich hab keine klammschnittstelle drin, mein vms läuft auf nur auf € basis.

hier mal meine anmelden.php



<?php

// Variabel vordefinieren!
if (!isset($_POST['anmelden'])) $_POST['anmelden'] = "";
if (!isset($_POST['nickname'])) $_POST['nickname'] = "";
if (!isset($_POST['nachname'])) $_POST['nachname'] = "";
if (!isset($_POST['vorname'])) $_POST['vorname'] = "";
if (!isset($_POST['emailadresse'])) $_POST['emailadresse'] = "";
if (!isset($_POST['passwort_1'])) $_POST['passwort_1'] = "";
if (!isset($_POST['passwort_2'])) $_POST['passwort_2'] = "";
if (!isset($_POST['uid_passwort'])) $_POST['uid_passwort'] = "";
if (!isset($_POST['uid'])) $_POST['uid'] = "";
if (!isset($_POST['agb'])) $_POST['agb'] = "";
if (!isset($_POST['newsletter'])) $_POST['newsletter'] = "1";
if (!isset($_POST['paidmails'])) $_POST['paidmails'] = "1";
if (!isset($error)) $error = "";
if (!isset($anmeldeok)) $anmeldeok = "";
if (!isset($ak)) $ak = "";

if ($_POST['anmelden'] == "Jetzt anmelden!") {

// SecVMS change begin
$_GET['nachname'] = addslashes ($_GET['nachname']);
$_GET['vorname'] = addslashes ($_GET['vorname']);
$_POST['nickname'] = htmlspecialchars ($_POST['nickname']);
// SecVMS change end


$schnittstelle = mysql_fetch_array(db_query("SELECT * FROM ".$db_prefix."_schnittstelle LIMIT 1")) or die("Userinfo");
$tag = strtotime("".date("m")."/".date("d")."/".date("Y")." 0 hours 0 minutes 0 seconds");
$s_verbrauch = mysql_num_rows(db_query("SELECT * FROM ".$db_prefix."_schnittstelle_anfragen WHERE zeit='".$tag."' and uid='0'"));
// Auf Eingabefehler prüfen
if(!$_POST['nachname'] || !$_POST['vorname'] || !$_POST['emailadresse'] || !$_POST['passwort_1'] || !$_POST['passwort_2'] || !$_POST['nickname']) $error .= 'Bitte fülle alle benötigten Felder aus!<br>';

// Pruefen, ob man sich mit der eMail-Domain anmelden darf
$denied = explode(';', $pageconfig['denied_domains']);
foreach ($denied AS $nr => $emaildomain) if (($nr < (count ($denied)-2) || strlen ($emaildomain) >= 5) && strpos ($_POST['emailadresse'], $emaildomain) !== FALSE) $error .= 'E-Mail-Adressen mit der Domain "<i>'.$emaildomain.'</i>" sind bei uns nicht erlaubt!<br>';

if(!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$",$_POST['emailadresse'])) $error .= 'Der Emailsyntax ist falsch!<br>';
if ($_POST['passwort_1'] != $_POST['passwort_2']) $error .= 'Passwörter stimmen nicht überein!<br>';
if (strlen($_POST['passwort_1']) < 8) $error .= 'Passwortlänge muss min. 8 Zeichen haben<br>';
if (ereg("[^0-9]", $_POST['uid'])) $error .= 'Bei der Klamm Id nur Zahlen!<br>';
if ($_POST['agb'] != "ja") $error .= 'Du musst die AGBs bestätigen!<br>';
if ($schnittstelle['anfragen_tag'] != 0 and $schnittstelle['anfragen_tag'] <= $s_verbrauch) $error = 'Die Schnittstellenanfragen sind für heute verbraucht!!!<br>';

// User mit der Datenbank abgleichen
if (!$error) {
$nickname = ucfirst($_POST['nickname']);
$nickname_check =db_query ("SELECT `nickname` FROM ".$db_prefix."_userdaten WHERE nickname='".$nickname."'");
$user_check = db_query ("SELECT `uid` FROM ".$db_prefix."_kontodaten WHERE uid='".$_POST['uid']."'");
$mail_check = db_query ("SELECT `emailadresse` FROM ".$db_prefix."_emaildaten WHERE emailadresse='".$_POST['emailadresse']."'");
$black_check= db_query ("SELECT * FROM ".$db_prefix."_userblacklist WHERE uid='".$_POST['uid']."' and zeit >='".time()."'");
$sperre = mysql_fetch_array($black_check);
if ($sperre['zeit'] != 99999999999) {
$sperrtext = 'Du bist für eine Neuanmeldung noch bis <b>'.date("d.m.Y - H:i:s",$sperre['zeit']).'</b> gesperrt!<br>';
} else {
$sperrtext = '<b><i>Du bist für diese Webseite komplett gesperrt!</i></b>';
}
if (mysql_num_rows($user_check)) $error .= 'Du bist bereits bei uns angemeldet!<br>';
if (mysql_num_rows($mail_check)) $error .= 'Diese Emailadresse ist schon im System!<br>';
if (mysql_num_rows($black_check)) $error = $sperrtext;
if (mysql_num_rows($nickname_check)) $error .='Der Nickname ist schon vergeben!<br>';
}


// User eintragen
if (!$error) {
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 0) $mailstatus = 0;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 0) $mailstatus = 1;
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 1) $mailstatus = 2;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 1) $mailstatus = 3;
db_query("INSERT INTO ".$db_prefix."_kontodaten (uid,passwort,status,hinweis,kontostand,login_ip) VALUES ('".$_POST['uid']."','".md5($_POST['passwort_1'])."','0','','1','".$ip."')");
$uid = mysql_insert_id();
db_query("INSERT INTO ".$db_prefix."_emaildaten (uid,emailadresse,freigabe_fuer) VALUES (".$uid.",'".$_POST['emailadresse']."','".$mailstatus."')");
db_query("INSERT INTO ".$db_prefix."_userdaten (uid,nickname,vorname,nachname,angemeldet_seit) VALUES (".$uid.",'".$nickname."','".$_POST['vorname']."','".$_POST['nachname']."','".time()."')");
$ws = db_query("SELECT * FROM ".$db_prefix."_werberdaten WHERE uid='".$uid."'");
db_query("INSERT INTO ".$db_prefix."_werberdaten (uid,werber,umsatz,zuordnungszeit) VALUES (".$uid.",'".$_SESSION['werber']."','0','".time()."')");
$ak = md5($uid.''.time());
db_query("INSERT INTO ".$db_prefix."_aktivierungen (uid,ak) VALUES (".$uid.",'".$ak."')");
$email_message = 'Hallo, '.$_POST['nickname'].'
Du hast Dich soeben erfolgreich bei '.$seitenname.' angemeldet.

Bitte aktiviere jetzt Deinen Account, klicke dazu bitte auf den
Aktivierungslink: '.$domain.'/?content=/intern/aktivieren&ak='.$ak.'

----------------------------------------------------------
Nickname: '.$_POST['nickname'].'
User-ID : '.$uid.'
Passwort: '.$_POST['passwort_1'].'
----------------------------------------------------------

Nach der Aktivierung kannst Du dich sofort einloggen und bei
uns teilnehmen.

Mit freundlichen Grüßen
Das '.$seitenname.' Team
';
@mail($_POST['emailadresse'], "$seitenname Accountaktivierung", $email_message, "FROM: $seitenname <$betreibermail>");
$anmeldeok = "true";
}

}

if ($error){
head("Anmeldefehler");
echo '<font color="#cc0000">'.$error.'</font>';
foot();
}
?>

<? if ($anmeldeok != "true") { ?>
<?head("$seitenname - Neuanmeldung");?>

<table width="100%" cellpadding="3" cellspacing="0" border="0">
<form action="" method="post">
<tr>
<td class="main"><b>Nickname:</b></td>
<td class="main"><input type="text" name="nickname" value="<?=$nickname;?>"></td>
</tr>
<tr>
<td class="main"><b>Nachname:</b></td>
<td class="main"><input type="text" name="nachname" value="<?=$_POST['nachname'];?>"></td>
</tr>
<tr>
<td class="main"><b>Vorname:</b></td>
<td class="main"><input type="text" name="vorname" value="<?=$_POST['vorname'];?>"></td>
</tr>
<tr>
<td class="main"><b>Emailadresse:</b></td>
<td class="main"><input type="text" name="emailadresse" value="<?=$_POST['emailadresse'];?>"></td>
</tr>
<tr>
<td class="main">Werber:</td>
<td class="main"><? if($_SESSION['werber'] == 0) {echo '<b>keinen</b>';} else {echo $_SESSION['werber'];}?></td>
</tr>
<tr>
<td class="main"><b>Passwort:</b></td>
<td class="main"><input type="password" name="passwort_1"></td>
</tr>
<tr>
<td class="main"><b>Passwortbestätigung:</b></td>
<td class="main"><input type="password" name="passwort_2"></td>
</tr>
<tr>
<td class="main"><b>Newsletter:</b></td>
<td class="main"><select name="newsletter"><option value="1" <? if ($_POST['newsletter'] == "1") { echo 'selected';}?>>Ja</option></select></td>
</tr>
<tr>
<td class="main"><b>AGB`s gelesen und akzeptiert:</b></td>
<td class="main"><select name="agb"><option value="ja" <? if ($_POST['agb'] == "ja") { echo 'selected';}?>>Ja</option><option value="nein" <? if ($_POST['agb'] != "ja") { echo 'selected';}?>>Nein</option></select></td>
</tr>
<tr>
<td class="main" align="center" colspan="2">
Vor dem Anmelden lese bitte die AGB`s!<br><br>
<input type="submit" name="anmelden" value="Jetzt anmelden!">
</td>
</tr>
</form>
</table>
<?foot();?>
<?} else {?>
<?head("$seitenname - Anmeldung erfolgreich!");?>
Deine Anmeldung bei <?=$seitenname;?> war erfolgreich, Du bekommst jetzt eine Email mit Deinen Daten und einen Aktivierungslink.
Sobald Du deinen Account aktiviert hast kannst Du dich bei uns einloggen und diese Seite im vollen Umfang nutzen.<br>
<br>
Bitte beachte dass es auch etwas dauern kann bis die Aktivierungsmail bei Dir ankommt, dieses ist anhängig von Deinem Emailanbieter.<br>
<br>
Mit freundlichen Grüßen<br>
Das <?=$seitenname;?> Team<br>

<?foot();?>
<? } ?>



mfg

EarlofMidnight
16.05.2010, 12:22
In der Datenbank...... :rolleyes:

cesar
16.05.2010, 12:33
In der Datenbank...... :rolleyes:


ja so schlau war ich auch schon, aber ich hab da nur auto_increament aber nix von next_auto_increament

deshalb frag ich ja.



mfg

eselfutter
16.05.2010, 12:43
Wenn Du die Tabelle vms_kontodaten öffnest, dann hast Du oben einige Reiter.
Einer davon lautet Operationen. Da findest Du den AUTO_INCREMENT Wert.

Achja: Du solltest den Fremdcode entfernen. Es ist nicht erlaubt den zu posten. :wink:

EarlofMidnight
16.05.2010, 12:48
ja so schlau war ich auch schon, aber ich hab da nur auto_increament aber nix von next_auto_increament

deshalb frag ich ja.



mfg

Das hatte meine Glaskugel wohl übersehen das du dort schon nachgesehen hast... :glaskugel:

Aber Eselfutter hat dir die Antwort ja schon gepostet.

jpwfour
16.05.2010, 12:49
Die anmelden.php is auf jedenfall fehlerhaft, war mehr Zufall, dass es bisher so funktioniert hat, da du:
$_POST['uid']
da verwendest. Vermutlich ein User mit Autoregger oder so, der das Feld halt mit abgeschickt hat, dagegen muss man sich aber auch absichern!

EDIT: wo is da Fremdcode?

cesar
16.05.2010, 12:55
und was ist da fehlerhaft??

ich versteh deine letzte antwort leider nicht... irgendwie bin ich zu blöd dafür... :(


So ich hab das jetzt doch noch gefunden, allerdings kann ich da eintragen was ich will er springt mir beim speichern immer auf den alten wert zurück. Er übernimmts einfach nicht.




mfg

EarlofMidnight
16.05.2010, 13:06
In deiner Anmelde.php wird kann eine UserID mit übergeben werden, durch z.b. einen Autoregger.
Wenn an dieser Stelle z.B. eine KlammID übergeben wird, wird diese in deine Datenbank eingetragen.
Ausgehend von dieser UserID zählt deine Datenbank dann weiter hoch für die nächsten User.

cesar
16.05.2010, 13:20
Und wie änder ich das?? Bei der reg auf meiner Seite kann man aber nirgends was eingeben von UID oder ähnlichem.


mfg

jpwfour
16.05.2010, 13:33
Die Seite erstmal vergessen, was da angezeigt wird ist unwichtig, jeder kann HTML manipulieren und dir schicken,w as er will.
Daher muss das PHP-Skript für die Sicherheit/Aussortierung/Validierung sorgen.
Zeile:

db_query("INSERT INTO ".$db_prefix."_kontodaten (uid,passwort,status,hinweis,kontostand,login_ip) VALUES ('".$_POST['uid']."','".md5($_POST['passwort_1'])."','0','','1','".$ip."')");
in:

db_query("INSERT INTO ".$db_prefix."_kontodaten (passwort,status,hinweis,kontostand,login_ip) VALUES ('".md5($_POST['passwort_1'])."','0','','1','".$ip."')");

sollte das gröbste beheben, aber bitte nochmal nachchecken lassen.

eselfutter
16.05.2010, 13:34
Und wie änder ich das?? Bei der reg auf meiner Seite kann man aber nirgends was eingeben von UID oder ähnlichem.


mfg

Man muß die nicht eingeben können, es reicht, wenn die beim Anmelden automatisch übergeben wird. Dies kann z.b. bei einem Eintrag in einem Autoregger geschehen, wenn Deine Seite dort gelistet ist.

jpwfour
16.05.2010, 13:41
ALTER TABLE `vms_kontodaten` AUTO_INCREMENT = XXX;

Macht MySQL wahrscheinlich auch, nur um sofort danach den Wert wieder auf MAX(uid) +1 zu setzen :suspicious:

Daher solltest du den Usern mit hohen uid erstmal niedrige geben, und dann den Wert auf eine Zahl setzen, die so oder höher in der Spalte uid nicht vorkommt.

SELECT MAX(uid) FROM vms_kontodaten;

Aber neue uid zu verteilen wird aufwändig, da muss man mehrere Tabellen bearbeiten, sonst sind die Userdaten kaputt!

cesar
16.05.2010, 14:11
Ich hab die hohe uid rausgelöscht, und jetzt gehts wieder mit den normalen.

kann das jetzt wieder passieren mit der hohen id auch wenn ich die sql abfrage geändert hab?


mfg

jpwfour
16.05.2010, 15:53
Sollte eigentlich nicht, aber $_POST['uid'] wird noch an anderen Stellen in deiner anmelden.php verwendet, bspw. in der Überprüfung, ob es den User schon gibt/ob er auf der Blacklist steht/ob die KlammID gültig ist.

ZWar sollte die Anmeldung so wie es jetzt ist, funktionieren, aber die Prüfungen kann man natürlich rauslöschen, machen ja so wenig Sinn, und bspw. die Blacklist sollte dann eher auf EMailadresse und/oder IP basiert sein.