stadt-husum
Goto Top

If-Else-Abfragen mit SQL

Hallo,

ich bin dabei ein "kleiners" Skript zu basteln.
Mit dem Skript soll ein benutzername und passwort in eine mysql-datenbank eingetragen werden.
jetzt soll es aber so sein, dass wenn ein Benutzername schon vorhanden ist, er dies auch anzeigen soll.
also jetzt zeigt er mir nichts mehr an.
hoffe, ihr wisst es^^

<?php
if($_SESSION['id']=="")  
{	
echo "<h1>Bitte erst einloggen</h1><hr>Erst dann steht die gew&uuml;nschte Funktion zur Verf&uuml;gung.";  
	}
else
	{
echo	"<h1>Neuer Benutzer</h1><hr>  
		<br>";  

  include('config/inc_config.php');  
 if($_POST['post']) {  
    $benutzername = $HTTP_POST_VARS['benutzername'];  
	$passwort = $HTTP_POST_VARS['passwort'];  
	$einrichtungsname = $HTTP_POST_VARS['einrichtungsname'];  
	$strasse = $HTTP_POST_VARS['strasse'];  
	$hausnummer = $HTTP_POST_VARS['hausnummer'];  
	$plz = $HTTP_POST_VARS['plz'];  
	$stadt = $HTTP_POST_VARS['stadt'];  
	$vorwahl = $HTTP_POST_VARS['vorwahl'];  
	$telefon = $HTTP_POST_VARS['telefon'];  
	$fax = $HTTP_POST_VARS['fax'];  
	$mailadresse = $HTTP_POST_VARS['mailadresse'];  
	$status = $HTTP_POST_VARS['status'];  
	$mobil = $HTTP_POST_VARS['mobil'];  
	$anrede = $HTTP_POST_VARS['anrede'];  
	$vorname = $HTTP_POST_VARS['vorname'];  
	$nachname = $HTTP_POST_VARS['nachname'];  
	$position = $HTTP_POST_VARS['position'];  
	
include('config/inc_config.php');  
$anfrage='SELECT benutzername FROM benutzer WHERE benutzername like "$benutzername"';    
$data = mysql_query($anfrage);     
while($row = mysql_fetch_array($data)) 
  {
  if($benutzername==$row['benutzername'])  
  {
  echo 'Benutzername existiert bereits.';  
  }
  else
  {
  
	
	if($benutzername=="" OR $passwort=="" OR $einrichtungsname=="" OR $strasse=="" OR $hausnummer=="" OR $plz=="" OR $stadt=="" OR $vorwahl=="" OR $telefon=="" OR $mailadresse=="" OR $status=="" OR $anrede=="" OR $vorname=="" OR $nachname=="" OR $position=="")  
	{
	  echo 'Bitte die mit * gekennzeichneten Felder ausf&uuml;llen.';  
	}
	else {                            
$sql = "INSERT INTO benutzer   
(`benutzername`,`passwort`,`einrichtungsname`,`strasse`,`hausnummer`,`plz`,`stadt`,`vorwahl`,`telefon`,`mailadresse`,`status`,`anrede`,`vorname`,`nachname`,`position`,`fax`,`mobil`) VALUES ('$benutzername','$passwort','$einrichtungsname','$strasse','$hausnummer','$plz','$stadt','$vorwahl','$telefon','$mailadresse','$status','$anrede','$vorname','$nachname','$position','$fax','$mobil') ";  
 mysql_query($sql);
	  echo 'Neuer Benutzer wurde angelegt!';  
	};
 }
 }
 }
 else {
echo '  
 <form method=post action="">  
 <font size="2">  
 	<table width="100%">  
 		<tr>
 		<td>
   			<b>Benutzername: *</b>
		</td> 
   		<td>
			<INPUT type="text" name="benutzername" value="vorname.nachname" size="19" maxlength=""><br>  
		</td>
		</tr>
		
		<tr>
		<td>
   			<b>Passwort: *</b> 
		</td>
		<td>
			<INPUT type="password" name="passwort" value="" size="19" maxlength=""><br>  
		</td>
		</tr>
		
		//hier sind noch weitere sachen die eingetragen werden
		
		<tr>
		<td>
   		<INPUT type="submit" name="post" value="Anlegen">  
		</td>
		</tr>
	</table>
	</font>
   </form> 
   ';  
 };
};
?>

Content-ID: 98232

Url: https://administrator.de/contentid/98232

Ausgedruckt am: 26.11.2024 um 15:11 Uhr

Biber
Biber 01.10.2008 um 11:37:27 Uhr
Goto Top
Moin Stadt-Husum,

ich vermute mal, Du findest nie etwas mit diesem mehr als wackligen Statement...
$anfrage='SELECT benutzername FROM benutzer   
WHERE benutzername like "$benutzername"';   

  • für ein LIKE fehlen die Wildcard-Zeichen--> geht in die Grütze
  • aber Du meinst ja auch gar keine LIKE-Suche, sondern einen IST-EXAKT-GLEICH-Vergleich

Und dazu solltest Du die beiden "benutzernamen" entweder als UPPER() oder lower()-strings vergleichen.
$anfrage='SELECT benutzername FROM benutzer  
 WHERE UCASE(benutzername) =  UCASE("$benutzername")';   
[ungetestet]

Grüße
Biber
SlainteMhath
SlainteMhath 01.10.2008 um 11:43:13 Uhr
Goto Top
Hi,

in Zeile 32 ist ein "like" zuviel.

btw.
 $benutzername = $HTTP_POST_VARS['benutzername'];   
...
$sql = "INSERT INTO benutzer ... VALUES(...'$benutzername');  
anfaellig für SQL Injections.

lg,
slainte
Stadt-Husum
Stadt-Husum 01.10.2008 um 12:29:42 Uhr
Goto Top
Zitat von @Biber:
$anfrage='SELECT benutzername FROM benutzer  
>  WHERE UCASE(benutzername) =  UCASE("$benutzername")';  
> 
> 
[ungetestet]

Grüße
Biber

Ich habe das mal so ausprobiert.
Bis jetzt erhalte ich gar keine Rückmeldung. Kein echo wird ausgegeben. face-sad
Da ich kein SQL-Spezi bin, weiß ich uach nicht was UPPER und lower strings sind.

So wie ich das denke ist irgendwas mit den if's falsch.

@slainte,

wie da ist ein like zu viel?
da ist doch nur eins...
was sind SQL-Injections?
SlainteMhath
SlainteMhath 01.10.2008 um 12:39:35 Uhr
Goto Top
wie da ist ein like zu viel?
da ist doch nur eins...

ok, ist wohl ein Anzeigeproblem im IE7... wenn die Zeile nach "Like" zungebrochen wird, steht das am Anfang der nächsten Zeile nochmal.

was sind SQL-Injections?

Wenn in diesem Code:
$sql = "INSERT INTO benutzer (`benutzername`,`passwort`,`einrichtungsname`,`strasse`,`hausnummer`,`plz`,`stadt`,`vorwahl`,`telefon`,`mailadresse`,`status`,`anrede`,`vorname`,`nachname`,`position`,`fax`,`mobil`) VALUES ('$benutzername','$passwort','$einrichtungsname','$strasse','$hausnummer','$plz','$stadt','$vorwahl','$telefon','$mailadresse','$status','$anrede','$vorname','$nachname','$position','$fax','$mobil') ";   
mysql_query($sql); 
Die Variable $mobil den wert
'); DELETE FROM benutzer; --  
hat, ist das Ergebnis sicher nicht das von dir gewünschte. Abhilfe schafft hier das "escapen" von Varibalen. z.b. mit der Funktion "mysql_real_escape()"
Biber
Biber 01.10.2008 um 13:30:09 Uhr
Goto Top
Moin Stadt-Husum,

bitte versuche es noch mal mit dieser Schreibweise:
$anfrage="SELECT benutzername FROM benutzer   
WHERE UCASEbenutzername = UCASE('".$benutzername."');"   

Mit UCase()/Upper() wandelst Du einen String in Grossbuchstaben um, mit Lcase()/Lower() in Kleinbuchstaben.
Würdest Du e nicht so machen hättest Du das ungewollte Feature, dass sich ein Benutzer "biber" neu anmelden könnte, obwohl es schon einen Benutzer "Biber" gibt.

Grüße
Biber