Mehrere Zeilen aus Datenbank abfragen und prüfen

Loddar1

Erfahrenes Mitglied
Ich habe eine DB mit ids und ips die ständig gefüllt wird.
Die Datenbank:
SQL:
ID        IP
1          1
2          2
3          5
1          4
Wenn jemand einen Download anklickt, wird die Download id und die User ip in die DB geschrieben.
Jetzt will ich vorher prüfen ob die gleiche ip schon die gleiche id runtergeladen hat.
Klappt mit der ersten Zeile auch ganz gut, aber es stehen ja 10 Zeilen oder mehr zur abfrage
Hier mal ein Code ausschnitt:

PHP:
$lodipid = mysql_fetch_array(mysql_query("SELECT id,ip FROM locdlip ORDER BY id ASC"));

$dbid=$lodipid['id'];
$dbip=$lodipid['ip'];
 
if(($_GET['id'] == $dbid) && ($ipdl == $dbip)){
     echo'<br/><h4 class="center1">Du hast den Download schon!</h4>';
   }
else
    {
Hier funktioniert der Download!
Wie mache ich jetzt die mehrfach abfrage?
 
Hallo Loddar1,

die mysql_-Funktionen wurden bereits in Version 5.5 entfernt und sollten nicht mehr genutzt werden.

Ich rate Dir dringend dies zu ändern und auf aktuelle Technologien umzurüsten.

PHP: PDO : http://php.net/manual/de/book.pdo.php


Die Variable $lodipid stellt ein array dar - entsprechend enthält es mehrere Zeilen - genau genommen alle Zeilen aus der Datenbank.

In Deinem Fall fehlt eine while respektive forEach-Schleife, die alle Zeilen durchgeht und nicht nur die erste.


Anderer Vorschlag:
Warum prüfst Du nicht schon beim MySQL-Query ob es Einträge gibt:

Bsp.:
SELECT id, ip FROM locdlip WHERE id = :id AND ip = :ip LIMIT 1

Mit der ::rowCount (http://php.net/manual/de/pdostatement.rowcount.php) erhälst Du nun die Anzahl der Treffer.
-> < 1 = IP + ID nicht vorhanden
-> > 0 = IP + ID bereits vorhanden

Liebe Grüße
 
Ich bin ein alter Mann, und wenn alle Jahre was neues kommt verstehe ich das nicht so schnell, ich verstehe ja schon das alte nicht richtig, sonst müßte ich ja nicht fragen.
Kannst du mir einen Vorschlag einer foreachschleife machen,
mit der hier:
PHP:
foreach ($lodipid as $locdlip) {
  echo "Wert: $locdlip<br/>\n";
}
kommt auch nur eine Zeile.
 
Hallo Loddar1,

war nur ein gut gemeinter Ratschlag.

Die Technik ist zwar veraltet, dennoch hier ein Beispiel, welches auf deinem Versuch aufbaut.

Nochmal der Hinweis: Die mysql_-Funktionen sind veraltet und sollten nicht mehr genutzt werden - spätestens wenn der Webhoster seine Server auf eine neuere .php-Version updatet, wird der Code nicht mehr funktionieren (abgesehen von den Sicherheitslücken)

Dein Ansatz:
PHP:
$array = mysql_fetch_array(mysql_query("SELECT id,ip FROM locdlip ORDER BY id ASC"));

if(is_array($array)){
    // Setze Zähler auf 0
    $entry = 0;
    foreach($array as $value){
        // Prüfe ob Nutzer-IP + Download-ID identisch zum Eintrag in der Datenbank sind
        if($value['id'] == $_GET['id'] && $value['ip'] == $ipdl){
            // Erhöhe Zählerstand
            $entry++;
        }
    }
  
    if($entry > 0){
        echo "Datei wurde bereits heruntergeladen";
    }else{
        echo "Download startet!";
    }
}else{
    echo "Kein Array";
}

Mein Ansatz:

Sieh es mir bitte nach, dass ich schon länger nicht mehr mit der Technik gearbeitet habe. Es kann also auch sein, dass der Code nicht sofort funktioniert.

PHP:
$error = 0;
$userIP = filter_input(INPUT_GET,'id');
$downID = $ipdl;


// Prüfe ob Wert eine IP
if (!filter_var($userIP, FILTER_VALIDATE_IP) === false) {
   $error++;
}
// Prüfe ob Download-ID ein Zahlenwert ist
if(is_numeric($downID)!==true){
    $error++;
}

// Prüfe ob Fehler aufgetreten sind
if($error==0){
    $sql = mysql_query("SELECT id,ip FROM locdlip WHERE id = ".$downID." AND ip = ".$userIP." LIMIT 1");
    if(mysql_num_rows($sql)>0){
        echo "Download bereits getätigt";
    }else{
        echo "starte Download";
    }
}
 
Dürfen die User die Datei nur 1 x runter laden? Wenn es nur 1 x gestattet ist, könntest du das ganze direkt beim auslesen der Downloads filtern, das nur Downloads angezeigt werden, welche noch nicht runter geladen wurden.


MySQL ist veral......aber das wurde ja schon erwähnt.

Was ist:

PHP:
filter_input(INPUT_GET,'id');

Dort wird ID mit IP vertauscht und sorgt eventuell für Chaos, aber auf jeden Fall sollte alles, was in der DB abgefragt/eingefügt wird, "entschärft" werden.
 
Tatsächlich, habe ich vertauscht.

Richtig wäre:
PHP:
$userIP = $ipdl;
$downID = filter_input(INPUT_GET,'id');

Liebe Grüße
 

Neue Beiträge

Zurück