"We are back" « oc.at

[Solved] if anweisung in php

bambooS 08.02.2009 - 14:43 2298 21
Posts

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
Hi Leute,

ich bräucht eure Hilfe. Ich habe nur noch folgendes Problem.

das ist die SQL Abfrage:
$query = "SELECT Id, Nickname, teamlink FROM tbl_benutzerdaten WHERE";
$query .= " (Nickname like '".$_REQUEST["name"]."') AND (Kennwort = '".md5 ($_REQUEST["pwd"])."')";
$query .= " AND (teamlink = '".$Team_ID1."')";
$query .= " OR (teamlink = '".$Team_ID2."')";
$result = mysql_query( $query, GetConnection() ) or die ( mysql_error() );

Warum 2 mal Teamabfrage? -> weil 2 Teams die Ergebnisse eintragen dürfen (gehen wir von Team=1 und Team=5 aus).

so sieht es bei einem Team aus:
SELECT Id, Nickname, teamlink FROM tbl_benutzerdaten WHERE (Nickname like 'culpa') AND (Kennwort = 'b7ea858d1320d9ecf7e99079fdf96a9a') AND (teamlink = '1') OR (teamlink = '5')
________________________________________
Array ( [0] => 2 [Id] => 2 [1] => culpa [Nickname] => culpa [2] => 1 [teamlink] => 1 )

so sieht es beim zweiten team aus:
SELECT Id, Nickname, teamlink FROM tbl_benutzerdaten WHERE (Nickname like 'hooptroops') AND (Kennwort = 'ff44287c7bab3364d611cac18752eb2c') AND (teamlink = '1') OR (teamlink = '5')
________________________________________
Array ( [0] => 6 [Id] => 6 [1] => hooptroops [Nickname] => hooptroops [2] => 5 [teamlink] => 5 )

ich dachte mir, ich kann es mit einem IF Statement abfragen:
if ($Team_ID1 or $Team_ID2 == $data["teamlink"]) -> das funkt aber nicht.
Es kommt immer eine Fehlermeldung, dass in der IF Anweisung ein Fehler ist. Ich könnte es auf 2 IF Anweisungen splitten aber das wäre doch „shitty“.

Kann man das irgendwie so bauen, dass es in einer IF Abfrage bleibt?

lg
Bearbeitet von bambooS am 10.02.2009, 21:26

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11340
Das ist kein korrektes JavaScript. Die Fehlerkonsole deines Browsers sollte Details dazu liefern.

Was willst du überhaupt genau machen? Ein Form submitten oder ein HTTP GET?

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
*edit
großes Update im ersten Post.
Bearbeitet von bambooS am 08.02.2009, 20:42

Triple-X

Addicted
Avatar
Registered: Feb 2001
Location: Pregarten (OÖ)
Posts: 485
1. if ($Team_ID1 == $data["teamlink"] || $Team_ID2 == $data["teamlink"])
du must für jede Variable den Vergleich machen

2. das SQL Statement ist wie ich das sehe falsch, den sobald die Spalte teamlink = $Team_ID2 ist, dann muss durch das OR weder nick noch passwort stimmen.
EDIT: du musst die 2 Team Vergleiche mit klammern dann würds wieder passen

3. Bei SQL Statements sollte man vorher immer die Variablen durch eine Escape Funktion parsen lassen, den sonst sind SQL Injections Tür und Tor geöffnet.
Bearbeitet von Triple-X am 08.02.2009, 22:24

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
Danke für die Tips.

Werde es heute ausprobieren.

Das mit parsen ist doch Vergangenheit. Hab mir sagen lassen, das mit der neuen Version von php das ganze unterbunden wird. Gibt es ja diese Option magic_quotes_gpc.

Falls es noch immer notwendig ist, muss ich mir das ganze angucken. Hab noch nie was durch eine Escape Funktion parsen lassen (Eingaben).

Vielleichst hast ja ein nettes Beispiel :D.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4295
magic_quotes_gpc ist aber nicht immer aktiv

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
Kann ich das irgendwie überprüfen?

aller phpinfo?

@ zu meinem Problem:

So ich hab mal die SQL Query angepasst.

Code: PHP
$query = "SELECT Id, Nickname, teamlink FROM tbl_benutzerdaten WHERE";
		$query .= " (Nickname like '".$_REQUEST["name"]."') AND (Kennwort = '".md5 ($_REQUEST["pwd"])."')"; 
		$query .= " AND ((teamlink like '".$Team_ID1."')OR (teamlink like '".$Team_ID2."'))";
		$result = mysql_query( $query, GetConnection() ) or die ( mysql_error() );
		
		//echo("datenbank<hr>");
		//echo($query);
		$data = mysql_fetch_array ($result);
		//echo("die data query<hr>");
		//print_r($data);
		//echo("nickname");
		
		if ( ($Team_ID1 == $data["teamlink"]) or ($Team_ID2 == $data["teamlink"]) )

Im Moment sieht es so aus:

1. richtiges Team1
Nehm ich das Team_ID1 sagt er mir, dass es einen Fehler in der SQL Query gibt.

Sieht dann so aus:
querySELECT Id, Nickname, teamlink FROM tbl_benutzerdaten WHERE (Nickname like 'culpa') AND (Kennwort = 'b7ea858d1320d9ecf7e99079fdf96a9a') AND ((teamlink like '1')OR (teamlink like '5'))
dataArray ( [0] => 2 [Id] => 2 [1] => culpa [Nickname] => culpa [2] => 1 [teamlink] => 1 )

Irgendwo ist noch immer der Hund drinnen. Das mit dem Teamlink dürfte noch immer der Grund sein.

2. richtiges Team2
siehe Team1.

3. falsche Team
das funktioniert. Er kommt in den Zweig mit der Fehlermeldung und macht das Richtige.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4295
ja, kann man mit ini_get(). erspart dir aber nicht, benutzereingaben auf plausibilität zu prüfen und sie durch eine escape-funktion zu jagen.

ich nehm mal an, die team-id's sind als INT gespeichert. daher: teamlink = 1

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
ja die teamlinks sind als int gespeichert. die team_id übergebe ich und hole sie mir per &_REQUEST.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4295
darum gehört auch team_id mit is_numeric() überprüft.
und im sql: AND ((teamlink = 1)OR (teamlink = 5))

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
@sql abändern: hab ich gemacht.

edit: @is_numeric():
hab mir das mal auf die schnelle zusammengebaut:
if(is_numeric($Team_ID1))
echo("ist eine Zahl");

Ergenis ist, das es eine Zahl ist.
Bearbeitet von bambooS am 10.02.2009, 19:16

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4295
team_id darf nur eine zahl sein. als benutzereingabe kann man dem aber nicht trauen. daher überprüfe ich alle benutezreinagebn, ob sie plausibel sind, also in dem fall eine zahl.

das sieht dann in etwa so aus:
Code: PHP
if (!is_numeric($_REQUEST['team_id'])) {
die('U SUXX');
}

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
ups mein edit war zu langsam. Hmm langsam nistet sich eine Verzweiflung bei mir ein!
Bearbeitet von bambooS am 10.02.2009, 19:19

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4295
wenn du dich genauer ausdrücken würdest,könnte man dir vielleicht helfen ;)
aber als tipp, ließ dich mal in sql-injections ein.

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
Das mit der sql-injections werd ich machen.

Ich kämpft im Moment mit der IF bzw. eher mit der SQL Abfrage.

Ich versuch es mal mit Worten zu erklären, was ich machen will.

Es gibt einen Spielplan mit den Spieltagen. Pro Spieltag spielen 2 verschiedene Teams. Die Teams müssen selbst die Ergebnisse eintragen.

Über das Feld "Eintragen", kommen sie zu der Maske, wo sie die Ergebnisse eintragen können. Vorher wird gegen gecheckt ob sie eingeloggt sind. Wenn nicht erscheint vorher noch die Loginmaske.

Ich übergebe vom Spielplan den Spieltag (Form_ID -> eine fortlaufende Nummer in der Datenbank) und die Teams (Team_ID1+2 -> die beiden Teams).

Auf einers der beiden Teams, hole ich mir die Daten aus der Datenbank.

Befehl sieht im Moment so aus (nach den Vorschlägen):
Code: PHP
$query = "SELECT Id, Nickname, teamlink FROM tbl_benutzerdaten WHERE";
$query .= " (Nickname like '".$_REQUEST["name"]."') AND (Kennwort = '".md5 ($_REQUEST["pwd"])."')";
$query .= " AND ((teamlink = '".$Team_ID1."') OR (teamlink = '".$Team_ID2."'))";

Diese Ergebnisse möchte ich gegenprüfen mit:
Code: PHP
		if ( ($Team_ID1 == $data["teamlink"]) || ($Team_ID2 == $data["teamlink"]) )

Wenn es stimmt (If Anweisung), soll er mich zu der Maske weiterleiten, wo ich dann die Ergebnisse eintragen soll. Ansonsten bleib ich beim Loginfenster, wo er mir sagt, dass ich falsche Daten angegeben habe (komischerweise funktioniert das mit den falschen Daten. Die richtigen Daten mag er nicht).

Bin ich jetzt verständlicher???
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz