Ankündigung

Einklappen
Keine Ankündigung bisher.

Verzwickte IF abfrage

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • schimanski
    hat ein Thema erstellt Verzwickte IF abfrage.

    Verzwickte IF abfrage

    Guten abend, habe da ein prob mit einer if abfrage und zwar, ich habe eine datenbankabfrage erstellt die Spiele aus einer datenbank ausgibt und vorher nach Plattform filter, klappt. Ich habe eine Abfrage geschrieben die dem übermittelten usernamen aus einer anderen Datenbank die Spiele die er hat auswählt, klappt. Und ich möchte das bei allen angezeigten datensätzen geprüft wird ob das spiel schon in der DB vorhanden ist. Bei der ersten datensatzzeile klappt es auch aber da die variable für den vergleich ausserhalb der wiederholung entsteht haben alle die gleiche ID zum vergleichen. Hoffe das wr irgendwie verständlich hier mal der code damit ihr euch einen überblick verschaffen könnt.

    PHP-Code:
    <?php require_once('Connections/local.php'); ?>
    <?php
    if (!function_exists("GetSQLValueString")) {
    function 
    GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
    {
      
    $theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

      
    $theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

      switch (
    $theType) {
        case 
    "text":
          
    $theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
          break;    
        case 
    "long":
        case 
    "int":
          
    $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case 
    "double":
          
    $theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
          break;
        case 
    "date":
          
    $theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
          break;
        case 
    "defined":
          
    $theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
          break;
      }
      return 
    $theValue;
    }
    }

    if (!
    function_exists("GetSQLValueString")) {
    function 
    GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
    {
      
    $theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

      
    $theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

      switch (
    $theType) {
        case 
    "text":
          
    $theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
          break;    
        case 
    "long":
        case 
    "int":
          
    $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case 
    "double":
          
    $theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
          break;
        case 
    "date":
          
    $theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
          break;
        case 
    "defined":
          
    $theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
          break;
      }
      return 
    $theValue;
    }
    }

    $currentPage $_SERVER["PHP_SELF"];

    $maxRows_spieleliste 50;
    $pageNum_spieleliste 0;
    if (isset(
    $_GET['pageNum_spieleliste'])) {
      
    $pageNum_spieleliste $_GET['pageNum_spieleliste'];
    }
    $startRow_spieleliste $pageNum_spieleliste $maxRows_spieleliste;

    $colname_spieleliste "-1";
    if (isset(
    $_GET['Plattform'])) {
      
    $colname_spieleliste $_GET['Plattform'];
    }
    mysql_select_db($database_local$local);
    $query_spieleliste sprintf("SELECT * FROM spieledb WHERE Plattform = %s"GetSQLValueString($colname_spieleliste"text"));
    $query_limit_spieleliste sprintf("%s LIMIT %d, %d"$query_spieleliste$startRow_spieleliste$maxRows_spieleliste);
    $spieleliste mysql_query($query_limit_spieleliste$local) or die(mysql_error());
    $row_spieleliste mysql_fetch_assoc($spieleliste);

    if (isset(
    $_GET['totalRows_spieleliste'])) {
      
    $totalRows_spieleliste $_GET['totalRows_spieleliste'];
    } else {
      
    $all_spieleliste mysql_query($query_spieleliste);
      
    $totalRows_spieleliste mysql_num_rows($all_spieleliste);
    }
    $totalPages_spieleliste ceil($totalRows_spieleliste/$maxRows_spieleliste)-1;
    $varp $row_user['id'];

    $colname_user "-1";
    if (isset(
    $_GET['user'])) {
      
    $colname_user $_GET['user'];
    }
    mysql_select_db($database_local$local);
    $query_user sprintf("SELECT * FROM osdate_user WHERE username = %s"GetSQLValueString($colname_user"text"));
    $user mysql_query($query_user$local) or die(mysql_error());
    $row_user mysql_fetch_assoc($user);
    $totalRows_user mysql_num_rows($user);
    $test $row_spieleliste['ID'];
    mysql_select_db($database_local$local);
    $query_Recordset1 "SELECT user_games_db.GameID, osdate_user.username FROM user_games_db, osdate_user WHERE osdate_user.id = user_games_db.PlayerID AND user_games_db.GameID = '$test' AND osdate_user.username = 'skycryer'";
    $Recordset1 mysql_query($query_Recordset1$local) or die(mysql_error());
    $row_Recordset1 mysql_fetch_assoc($Recordset1);
    $totalRows_Recordset1 mysql_num_rows($Recordset1);

    $queryString_spieleliste "";
    if (!empty(
    $_SERVER['QUERY_STRING'])) {
      
    $params explode("&"$_SERVER['QUERY_STRING']);
      
    $newParams = array();
      foreach (
    $params as $param) {
        if (
    stristr($param"pageNum_spieleliste") == false && 
            
    stristr($param"totalRows_spieleliste") == false) {
          
    array_push($newParams$param);
        }
      }
      if (
    count($newParams) != 0) {
        
    $queryString_spieleliste "&" htmlentities(implode("&"$newParams));
      }
    }
    $queryString_spieleliste sprintf("&totalRows_spieleliste=%d%s"$totalRows_spieleliste$queryString_spieleliste);
    ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Unbenanntes Dokument</title>
    <style type="text/css">
    <!--
    .Stil1 {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 24px;
    }
    -->
    </style>
    </head>

    <body>
    <span class="Stil1"><?php echo $row_spieleliste['Plattform']; ?></span> zur Zeit aktiv <?php echo $row_user['username']; ?> mit ID <?php echo $row_user['id'];?><br />
    <br />
    <table width="660" border="0" cellspacing="2">
      <tr>
        <td>Spielname</td>
        <td>Plattform</td>
        <td>Genre</td>
        <td>Entwickler</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <?php do { ?>
        <tr>
          <td><?php echo $row_spieleliste['Spielname']; ?></td>
          <td><?php echo $row_spieleliste['Plattform']; ?></td>
          <td><?php echo $row_spieleliste['Genre']; ?></td>
          <td><?php echo $row_spieleliste['Entwickler']; ?></td>
          <td>crea match</td>
          <td>want<?php echo $row_spieleliste['ID']; ?></td>
          <td>in list<?php echo $row_Recordset1['GameID']; ?></td>
          <td>
    <?php
    if ($row_spieleliste['ID']==$row_Recordset1['GameID']) {
    echo 
    "hey das hast du schon";
    } else {
        echo 
    "das hast du noch nicht";
    }
    ?></td>
          <td>&nbsp;</td>
        </tr>
        <?php } while ($row_spieleliste mysql_fetch_assoc($spieleliste)); ?>
    </table>
    </body>
    </html>
    <?php
    mysql_free_result
    ($spieleliste);

    mysql_free_result($user);

    mysql_free_result($Recordset1);
    ?>

  • nikosch
    antwortet
    Da war'se wieder die Grundsatzdebatte...

    Einen Kommentar schreiben:


  • cycap
    antwortet
    Zitat von lazydog Beitrag anzeigen
    Besser diese Backticks gleich ganz weglassen, dann kommst du auch nicht in Versuchung, reservierte Wörter als Bezeichner zu verwenden. Und der Code ist erst noch eher portabel.

    Richtig und wenn man dann noch Kürzel vor die Spaltennamen macht kann einem auch nichts passieren

    Einen Kommentar schreiben:


  • keinplanvonnix
    antwortet
    Zitat von schimanski Beitrag anzeigen
    achja in $plattform = "xbox360";
    und in $userid steht? lass mich raten: nix

    Einen Kommentar schreiben:


  • lazydog
    antwortet
    Zitat von David Beitrag anzeigen
    Die müssen da genauso gesetzt werden, wie bei den anderen Tabellen-/Feldbezeichnern.
    Besser diese Backticks gleich ganz weglassen, dann kommst du auch nicht in Versuchung, reservierte Wörter als Bezeichner zu verwenden. Und der Code ist erst noch eher portabel.

    Einen Kommentar schreiben:


  • David
    antwortet
    ...weil ich da die ` falsch gesetzt habe. Die müssen da genauso gesetzt werden, wie bei den anderen Tabellen-/Feldbezeichnern.

    Einen Kommentar schreiben:


  • schimanski
    antwortet
    Egal ob ich xbox360 mit ' ' oder " " schreibe oder den v´code von david versuche klappt es nicht bei den '' und "" kommt kein fehler aber es ändert sich auch nichts und bei dem code von david kommt dieser fehler

    Unknown column 'user_games_db.PlayerID' in 'on clause'

    Einen Kommentar schreiben:


  • David
    antwortet
    Du kannst bei SQL auch die Werte von zwei Feldern eines Datensatzes vergleichen lassen. SELECT ... WHERE a.x=a.y
    Woher soll der SQL Server jetzt wissen, was ein Feldname ist und was eine Zeichenkette zum Vergleichen ist? Oder konkret gefragt: Woher soll mySQL wissen, dass Du mit xbox360 nicht ein Feld mit diesem Namen meinst? Ganz einfach, Du markierst die Zeichenkette mit '
    Du kannst auch Feldbezeichner mit ` markieren. Letzteres ist (meistens) optional, ersteres ist notwendig.
    Code:
    SELECT
      `spieledb`.`Spielname`, `spieledb`.`Genre`, `spieledb`.`Plattform`,
      `user_games_db`.`PlayerID`
    FROM
      `spieledb`
    LEFT JOIN
      `user_games_db`
    ON
      `spieledb`.`id` = `user_games_db`.`GameID`
      AND `user_games_db.PlayerID` = 94
    WHERE
      `spieledb`.`plattform` = 'xbox360'
      AND
      (
        `user_games_db`.`PlayerID` = 94
        OR `user_games_db`.`PlayerID` IS NULL
      )
    ORDER BY
      `spieledb`.`Spielname` ASC

    Einen Kommentar schreiben:


  • Frank
    antwortet
    nein...

    strings wie deiner nun mal ist "xbox360" gehören in anführungszeichen oder einfache hochkommata.
    Strings ohne ' oder " werden (genauso wie strings in `) als Felder interpretiert

    Einen Kommentar schreiben:


  • schimanski
    antwortet
    habe per var dump das hier raus bekommen

    string(329) "SELECT spieledb.Spielname, spieledb.Genre, spieledb.Plattform, user_games_db.PlayerID FROM spieledb LEFT JOIN user_games_db ON spieledb.id = user_games_db.GameID AND user_games_db.PlayerID = 94 WHERE spieledb.plattform = 'xbox360' AND user_games_db.PlayerID = 94 OR user_games_db.PlayerID IS NULL ORDER BY spieledb.Spielname ASC"
    wenn ich $plattform in ' ' setzte bekomme ich die ausgabe oben aber ohne kommt nur die gleiche meldung wie vorher auch

    Ich tippe mal darauf das er den wert spieledb.plattform mit nichts vergleichen kann weil per JOIN im Select eine tabelle ohne die passende spalte erstellt wurde. Aber dafür ist mein verständnis noch zu wenig.

    Einen Kommentar schreiben:


  • Frank
    antwortet
    setzte $plattform in einfache Hochkommatas
    '$plattform'

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    achja in $plattform = "xbox360";
    WHERE spieledb.plattform = $plattform
    Sollte eigentlich schon reichen.
    Unknown column 'xbox360' in 'where clause'
    Was soll das schon heißen. "Unbekannte Spalte 'xbox360'". Warum Spalte?
    Das siehst Du, wenn Du Dir die vollständige Query ausgeben läßt.
    PHP-Code:
    var_dump ($sql); 

    Einen Kommentar schreiben:


  • schimanski
    antwortet
    Hab mal bischen gelesen und rumprobiert jetzt ist der fehler etwas anders

    Habe jetzt

    PHP-Code:
    $sql "SELECT spieledb.Spielname, spieledb.Genre, spieledb.Plattform, user_games_db.PlayerID FROM spieledb LEFT JOIN user_games_db ON spieledb.id = user_games_db.GameID  AND user_games_db.PlayerID = $userid WHERE spieledb.plattform = $plattform AND user_games_db.PlayerID = $userid OR user_games_db.PlayerID IS NULL ORDER BY spieledb.Spielname ASC"
    Dann kommt diese meldung

    Unknown column 'xbox360' in 'where clause'
    Etwas weiter oben wird die varibale $plattform der wert xbox360 geschrieben nach dem die daten gefilter werden sollen. Hoffe das sind genug infos damit ihr mit helfen könnt

    Einen Kommentar schreiben:


  • cycap
    antwortet
    echo $sql; und das ergebnis da durch jagen : http://www.php.de/mysql/973-tool-sql-formatter.html

    und hör gefälligst auf zu pushen, wenn dir jemand antworten will dann wird er das schon tun

    Einen Kommentar schreiben:


  • schimanski
    antwortet
    fehlt noch etwas?

    Einen Kommentar schreiben:

Lädt...
X