Beiträge von cottton

    Ich weiß, was Du falsch machst. Mit Deinen seltsamen Abkürzungen wie zB tbktid komme ich gerade nicht klar.
    siehe comments:

    HTML
    <select multiple class="form-control" size="7" name="add_kkty">
                                <?php
                                    $array = explode ( ',', $row['tbkkty'] );
                                    for ( $x = 0; $x < count ( $array ); $x++ ){
                                    echo "<option value='".$array[$x]."'"; // hier holst du jeden x-ten wert
                                    // if($row['tbktnd'] == $array){echo "selected";} 
                                    echo ">".$array[$x]."-".$row['tbktid']."-".$row['tbktnd']."</option>\n";} // hier gibst du immer den gleichen wert für tbktid und tbktnd aus
                                ?>
    </select>


    Normalerweise hat/holt/lädt man Daten in einem Array/Object
    und geht dann "foreach" durch.
    Dabei hast du einen Key und eine Value.

    Nun hast Du ja aber Dein "1,2,3" Datenbankfeld. Wie/Woher kommt denn da nun die Value - also der Name zum Schlüssel?

    Wie gesagt - keine Ahnung, was alle Deine Werte bedeuten.

    Was ist denn (jetzt noch) das Problem?
    Bei einem Select-Imput-Feld Kannst Du den angezeigten Namen, und den Schlüssel (key) als <option> angeben.

    Evtl hast Du keine key-name Kombination, da Du ja schreibst, dass Du "1, 2, 3" in der Tabelle in einem Feld anlegst.
    Wenn es keine weiteren Daten gibt, dann könntest Du eine key-key Kombi nutzen

    HTML
    <option value="key">key</option>

    wolf ya.Würde dann aber json nutzen (war da nicht mal irgendwas was serlialize nicht "kann", oder n bug?).
    Ansonsten ENUM oder ne Details Table.
    Oder, wenn es die Version erlaubt, mysql json: https://dev.mysql.com/doc/refman/5.7/en/json.html
    (hab ich selbst noch nicht ausprobiert, sieht aber gut aus)

    Germanikus
    Evtl hast Du den falschen Trenner:

    PHP
    explode ( ',', $row['tbkkty'] )


    Wenn Du implode mit ', ' (Komman Leerzeichen) nutzt, dann soltest Du auch diesen Trenner bei explode nutzen.

    Ist doch immer bis zum nächsten

    Evtl hab ichs falsch verstanden, aber Du hast geschrieben
    - Trennzeichen "- " (Minus,Leerzeichen)
    - bis (ausschließlich) zu dem nächsten Vorkommnis des Trennzeichens
    8|
    8o

    htmlspecialchars()
    Bissl Sicherheit muss sein =)

    PHP
    <button onclick="window.open('http://destinationlink.com/ref/<?php echo htmlspecialchars($urlPart[2]) ?>'); return false;">
        Banner klicken
    </button>


    Warum?
    Ruf mal in Deiner jetzigen Version das hier auf

    Code
    http://url.de/aaa/');alert(1);document.write('2/ccc


    Keine Ahnung voher woher die url kommt. Man sollte aber nicht mal den eigenen Daten trauen.

    edit: voher ... was is denn mit mir los :D

    Oder http://php.net/manual/de/function.str-replace.php

    PHP
    str_replace('Hallo - ', '', $string);
    // str_replace('search, replace, string);


    Oder mehrere Zugrleich

    PHP
    $search = array('Hallo - ', 'HalloA - ');
    str_replace($search, '', $string);


    Das funktioniert aber nur dann, wenn es immer ein "Hallo - ", "HalloA - " usw ist.
    Sobald es zB ein "Hallo-" oder "hallo a - " (...) ist, dann das was wolf sagt (regex ^= mehr Möglichkeiten).

    Bitte Code einrücken -- so sieht doch keiner durch.

    Auf Anhieb sehe ich einen groben Schnitzer:

    PHP
    $stmt->execute();
    if(!$stmt->execute()) {
    print_r($stmt->errorInfo());
    }


    2 mal execute.

    Zur Frage:
    Du setzt ein Cookie in Zeile 2 -- OK
    Du prüfst in Zeile 19, ob $_COOKIE['login_user'] gesetzt ist -- NICHT ok

    Warum:
    $_COOKIE wird erst gesetzt sein, wenn die Setie erneut geladen/aufgerufen wird.
    $_COOKIE beinhaltet in diesem Moment den Zustand als der Benutzer die Seite aufgerufen hatte.

    Eine Lösung wäre:

    PHP
    /* functioniert nicht if(!isset($_COOKIE['login_user'])) {
    session_destroy();
    unset($_SESSION['email']);
    header('location: page.php');*/
    if(!$user->is_loggedin()){ 
        header('location: page.php');
    }

    als Namen (key) nimmst Du einfach einen String der Dir gefällt.
    Hier im Forum zB gibt es ein Cookie: wcf_userID
    als Wert (Value) nimmst Du zB die user_id (bei Dir glaub ich u_id) und den Passwort-hash (den, den Du in der db stehen hast).

    So kannst Du das Cookie als Login sehen/verstehen (was es am Ende auch ist).

    gibt es Login $_POST? -> lade user per name/email ... konnte gefunden werden? -> check email/name und pw -> ok? -> setze user als logged in
    ODER
    gibt es Session? -> lade user per id ... konnte gefunden werden? -> check pw-hash -> ok? -> setze user als logged in
    ODER
    gibt es Cookie? -> lade user per id ... konnte gefunden werden? -> check pw-hash -> ok? -> setze user als logged in

    Und in allen Scripten fragst Du dann einfach ab, ob user->isLoggedIn()

    Hehe - ja. Deine $_SESSION wird wohl nur beim Login erstellt.
    Das sollte selten vorkommen - also so ein Szenario. Man ändert ja nicht ständig was am Code.
    Beim Arbeiten am Code solltest Du aber immer mal wieder vom Anfang aus gehen -- also den niedrigsten Stand annehmen (neuer Benutzer, nicht eingeloggt, keine Session ect).

    BTW Es gibt eine Möglichkeit sowas zu "verhindern". Ich bin Freund von einfachsten cookies/sessions.
    - user logged in -> setze cookie/session mit (nur) id und hash
    - hat user cookie/session und ist cookie/session valid -> db-loadUserById

    Nachteil: mehr db-Abfragen bei jedem Seitenaufruf

    Edit: wollte das dann doch nochmal bissl besser erklären:
    Eine Session ist eine Datei auf dem Server. Ein Cookie im Browser enthält eine id (oder ohne Cookie gibts auch die url-session-id).
    Durch diese id findet der Server die zugehörige Datei. Und in dieser Datei findet sich alles wieder, was Du in $_SESSION[...][...][...]... schreibst.

    Kurz:
    Browser meldet sich beim Server mit id abcdef12345... (via "session-cookie" oder url-session)
    server sucht nach Datei abcdef12345...
    Server lädt Inhalt dieser Datei
    am Ende hast Du via PHP Zugriff auf $_SESSION...

    Jetzt müsste man abwiegen: nur ids in der Session, und bei jedem Seitenaufruf die db abfragen, oder gleich alle Daten in die Session?
    Ein Zugriff (IO) auf die Platte erfolgt sowieso - also könnte man sich einen db Zugriff sparen.
    Aber die Daten in der Session (-Datei) könnten "veraltet" sein. Außerdem sind sie redundant -- so ziemlich alles (name, email, ...) steht in der Session UND in der db.

    Wie man es macht, muss man (sicherlich) für sich selbst entscheiden.

    Fehlermeldung?
    if($user->is_loggedin())
    is denn user logged in?
    Warum bindParam? Also ist ok, aber ich finde diese ? -Platzhalter irgendwie nervig :D (Du nutzt PDO, hast also den Vorteil (gegenüber mysqli_), dass Du :platzhalter_statt_fragezeichen verwenden kannst)
    Gibts Fehler bei prepare oder execute?
    Was steckt in $row und/oder in $coins (var_dump($row) zB)

    Solange Du Platzhalter verwendest - keine Injection möglich.

    Zitat von http://php.net/manual/de/pdo.prepared-statements.php


    Die Parameter für Prepared Statements müssen nicht maskiert werden. Der Treiber übernimmt das automatisch. Wenn eine Anwendung ausschließlich Prepared Statements benutzt, kann sich der Entwickler sicher sein, dass keine SQL-Injection auftreten wird. (Wenn aber trotzdem andere Teile der Abfrage aus nicht zuverlässigen Eingaben generiert werden, ist dies immer noch möglich.)


    Es ist sicher, solange man es richtig anwendet.

    EDIT: zu der id
    Wenn Du die id im Ablauf brauchst, dann ja - klar.