URL: https://www.overclockers.at/coding-stuff/solved_if_anweisung_in_php_204632/page_1 - zur Vollversion wechseln!
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
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?
*edit
großes Update im ersten Post.
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.
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
.
magic_quotes_gpc ist aber nicht immer aktiv
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"]) )
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
ja die teamlinks sind als int gespeichert. die team_id übergebe ich und hole sie mir per &_REQUEST.
darum gehört auch team_id mit is_numeric() überprüft.
und im sql: AND ((teamlink = 1)OR (teamlink = 5))
@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.
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: PHPif (!is_numeric($_REQUEST['team_id'])) { die('U SUXX'); }
ups mein edit war zu langsam. Hmm langsam nistet sich eine Verzweiflung bei mir ein!
wenn du dich genauer ausdrücken würdest,könnte man dir vielleicht helfen 
aber als tipp, ließ dich mal in sql-injections ein.
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."'))";
Code: PHPif ( ($Team_ID1 == $data["teamlink"]) || ($Team_ID2 == $data["teamlink"]) )
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026