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-Key: 98232

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: Biber
Biber Oct 01, 2008 at 09:37:27 (UTC)
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
Member: SlainteMhath
SlainteMhath Oct 01, 2008 at 09:43:13 (UTC)
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
Member: Stadt-Husum
Stadt-Husum Oct 01, 2008 at 10:29:42 (UTC)
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?
Member: SlainteMhath
SlainteMhath Oct 01, 2008 at 10:39:35 (UTC)
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()"
Member: Biber
Biber Oct 01, 2008 at 11:30:09 (UTC)
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