HTML / PHP Bedingung Problem

Gazeran

Welt-Boss
Mitglied seit
28.02.2010
Beiträge
1.037
Reaktionspunkte
38
Kommentare
6
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
Code:
<?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
 
Zuletzt bearbeitet von einem Moderator:
Hi,

hast du es mal mit folgendem probiert:
Code:
if($HTTP_GET_VARS[page]!='1wheel' && $HTTP_GET_VARS[page]!='2wheel'){echo "$text";}

Die Verbindung sollte doch per logischem und (&&) funktionieren.
 
Zuletzt bearbeitet von einem Moderator:
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.
 
Ja, bei && müsen beide erfüllt sein.

Ok, zweiter Versuch:

Code:
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:

Code:
if(($HTTP_GET_VARS[page]=='1wheel') || ($HTTP_GET_VARS[page]=='2wheel')) {echo "$text";}
oder
Code:
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
Code:
$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.
 
Zuletzt bearbeitet von einem Moderator:
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
 
Zuletzt bearbeitet von einem Moderator:
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.

Code:
<?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;
		}
	}
}
?>
 
Zuletzt bearbeitet von einem Moderator:
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.
 
Zuletzt bearbeitet von einem Moderator:
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.
 
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.
 
Zuletzt bearbeitet von einem Moderator:
Ach verdammt, ich kann ja nicht mal mehr richtig lesen....
 
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
 
Zuletzt bearbeitet von einem Moderator:
Welche PHP-Version läuft denn eigentlich auf dem Server? Liegt vlt. auch daran, dass es nicht geht.

Die Version bekommt man mit
Code:
<?php
phpinfo();
?>
heraus.
 
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();


$username = $_POST['username'];
$password = $_POST['password'];


if ($username&&$password)
{

$connect = mysql_connect("localhost","MEIN_USERNAME","MEIN_PW") or die ("Konnte nicht verbinden!");
mysql_select_db("MEINE_DB") or die ("Konnte DB nicht finden!");

$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)
{
echo "Herzlich willkommen! <a href='member.php'>Klick hier</a> um auf die interne Seite zu gelangen.";
$_SESSION['username']=$username;

}
else
echo "Falsches Passwort!";



}
else
die("Dieser Benutzer existiert nicht");



}




else
die ("Bitte Benutzernamen und Passwort eingeben!");


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

Und das hier
Code:
$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.
 
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:

Code:
<?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>
 
Zuletzt bearbeitet von einem Moderator:
Kannst du das Login-Script mal anpassen und nicht in einer while-Schleife iterieren?

Z.B.
Code:
<?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
 
Zuletzt bearbeitet von einem Moderator:
Werde ich versuchen. Vielen Dank schonmal!

Lg,
derAres
 
[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]
 
Zuletzt bearbeitet von einem Moderator:
Zurück