Ik heb al een tijdje een login op me site intussen zijn er nu 10.000 leden geregistreerd maar er kunnen er nu niet meer bij. Heeft iemand een idee hoe ik dit kan oplossen, zonder hiervoor oude accounts te verwijderen?
er zit een controle functie in die controleert of de naam al bestaat in de rij en zit een controle functie op die kijkt of het ip al bestaat maar ook als ik een naam gebruik die nog niet bestaat en de ip functie uitschakel wil hij deze niet toevoegen aan de database.
Zit er toevallig een limiet aan een table, dat er maximaal maar 10.000 rijen in kunnen?
En hoe controleer je of een naam en ip adres nog niet bestaat? En hoe merk je dat er niets in je database ingevoerd wordt?
Laat dus ook even een stukje van je omliggende code zien ;-)
?
Onbekende gebruiker
04-12-2006 15:11
<?php
if(####){
# hier staat het form
}else{
$sql = "SELECT naam FROM gebruikers WHERE naam='".htmlspecialchars($_POST['naam'])."'";
$query = mysql_query( $sql ) or die ( "Fout: ".mysql_error() );
$tellen = mysql_num_rows($query);
//Check naam
if($tellen==0){
$sql = "SELECT ip FROM gebruikers WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
$query = mysql_query( $sql ) or die ( "Fout: ".mysql_error() );
$tellen = mysql_num_rows($query);
//Check ip
if($tellen==0){
//Gebruiker toevoegen aan database
$sql = 'INSERT INTO gebruikers (id, naam, wachtwoord, status, email, missie, actief, actcode, lastactive, ip, laatst_ip) VALUES (NULL, \''.htmlspecialchars($_POST["naam"]).'\', \''.md5($_POST["paswoord"]).'\', \'0\', \''.$_POST["mail"].'\', \'\', \'0\', \'\', \'0000-00-00 00:00:00\', \''.$_SERVER['REMOTE_ADDR'].'\')';
$resultaat = mysql_query( $sql ) or die ( "Fout: ".mysql_error() );
}else{
$sql = "SELECT naam FROM gebruikers WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
$resultaat = mysql_query( $sql ) or die ( "Fout: ".mysql_error() );
$rij = mysql_fetch_object($resultaat);
echo "Hey ".$rij->naam." ben je daar alweer volgens onze database heb je al een gebruikers account.";
}
}else{
echo "Deze naam is al in gebruik, klik <a href=\"javascript:history.back(-1)\">hier</a> om terug te gaan.";
}
}
?>
dit is hem dan :) maar hij heeft er al 10.000 geregistreerd zal niet weten wat daar dan mis mee is
Als die SELECT-queries kunnen zo richting prullenbak, daar heb je niets aan. Wanneer een ip-adres of gebruikersnaam slechts 1x mag voorkomen, zet dan een UNIQUE op deze kolom. Dan zorgt de database er voor dat er geen dubbele waardes in de tabel worden weggeschreven.
Vervolgens gooi jij met een INSERT de nieuwe gebruiker in de database en klaar is kees. Mocht een waarde al in de tabel staan, dan zal de query keurig mislukken. Met mysql_errno() == 1062 kun je deze fout dan opvangen.
I.p.v. 4 queries heb je dus maar 1 query nodig. Dat ruimt lekker op!
Offtopic: De naam $query slaat nergens op, in deze variabele staat namelijk helemaal geen query! Het gaat om een resultset, $result lijkt mij dan ook voor de hand liggen.
Nee, er lijkt me ook niets mis mee inderdaad. Je zou nog eens een melding kunnen geven als het invoegen gelukt is/zou moeten zijn. Ook kun je met de functie mysql_affected_rows() nog controleren hoeveel rijen er beïnvloed zijn door je INSERT query. Als dit 0 is, weet je dat je query niet gelukt is.
Zet ook error_reporting nog even op E_ALL en niet op 1024.