Sponsor-Board.de

Normale Version: [MySQL] PHP gibt nur "Array" aus
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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-Code:
<?php
@mysql_connect(ServerBenutzerPasswort);
@
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"

Aaron schrieb:
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.

PHP-Code:
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

PHP-Code:
if (count(mysql_fetch_row($ergebnis)) == 1)
  {

   echo 
'Dieser key wurde bereits benutzt!';
  } 


könnte an dieser Selle funktionieren - oder

PHP-Code:
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 Biggrin

poste doch mal das von dir korrigierte Script.. mit mysql_num_rows

PHP-Code:
<?php
@mysql_connect(ServerBenutzerPW);
@
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:

PHP-Code:
Dankedass du 'TestProdukt' gekauftund aktiviert hastSQLSELECT COUNT(*) FROM testprodukt WHERE serial 'GZ30-WVG-FIES-35WQ' Resource id #3 | GZ30-WVG-FIES-35WQ 

PHP-Code:
<?php
@mysql_connect(ServerBenutzerPW);
@
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:

PHP-Code:
$sql "SELECT COUNT(*) FROM testprodukt WHERE serial = '{$serial}'"

Du zählst es dann machst du:

PHP-Code:
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-Code:
<?php
//Datenbank Verbindung herstelle
@mysql_connect(ServerBenutzerPW);
@
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';

        }

    }


Seiten: 1 2
Referenz-URLs