# HTML / PHP Bedingung Problem



## Gazeran (13. Februar 2011)

Ich habe bis jetzt keinen PHP / HTML Thread gesehen, daher eröffne ich nun einfach mal einen 

Ich habe folgendes Problem:
Ich möchte eine Seite mit Tabs aufbauen (soweit kein Problem),
jedoch bei 2 Tabs eine Tabelle mit einfügen, wo kein Text sondern nur die Tabelle eingefügt wird...
Bei einem ist das auch kein Problem

```
<?php 
if($HTTP_GET_VARS[subpage]!='')
{ 	
		$erg=mysql_db_query("$db","SELECT * FROM texte WHERE page='$HTTP_GET_VARS[subpage]'",$connection);
 	while($row = mysql_fetch_object($erg))
				{					
					
					$text=$row->text;
					if ($HTTP_GET_VARS[page]!='1wheel'){echo "$text";}
				}
}
else{
		
		$erg=mysql_db_query("$db","SELECT * FROM texte WHERE page='$HTTP_GET_VARS[page]'",$connection);
 	while($row = mysql_fetch_object($erg))
				{					
					
					$text=$row->text;
					if ($HTTP_GET_VARS[page]!='1wheel'){echo "$text";}
				}

} 
?>
```

So nun möchte ich eine 2te Bedingung einfügen, also:
If BLABLA ist erfüllt mach PENG
aber auch
IF LOLOLROFL ist erfüllt mach PENG

 if ($HTTP_GET_VARS[page]!='1wheel' und noch eine Bedingung){echo "$text";}

Ist warscheinlich auch ganz einfach, ich stehe jedoch grade ein wenig aufm Schlauch ^^

Hoffe das ist verständlich ausgedrückt xD


----------



## kaepteniglo (13. Februar 2011)

Hi,

hast du es mal mit folgendem probiert:

```
if($HTTP_GET_VARS[page]!='1wheel' && $HTTP_GET_VARS[page]!='2wheel'){echo "$text";}
```

Die Verbindung sollte doch per logischem und (&&) funktionieren.


----------



## Gazeran (13. Februar 2011)

Hi danke für die schnelle antwort, aber && ist doch "und" also müssen beide bedingungen erfüllt sein oder täusche ich mich da?
Denn mein Problem war das ich 2 Bedingungen habe, jedoch nur eine erfüllt sein muss.


----------



## kaepteniglo (13. Februar 2011)

Ja, bei && müsen beide erfüllt sein.

Ok, zweiter Versuch:


```
if(($HTTP_GET_VARS[page]!='1wheel') || ($HTTP_GET_VARS[page]!='2wheel')){echo "$text";}
```

Obwohl das mit !='1wheel' doch eh egal ist. Solange $HTTP_GET_VARS[page] was anderes ist als 1wheel tritt die Bedingung zu.
Sinn macht es, wenn es =='1wheel' ist. Also:


```
if(($HTTP_GET_VARS[page]=='1wheel') || ($HTTP_GET_VARS[page]=='2wheel')) {echo "$text";}
```
oder

```
if(($HTTP_GET_VARS[page]=='1wheel') || ($HTTP_GET_VARS[page]!='2wheel')) {echo "$text";}
```


Hier noch die Auflistung der Operatoren:
http://www.w3schools.com/PHP/php_operators.asp

Edit:

Kann man folgendes

```
$erg=mysql_db_query("$db","SELECT * FROM texte WHERE page='$HTTP_GET_VARS[subpage]'",$connection);
```
nicht abändern und mit Parametern arbeiten? Sonst könnte bei der Where-Klausel SQL-Injection erfolgen.


----------



## Gazeran (13. Februar 2011)

Hm, direkt ausprobiert, diesem Code klappt die erste Bedingung, die zweite bedingung wird jedoch einfach ignoriert oO
Ich muss mal sehen, vielleicht habe ich weiter oben einen fehler im code :S

Dein 2ter Schnippsel funktioniert leider auch nicht, da ja wenn 1wheel oder 2wheel zutrifft der normale Text ausgegeben wird, und wenn 1wheel oder 2wheel nicht zutrifft eben nicht ausgegeben wird, daher fehlt auf der Kompletten seite dann der Text

edit:
wow, das was du mir unten bei deinem edit geschrieben hast ist mir dann doch etwas zu kompliziert, ich mache das ganze eher Hobby mäßig und kenne mich nich ganz sooo aus xD


----------



## ZAM (13. Februar 2011)

Was für eine veraltete PHP-Version läuft eigentlich auf dem Server, dass du die alten GLOB-Vars $HTTP_GET_VARS statt $_GET verwendest?

Btw. ich würde wie Iglo stark dazu raten aus Sicherheitsgründen die direkte Übergabe unbehandelter globaler Variablen ins Query noch einmal zu überdenken und aus Performance-Gründen (was bei so wenig Code aber eher unwichtig ist *g*) das gequote optimieren. 


```
<?php
$subpage = addslashes(stripslashes(strip_tags($_GET['subpage'])));
$page = addslashes(stripslashes(strip_tags($_GET['page'])));

$sql = sprintf('SELECT `text` FROM texte WHERE page=\'%s\'', (($subpage != '') ? $subpage : $page));

if(($erg=mysql_db_query($db, $sql, $connection))) 
{
	while($row = mysql_fetch_object($erg))
	{
		if (!in_array($page, array('1wheel', '2wheel')))
		{
			echo $row->text;
		}
	}
}
?>
```


----------



## Gazeran (27. Februar 2011)

So lieber ZAMilein :-)
Ich habe deinen Code mal ausprobiert, jedoch wird jetz gar nichts mehr auf den Seiten "1wheel" und "2wheel" angezeigt :S
Alle anderen Seiten funktionieren einwandfrei...

Ich habe auch den alten PHP-Befehl benutzt, also $HTTP_GET_VARS anstatt von $_GET, funktioniert allerdings auch nicht.

Kann doch nicht so schwer sein was ich vor habe...
Oder sollte ich vielleicht den ganzen Befehl umgekehrt einsetzen?
Also bei jeder anderen Seite eine bestimmte ID einsetzen, oder so etwas ähnliches?

edit:
Kann leider immer nur alle 2 Wochen an der Seite arbeiten, deswegen erst jetzt die Antwort.


----------



## kaepteniglo (27. Februar 2011)

ZAM schrieb:


> Btw. ich würde wie Iglo stark dazu raten aus Sicherheitsgründen die direkte Übergabe unbehandelter globaler Variablen ins Query noch einmal zu überdenken und aus Performance-Gründen (was bei so wenig Code aber eher unwichtig ist *g*) das gequote optimieren.



Ach, danke ZAM..... Ich wollt ja nur helfen....

Ich gebs ja zu: Meine letzten Arbeiten mit PHP & MySQL liegen ein paar Jahre zurück. Das war noch zu PHP4 Zeiten. Ich weiß ja, dass sich mit PHP5 einiges geändert hat und mit PHP6 auch wieder ändern wird.


----------



## ZAM (27. Februar 2011)

kaepteniglo schrieb:


> Ach, danke ZAM..... Ich wollt ja nur helfen....



Ich schrieb doch "ich rate *wie *Iglo" .. und nicht "Ich rate iglo" ;-)

@Gazeran: Der Code war nicht die Lösung, sondern eine Hilfestellung. Für die Lösung ist die Beschreibung eh nicht exakt genug und es fehlen Teile ;-). Außerdem müsste man das Ergebnis mal sehen.


----------



## kaepteniglo (27. Februar 2011)

Ach verdammt, ich kann ja nicht mal mehr richtig lesen....


----------



## Gazeran (28. Februar 2011)

Du willst das Ergebnis:
1wheel.de

Es geht um die Tabs "Kampfsau" und "In Arbeit"
Und ja die Seite ist nicht die beste  (Ich seh dich grade: *facepalm* )
Und es wird auch in der nächsten Zeit etwas dran gemacht, deswegen brauche ich ja eure Hilfe 


Ist übrigens ganz lustig ein Thread nur mit einem Blauem und einem Grünem zu haben xD


----------



## kaepteniglo (28. Februar 2011)

Welche PHP-Version läuft denn eigentlich auf dem Server? Liegt vlt. auch daran, dass es nicht geht.

Die Version bekommt man mit

```
<?php
phpinfo();
?>
```
heraus.


----------



## eaglestar (2. März 2011)

Besteht das Problem weiterhin?

Hier mal ein Link zu den Logischen Operatoren: http://www.php.net/manual/de/language.operators.logical.php (bzw. allen Operatoren für PHP)

Mit der Seite und verschachtelten Programmverzweigungen (if-Anweisungen / if-else-Anweisungen) solltest du auf die Lösung kommen.



Gruß


----------



## derAres (5. März 2011)

Hallo Leute, trifft sich super dass hier grad ein PHP Topic offen ist. Ich habe folgendes Problem, wäre super wenn ihr helfen könntet:

> Ich habe anhand eines Tutorials eine Registrierung + Login geschrieben. Das meiste funktioniert auch, neue Accounts werden korrekt in der DB gespeichert und die Passwörter landen in MD5 Kodierung - aber wenn man sich mit einem Account einloggen will, sagt er immer, das Passwort stimmt nicht. Das Passwort Feld in der DB kann bis zu 100 Zeichen lang sein, abgeschnitten wird es also nicht.

Hier ist der Code von login.php ...



> <?php
> 
> session_start();
> 
> ...


----------



## kaepteniglo (5. März 2011)

Und wie sieht das beim Anlegen von Benutzern aus? Speicherst du die Passwörter wirklich nur mit md5-Hash ohne Salt?

Und das hier

```
$query = mysql_query("SELECT * FROM users WHERE username='$username'");

$numrows = mysql_num_rows($query);

if ($numrows!=0)
{

while ($row = mysql_fetch_assoc($query))
{
$dbusername = $row['username'];
$dbpassword = $row['password'];

}

// check to see if they match
if ($username==$dbusername&&md5($password)==$dbpassword)
{...
```
ist nicht wirklich deren ernst oder?

Macht das mal lieber per Parametern. Somit ist SQL-Injection schon mal weg. Außerdem kann man doch gleich in der Select-Abfrage Benutzer & PW absetzen. Es sollte ja sowieso nur einen User mit dem Loginnamen geben.


----------



## derAres (5. März 2011)

Danke für die Antwort Iglo. Du musst verzeihen, aber von Salt habe ich noch nichts gehört, dementsprechend weiss ich es nicht...
Hier das Regi-Script:


```
<?php
echo "<h1>Registrieren</h1>";

// form data
$submit = $_POST['submit'];

$fullname = strip_tags($_POST ['fullname']);
$username = strip_tags($_POST ['username']);
$password = strip_tags($_POST ['password']);
$repeatpassword = strip_tags($_POST ['repeatpassword']);
$date = date("Y-m-d");


if ($submit)
{
	//check for existance
	if ($fullname&&$username&&$password&&$repeatpassword)
	{
	
	if ($password==$repeatpassword)
	{
	//check char length of username and fullname
	if (strlen($username)>25||strlen($fullname)>25)
	{
	echo "Länge von Benutzername oder Name ist zu lang.";
	}
	
	else {
		//check password length
		if (strlen($password)>25||strlen($password)<6)
		
		{
		echo "Passwort muss zwischen 6 und 25 Zeichen lang sein";
		}
		else
		{
		//register the user!
		//encript password
		
		$password = md5($password);
		$repeatpassword = md5($repeatpassword);
		
		
		//open database
		$connect = mysql_connect("localhost","MEIN_USER","MEIN_PW");
		mysql_select_db("MEINE_DB"); //select DB
		
		$queryreg = mysql_query("
		
		INSERT INTO users VALUES ('','$fullname','$username','$password','$date')
		
		");
		
		die  ("Du wurdest erfolgreich registriert! <a href='index.php'>Zurück zum Login.</a>");
		
		}
		
	}
	}
	else
		echo "Passwörter stimmen nicht überein!";
}	
else
	echo "Bitte <b>alle</b> Felder ausfüllen";
}
?>


<html>
<p>
<form action='register.php' method='POST'>
	<table>
			<tr>
					<td>
					Vollständiger Name:
					</td>
					<td>
					<input type='text' name='fullname' value='<?php echo $fullname; ?>'>
					</td>
			</tr>
			<tr>
					<td>
					Benutzername wählen:
					</td>
					<td>
					<input type='text' name='username' value='<?php echo $username; ?>'>
					</td>
			</tr>
			<tr>
					<td>
					Passwort wählen:
					</td>
					<td>
					<input type='password' name='password'>
					</td>
			</tr>
			<tr>
					<td>
					Passwort wiederholen:
					</td>
					<td>
					<input type='password' name='repeatpassword'>
					</td>
			</tr>
			
	</table>
	<p>
	<input type='submit' name='submit' value='Registrieren'>

</form>

</html>
```


----------



## kaepteniglo (5. März 2011)

Kannst du das Login-Script mal anpassen und nicht in einer while-Schleife iterieren?

Z.B.

```
<?php
$username = strip_tags($_GET['username']); //oder post
$pw = strip_tags($_GET['password']); // oder post

$sql = "SELECT * FROM users WHERE usersname = ". mysql_real_escape_string ( $_GET['username'] " and password=" . mysql_real_escape_string(md5($_GET['password']))";
$query = mysql_query($sql);
$row = mysql_fetch_assoc ( $query );
...
```

PS: Keine Garantie, dass das jetzt funktioniert


----------



## derAres (5. März 2011)

Werde ich versuchen. Vielen Dank schonmal!

Lg,
derAres


----------



## ZAM (5. März 2011)

[font="arial, verdana, tahoma, sans-serif"]mysql_real_escape_string  würde ich nicht verwenden. Parse das selbst. Nur rein "strip_tags" in den in SQL übergebenen Variablen ist auch nicht safe. Nehmt mein Beispiel :-P[/font] [font=arial, verdana, tahoma, sans-serif]Und das Passwort einfach nur MD5-Hashen ist auch alles andere als Sicher.  Es gibt da draußen schon seit Jahren Webseiten, die mit riesigen Hash-Vergleichsdatenbanken solche Passwörter auflösen. Hier ist ein Kombination als Hash + Salt + Hash besser.[/font]


----------



## kaepteniglo (5. März 2011)

Meine Mysql/PHP-Bücher stehen alle auf Arbeit (damit ich Platz hab und das Buchregal nicht so leer ist  ), daher war das mysql_real_escape_string von einer anderen Seite kopiert (verdammt, Quelle vergsssen  )

Ich wollte ihn wegen dem Salten nicht noch mehr verwirren, das Codeschnipsel mit der While-Schleife war schon komisch genug.


----------



## Gazeran (13. März 2011)

So, habe mein Problem jetzt anders gelöst, und zwar über dropdown menüs.
klappt soweit einwandfrei, jedoch möchte ich den Pfeil verändern, ist das möglich?

Seite: www.1wheel.de


----------



## ZAM (13. März 2011)

Gazeran schrieb:


> So, habe mein Problem jetzt anders gelöst, und zwar über dropdown menüs.
> klappt soweit einwandfrei, jedoch möchte ich den Pfeil verändern, ist das möglich?



Ja, indem du mal nach "Dropdown CSS3" googelst und auf die Selectboxen verzichtest *g*


----------

