Hallo liebes SB!
Ich versuche gerade mit PHP auf meine Datenbank, wo verschiedener Keys gespeichert sind, zuzugreifen und auf gültigkeit zu überprüfen.
<?php
@mysql_connect(Server, Benutzer, Passwort);
@mysql_select_db(keys);
$serial = $_POST['Key'];
$sql = "SELECT COUNT(*) FROM testprodukt WHERE serial = '{$serial}'";
$result = mysql_query($sql);
echo mysql_error();
$test = mysql_fetch_row($result);
if (mysql_fetch_row($result) == 0)
{
echo"Dieser Key ist ungültig!SQL: $sql | $result | $test | $serial";
echo mysql_error();
}
else
{
$used = "SELECT used FROM testprodukt WHERE serial = '{$serial}'";
$ergebnis = mysql_query($used);
if (mysql_fetch_row($ergebnis) == 1)
{
echo 'Dieser key wurde bereits benutzt!';
}
else
{
echo"Danke, dass du 'TestProdukt' gekauft, und aktiviert hast! SQL: $sql | $result | $serial";
echo mysql_error();
mysql_query("UPDATE testprodukt SET used = 1 WHERE serial = '{$serial}'");
mysql_query("UPDATE testprodukt SET date_activated = NOW() WHERE serial = '{$serial}'");
}
}
Die Keyeingabe erfolgt über eine einfache HTML Seite.
Nun habe ich aber das Problem, dass MySQL als Antwort auf die Frage "schon vorhanden?", "Array" ausgibt.
Eigentlich sollte es 1 für "Schon vorhanden" oder 0 für "Nicht vorhanden" antworten...
Ich hoffe ihr könnt mir helfen...
PS: Für denjenigen, der mir dieses Problem löst, warten 300 SB-Punkte.
Danke für eure Antworten!
anstatt "mysql_fetch_row" nimm mal "mysql_num_rows"
anstatt "mysql_fetch_row" nimm mal "mysql_num_rows"
Schon probiert...
Leider antwortet MySQL dann mit "Resource id #3"
<?php
mysql_connect(Server, Benutzer, Passwort);
mysql_select_db(keys);
$serial = mysql_real_escape_string($_POST['Key']);
$sql = "SELECT * FROM testprodukt WHERE serial = '".$serial."'";
$result = mysql_query($sql);
echo mysql_error();
$test = mysql_fetch_row($result);
if(mysql_num_rows($result) <= 1)
{
echo"Dieser Key ist ungültig!SQL: $sql | $result | $test | $serial";
echo mysql_error();
}
else
{
$used = "SELECT used FROM testprodukt WHERE serial = '".$serial."'";
$ergebnis = mysql_query($used);
if (mysql_num_rows($ergebnis) >= 1)
{
echo 'Dieser key wurde bereits benutzt!';
}
else
{
echo"Danke, dass du 'TestProdukt' gekauft, und aktiviert hast! SQL: $sql | $result | $serial";
echo mysql_error();
mysql_query("UPDATE testprodukt SET used = 1 WHERE serial = '".$serial}."'");
mysql_query("UPDATE testprodukt SET date_activated = NOW() WHERE serial = '".$serial}."'");
}
}
Hallo MMS3 Admin,
ich hoffe, dass dir bewusste ist dass folgender Teilabschnitt nicht funktionieren kann.
if (mysql_fetch_row($ergebnis) == 1)
{
echo 'Dieser key wurde bereits benutzt!';
}
Du kannst eine Arrayabfrage (mysql_fetch_row) nicht mit einem "==" (und numerischer Wert) Operand abfragen - das Statement
if (count(mysql_fetch_row($ergebnis)) == 1)
{
echo 'Dieser key wurde bereits benutzt!';
}
könnte an dieser Selle funktionieren - oder
if (mysql_num_rows($ergebnis) == 1)
{
echo 'Dieser key wurde bereits benutzt!';
}
kann hier funktionieren. ([Link: Registrierung erforderlich] --> Rückgabewert)
Alternativ zu 0, 1 etc versuch doch mal true und false.
@Aron: Serverfehler... Kann das Script so leider nicht testen.
@Ultimate-Servers: Gleicher Fehler... "Resource id #3"
@Storage-Base.de: Glaube das MySQL nur 1,0 als True, False annimmt.
kann sein, habs hier im Editor geschrieben
poste doch mal das von dir korrigierte Script.. mit mysql_num_rows
<?php
@mysql_connect(Server, Benutzer, PW);
@mysql_select_db(keys);
$serial = $_POST['Key'];
$sql = "SELECT COUNT(*) FROM testprodukt WHERE serial = '{$serial}'";
$result = mysql_query($sql);
echo mysql_error();
$test = mysql_fetch_row($result); //Dient als Fehlerausgabe
if (mysql_num_rows($result) == 0)
{
echo"Dieser Key ist ungültig!SQL: $sql | $result | $test | $serial";
echo mysql_error();
}
else
{
$used = "SELECT used FROM testprodukt WHERE serial = '{$serial}'";
$ergebnis = mysql_query($used);
if (mysql_num_rows($ergebnis) == 1)
{
echo 'Dieser key wurde bereits benutzt!';
}
else
{
echo"Danke, dass du 'TestProdukt' gekauft, und aktiviert hast! SQL: $sql | $result | $serial";
echo mysql_error();
mysql_query("UPDATE testprodukt SET used = 1 WHERE serial = '{$serial}'");
mysql_query("UPDATE testprodukt SET date_activated = NOW() WHERE serial = '{$serial}'");
}
}
Komisch ist außerdem:
Gebe ich nun einen validen key ein, so meldet er, er sei schon benutzt. Gebe ich einen Ungültigen ein, meldet er:
Danke, dass du 'TestProdukt' gekauft, und aktiviert hast! SQL: SELECT COUNT(*) FROM testprodukt WHERE serial = 'GZ30-WVG-FIES-35WQ' | Resource id #3 | GZ30-WVG-FIES-35WQ
<?php
@mysql_connect(Server, Benutzer, PW);
@mysql_select_db(keys);
$serial = $_POST['Key'];
$sql = "SELECT `id` FROM `testprodukt` WHERE BINARY `serial` = '$serial'";
$result = mysql_query($sql) OR die(mysql_error());
if (!mysql_num_rows($result))
{
echo"Dieser Key ist ungültig!SQL: $sql | $result | $test | $serial";
echo mysql_error();
}
else
{
$used = "SELECT `id` FROM `testprodukt` WHERE BINARY `serial` = '$serial' AND `used` = 1";
$ergebnis = mysql_query($used);
if (mysql_num_rows($ergebnis))
{
echo 'Dieser key wurde bereits benutzt!';
}
else
{
echo"Danke, dass du 'TestProdukt' gekauft, und aktiviert hast! SQL: $sql | $result | $serial";
echo mysql_error();
mysql_query("UPDATE testprodukt SET used = 1 WHERE serial = '{$serial}'");
mysql_query("UPDATE testprodukt SET date_activated = NOW() WHERE serial = '{$serial}'");
}
}
So würde ich es mal versuchen.
Dein Problem:
$sql = "SELECT COUNT(*) FROM testprodukt WHERE serial = '{$serial}'";
Du zählst es dann machst du:
if (mysql_num_rows($result) == 0)
Du willst damit die Datensätze zählen, was vermutlich aber nicht klappt da ja bereits gezählt wurde.
Auch solltest du für den Code BINARY nutzen, die Angabe sorgt nämlich dafür dass der Code Case Sensitive ist.
Ich habe auch solche Dinge wie "== 1" durch einfach "if(mysql_query())" bzw "if(!mysql_query())" ersetzt.
//EDIT:
Habs mal selbst geschrieben - das wäre meine Vorstellung von dem Code:
<?php
//Datenbank Verbindung herstelle
@mysql_connect(Server, Benutzer, PW);
@mysql_select_db(keys);
//POST filtern
$serial = mysql_real_escape_string($_POST["key"]);
//Abfrage aufbauen
$sql = mysql_query("SELECT `id` FROM `testprodukt` WHERE BINARY `serial` = '$serial'") OR die(mysql_error());
//Abfragen ob Key vorhanden
if(!mysql_num_rows($sql)) {
echo 'Key ungültig';
//Wenn vorhanden
} else {
//Abfragen ob bereits genutzt
$used = mysql_query("SELECT `id` FROM `testprodukt` WHERE BINARY `serial` = '$serial' AND `used` = '1'");
if(mysql_num_rows($used)) {
echo 'Wurde bereits benutzt';
//Wenn nicht
} else {
//Daten Updaten und Meldung aufgeben
if(mysql_query("UPDATE `testprodukt` SET `used` = '1', `date_activated` = NOW() WHERE BINARY `serial` = '$serial'")) {
echo 'vielen Dank!';
//Wenn Fehler bei Update
} else {
echo 'Der Code konnte leider nicht aktiviert werden';
}
}
}