Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Variable plötzlich nicht mehr vorhanden

  1. #1
    Großmeister(in) Avatar von MyXoToD
    Registriert seit
    07.11.2007
    Ort
    Mainz
    Alter
    24
    Beiträge
    507
    Danke
    0
    Bekam 1 mal "Danke" in 1 Posting

    Standard Variable plötzlich nicht mehr vorhanden

    Hab jetzt schon 1-2 Stunden probiert... Bin wohl einfach mal wieder zu blind/blöd dafür
    Hoffe ihr könnt mir weiterhelfen.

    Also ich binde in meine index.php die folgendes ein:
    PHP-Code:
    <?php
    include('includes/config.inc.php');
    include(
    'includes/functions.inc.php');
    ?>
    In der selben index.php rufe ich eine PHP-Funktion auf die in der functions.inc.php steht:

    Aufruf:
    PHP-Code:
    <?php
    if (check_login()) {
        echo 
    "Eingeloggt";
    }
    ?>
    Funktion:
    PHP-Code:
    function check_login() {
        if (isset(
    $_COOKIE['ht_username']) && isset($_COOKIE['ht_hash'])) {
            
    $username    $_COOKIE['ht_username'];
            
    $hash        $_COOKIE['ht_hash'];
            if (!empty(
    $username) && !empty($hash)) {
                
    $check_user_sql "SELECT passwort_hash,last_hit FROM ht_user WHERE username = '{$username}'";
                
    $check_user_result mysql_query($check_user_sql,$resource);
                if (
    mysql_num_rows($check_user_result) != 0) {
                    
    $user_row mysql_fetch_array($check_user_result);
                    if (
    $user_row['passwort_hash'] == $hash) {
                        
    $jetzt time();
                        
    $last_hit $user_row['last_hit'];
                        
    $diff $jetzt $last_hit;
                        if (
    $diff >= 120) {
                            
    $last_hit_sql "UPDATE ht_user SET last_hit = '{$jetzt}' WHERE username = '{$username}'";
                        }
                        return 
    true;
                    }
                } else {
                    return 
    false;
                }
            } else {
                return 
    false;
            }
        } else {
            return 
    false;
        }

    So das Problem was ich jetzt habe ist folgendes. Ihr seht in der Funktion die Variable $resource, dort steht die Datenbank Resource ID drin. Ich kann diese Variable in der index.php oder functions.inc.php ganz oben ausgeben, es steht auch das drin was drin stehen soll. Doch hier in dem Fall bekomm ich ständig folgenden Fehler:
    Code:
    Notice:  Undefined variable: resource in /www/htdocs/.../includes/functions.inc.php on line 36
    
    Warning:  mysql_query(): supplied argument is not a valid MySQL-Link resource in /www/htdocs/.../includes/functions.inc.php on line 36
    
    Warning:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/htdocs/.../includes/functions.inc.php on line 37
    Hat jemand eine Idee was ich hier falsch mache? Danke

    Lg Santos
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Don't follow me, I run into walls.

  2. #2
    der/die Göttliche Avatar von jojo87
    Registriert seit
    23.03.2007
    Ort
    Leipzig
    Alter
    30
    Beiträge
    3.131
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Variable plötzlich nicht mehr vorhanden

    functionen haben einen eigenen Namensraum, das heisst es sind nur die Variablen bekannt, welche auch in der Funktion deklariert wurden.
    Verfügbar sind natürlich die Globals($_GET, $_POST etc.). Du müsstest also die $resource variable als global deklarieren:
    PHP-Code:
    function tuWas() {
    global 
    $resource$var2$var3;
    //mach was tolles

    DAvon würde ich dir allerdings schwer abraten. Die Gründe kannst du dir ergooglen, sind ne Menge
    Besser wäre es, du übergibst die $resourtce an die Funktion als Argument.

  3. #3
    Großmeister(in)
    Themenstarter
    Avatar von MyXoToD
    Registriert seit
    07.11.2007
    Ort
    Mainz
    Alter
    24
    Beiträge
    507
    Danke
    0
    Bekam 1 mal "Danke" in 1 Posting

    Standard AW: Variable plötzlich nicht mehr vorhanden

    Vielen dank jojo87, so klappt es. Hab es so gemacht das ich die Resource Variable übergebe
    Don't follow me, I run into walls.

  4. #4
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Variable plötzlich nicht mehr vorhanden

    Arbeitest du mit mehreren verschiedenen DB-Verbindungen parallel? Sonst kannst du $resource auch einfach weglassen.

    Edit: Da du dort mit $_COOKIE arbeitest und diese Werte vom Client kommen solltest du dringend mysql_real_escape_string verwenden.
    Und was mir noch auffällt, du führst den Query der in $last_hit_sql steht nie aus.

    Edit2: Achja, und Datum/Zeit sollte nich als Unix-Timestamp in der DB gespeichert werden. SQL stellt genügend passende Feldtypen dafür zu Verfügung, die eine Menge Vorteile bieten und keine Nachteile (von denen ich wüßte).
    Geändert von SinnlosS (12.10.2010 um 15:34 Uhr)
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  5. #5
    Großmeister(in)
    Themenstarter
    Avatar von MyXoToD
    Registriert seit
    07.11.2007
    Ort
    Mainz
    Alter
    24
    Beiträge
    507
    Danke
    0
    Bekam 1 mal "Danke" in 1 Posting

    Standard AW: Variable plötzlich nicht mehr vorhanden

    @Sinnlos: Nein ich arbeite bei diesem Projekt nur mit einer Datenbankverbindung. Für was genau ist dieses mysql_real_escape_string? Das mit dem nichtausgeführten Query ist mir auch aufgefallen Da hab ich wohl vergessen das zu tippen was ich mir gedacht hatte
    Ich sehe darin keinen Vorteil für mich das Datum und die Zeit nicht als Unix-Timestamp zu speichern. Aber danke für deine Vorschläge
    Don't follow me, I run into walls.

  6. #6
    Bandit
    Gast

    Standard AW: Variable plötzlich nicht mehr vorhanden

    Zitat Zitat von Santos Beitrag anzeigen
    Für was genau ist dieses mysql_real_escape_string?
    Ich könnte dir ja jetzt die Doku empfehlen, aber du als pfiffiges Kerlchen kommst bestimmt selber auf die Idee, dort mal nachzusehen, oder?

  7. #7
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Variable plötzlich nicht mehr vorhanden

    Zitat Zitat von Santos Beitrag anzeigen
    Für was genau ist dieses mysql_real_escape_string?
    Wie bandit schon sagt -> Doku

    Aber um mal ein kleines Beispiel zu bringen:
    Nimm mal an ein, ein Besucher manipuliert seinen Cookie, so dass sein Benutzername auf auf einmal so aussieht: '; DROP DATABASE;
    Wenn du das in deinen Query einsetzt sieht der so aus: SELECT passwort_hash,last_hit FROM ht_user WHERE username = ''; DROP DATABASE;
    Könnte unerwünschte Auswirkungen haben.
    mysql_real_escape_string sorgt dafür, dass entsprechende Zeichen ausreichend maskiert werden um sie gefahrlos in SQL-Statements benutzen zu können.
    D.h. JEDER Wert der vom Client kommt (also alles aus POST, GET, COOKIE) soll IMMER mit mysql_real_escape_string entschärft werden, bevor der Wert in einem SQL-Statement verwendet wird.

    Noch besser ist allerdings direkt mysqli oder pdo mit prepared Statements zu verwenden. Da wird das automatisch gemacht und du brauchst dich nicht mehr selber drum kümmern.
    Zitat Zitat von Santos Beitrag anzeigen
    Ich sehe darin keinen Vorteil für mich das Datum und die Zeit nicht als Unix-Timestamp zu speichern. Aber danke für deine Vorschläge
    Der einzige Fall in dem es keinen Unterschied macht ist der, wenn du in deinen PHP-Skripten auch ausschließlich den Unix-Timestamp verwendest und nicht mehr in andere Datumsformate umwandelst. Aber selbst dann könntest du, wenn du z.b. datetime als Feldtyp verwendest, in deinem SELECT-Statement einfach schreiben SELECT UNIX_TIMESTAMP(`mein_datetime_feld`) ... und bekommst das gleiche Ergebnis.
    Die SQL-Eigenen Feldtypen für Datum und Zeit zu verwenden hat zwei große Vorteile:
    1. Die Lesbarkeit in der Datenbank. Wenn du in phpmyadmin direkt mal was nachschauen willst, mußt du einen UNIX-Timestamp erstmal umständlich umrechnen um ein lesbares Datum zu erhalten (es sei denn du bist irgendein überkrasses Rechengenie und machst das auf einen Blick).
    2. Du kannst mit den Datumswerten direkt in deinem SQL-Statement schon wunderbar rechnen, alles ins passende Format bringen etc. Und das ist einiges schneller als die Berechnungen und Umformungen von PHP vornehmen zu lassen.
    Ein Beispiel mal aus einem aktuellen Projekt von mir, bei dem ich gerne mal sehen würde wie das jemand in einer Abfrage ohne weiteren Programmcode umsetzt, wenn er seine Daten als Unix-Timestamp speichert:
    Code:
    			SELECT 
    				id,resource_id,title,value,isRegular,timeMin,timeMax 
    			FROM 
    				schedule__resource_content
    			WHERE 
    				job_id=? 
    				AND
    				(
    					postDate=? 
    					OR
    					(
    						endDate>=?
    						AND
    						(
    							isRegular=1
    							OR
    							(DATE_FORMAT(postDate,'%w')=DATE_FORMAT(?,'%w') AND isRegular=2)
    							OR
    							(DATE_FORMAT(postDate,'%d')=DATE_FORMAT(?,'%d') AND isRegular=3)
    						)
    						AND
    						id NOT IN (SELECT pk_content_id FROM schedule__resource_exception WHERE pk_exceptDate=?)
    					)
    				)
    			ORDER BY
    				resource_id,postDate,timeMin,title ASC
    Es geht um die Ermittlung von Terminen an einem bestimmten Tag.
    Diese stehen in der Tabelle `schedule__resource_content`.
    Es gibt einmalige Termine (isRegular=0), tägliche Termine (isRegular=1), wöchentliche Termine (isRegular=2) und monatliche Termine (isRegular=3).
    Mit dieser einen Abfrage hole ich mir für einen bestimmten Tag alle Termine ohne weitere Abfragen zu starten oder in PHP noch selektieren zu müssen.
    Wie gesagt, das würde ich gerne mal sehen bei Speicherung des Datums als Unix-Timestamp (ich schließe nicht aus, dass es möglich ist, allerdings wüßte ich grad nicht wie und es wäre vermutlich etwas komplizierter und schlechter lesbar).


    Wenn du nur Hobby-mäßig kleinere Webseiten ohne komplexere Funktionalitäten entwickelst, und auch keine weitergehenden Ambitionen hast was das Programmieren angeht, dann verwende ruhig weiter den Unix-Timestamp, die Performance-Unterschiede werden sich bei simplen Seiten mit durchschnittlichen Besucherzahlen nicht bemerkbar machen.
    Falls du aber auf lange Sicht vorhast professioneller zu programmieren kann ich dir wirklich aus eigener Erfahrung raten so früh wie möglich solche Konventionen zu nutzen, denn sie machen durchaus Sinn. Und je mehr du dich an einen anderen Weg gewöhnst, desto schwerer wird es später sich das wieder abzugewöhnen.

    Ich weiß, das ist ein Thema auf dem ich gerne rumreite, aber es wird halt so oft "falsch" gemacht. Und mir konnte bisher noch niemand einen klaren Vorteil bei der Verwendung des Unix-Timestamps gegenüber den Datums-Feldtypen von SQL nennen.
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  8. #8
    Großmeister(in)
    Themenstarter
    Avatar von MyXoToD
    Registriert seit
    07.11.2007
    Ort
    Mainz
    Alter
    24
    Beiträge
    507
    Danke
    0
    Bekam 1 mal "Danke" in 1 Posting

    Standard AW: Variable plötzlich nicht mehr vorhanden

    Okay also wenn ich das richtig verstanden hab müsste ich das dann, jetzt mal ganz einfach dargestellt, so machen oder?

    PHP-Code:
    $username mysql_real_escape_string($_POST['username']);
    $query "SELECT last_hit FROM ht_user WHERE username = '{$username}'";
    mysql_query($query); 
    Don't follow me, I run into walls.

  9. #9
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Variable plötzlich nicht mehr vorhanden

    Jap, genau so.
    Und das mit allen in SQL-Statements verwendeten Daten die vom Client kommen.
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  10. #10
    Großmeister(in)
    Themenstarter
    Avatar von MyXoToD
    Registriert seit
    07.11.2007
    Ort
    Mainz
    Alter
    24
    Beiträge
    507
    Danke
    0
    Bekam 1 mal "Danke" in 1 Posting

    Standard AW: Variable plötzlich nicht mehr vorhanden

    Alles klar, danke für den Tipp Das werd ich mit Sicherheit noch einbauen.

    Da ich jetzt keinen neuen Thread eröffnen will und es auch eher nur eine nicht ganz so wichtige Frage ist, stell ich sie einfach mal hier...
    Vielleicht habt ihr ja eine Idee. Ich bin dabei eine Highscoreliste zu bauen. Geördnet wird dort nach "Geld". Wer das meiste Geld hat ist auf Platz 1. Natürlich will ich den Rang des Users auch auf seinem Profil anzeigen. Dort mach ich das zur Zeit so:
    PHP-Code:
    $rang_sql "SELECT COUNT(*) AS anzahl FROM ht_user WHERE geld > '{$user['geld']}' AND gesperrt = '0'";
    $rang_result mysql_query($rang_sql,$resource);
    $rang mysql_fetch_array($rang_result);
    $rang $rang['anzahl'] + 1
    In $user['geld'] steht das Geld des Users auf dessen Profil man sich derzeit befindet.
    Jetzt kommen wir zu meinem Problem dabei. Das hab ich schon ewig aber langsam nervt es mich Wenn mehrere Leute den selben Betrag an Geld haben, dann bekommen sie den selben Rang. Das ganze ist dann in etwas so:

    Spieler 1 ; 200€ ; Rang 1
    Spieler 2 ; 150€ ; Rang 2
    Spieler 3 ; 150€ ; Rang 2
    Spieler 4 ; 150€ ; Rang 2
    Spieler 5 ; 100€ ; Rang 5

    Vielleicht habt ihr ja eine Idee wie man das besser umsetzen könnte. Meine Lösung ist mit Sicherheit die schlechteste ^^
    Don't follow me, I run into walls.

Ähnliche Themen

  1. Url Datenübergabe funktioniert plötzlich nicht mehr
    Von Pascalus im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 6
    Letzter Beitrag: 05.01.2010, 17:54
  2. bild anzeigen... wenn nicht vorhanden, dann...
    Von Unregistriert im Forum HTML & CSS Forum
    Antworten: 2
    Letzter Beitrag: 24.11.2008, 22:57
  3. Fehler der anscheinend gar nicht vorhanden ist
    Von Cantara im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 04.07.2007, 21:14
  4. Session Variable ist plötzlich leer
    Von Poldi im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 03.01.2007, 12:07
  5. Plötzlich öfnet sich mein icq nicht mehr!
    Von Sandy im Forum Computer - Internet Forum
    Antworten: 12
    Letzter Beitrag: 21.06.2006, 08:24

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •