Sponsor-Board.de
[MySQL] PHP gibt nur "Array" aus

+- Sponsor-Board.de (https://www.sponsor-board.de)
+-- Forum: Community (/forumdisplay.php?fid=56)
+--- Forum: Hilfe (/forumdisplay.php?fid=102)
+---- Forum: Scripting (/forumdisplay.php?fid=108)
+---- Thema: [MySQL] PHP gibt nur "Array" aus (/showthread.php?tid=41008)


[MySQL] PHP gibt nur "Array" aus - MMS3 Admin - 29.07.2013 08:23

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!


RE: [MySQL] PHP gibt nur "Array" aus. - Aaron - 29.07.2013 08:27

anstatt "mysql_fetch_row" nimm mal "mysql_num_rows"


RE: [MySQL] PHP gibt nur "Array" aus. - MMS3 Admin - 29.07.2013 08:29

Aaron schrieb:
anstatt "mysql_fetch_row" nimm mal "mysql_num_rows"

Schon probiert...

Leider antwortet MySQL dann mit "Resource id #3"


RE: [MySQL] PHP gibt nur "Array" aus - Aaron - 29.07.2013 08:48

<?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}."'");
}
}


RE: [MySQL] PHP gibt nur "Array" aus - DebianDEV - 29.07.2013 08:50

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)


RE: [MySQL] PHP gibt nur "Array" aus - Storage-Base.de - 29.07.2013 08:52

Alternativ zu 0, 1 etc versuch doch mal true und false.


RE: [MySQL] PHP gibt nur "Array" aus - MMS3 Admin - 29.07.2013 08:57

@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.


RE: [MySQL] PHP gibt nur "Array" aus - Aaron - 29.07.2013 09:00

kann sein, habs hier im Editor geschrieben Biggrin

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


RE: [MySQL] PHP gibt nur "Array" aus - MMS3 Admin - 29.07.2013 09:02

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 




RE: [MySQL] PHP gibt nur "Array" aus - Storage-Base.de - 29.07.2013 09:54

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';

        }

    }





RE: [MySQL] PHP gibt nur "Array" aus - MMS3 Admin - 29.07.2013 10:01

@Storage-Base: Jetzt kommt der Fehler:

PHP-Code:
Unknown column 'id' in 'field list' 




RE: [MySQL] PHP gibt nur "Array" aus - Storage-Base.de - 29.07.2013 10:03

Der Fehler kommt daher, da ich nicht weiß ob du ein ID mit AI und PK nutzt.

Ich mache als erstes immer ein ID Feld welches AI und PK hat - auch wenn ich es nicht brauche, so bin ich auf der sicheren Seite.

`id` kannst du aber auch durch ein vorhandenes Feld in der MySQL Datenbank ersetzen - ich kenne deine Struktur nicht.

Hab meinen Post eben noch mal korrigiert und deinen Code neu verfasst:

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';

        }

    }





RE: [MySQL] PHP gibt nur "Array" aus - MMS3 Admin - 29.07.2013 10:09

@Storage-Base: ID, AI und PK sagt mir gar nichts... Bin neu im Gebiet PHP und SQL.

Um es vielleicht zu vereinfachen habe ich hier mal die Datenbank "keys":

PHP-Code:
CREATE TABLE IF NOT EXISTS `testprodukt` (
  `
serialvarchar(40) DEFAULT NULL,
  `
productvarchar(20) DEFAULT NULL,
  `
datumdate DEFAULT NULL,
  `
usedtinyint(4) DEFAULT NULL,
  `
date_activateddate DEFAULT NULL,
  
UNIQUE KEY `serial_2` (`serial`),
  
KEY `serial` (`serial`)
ENGINE=InnoDB DEFAULT CHARSET=utf8




RE: [MySQL] PHP gibt nur "Array" aus - Storage-Base.de - 29.07.2013 10:13

Ach, notfalls - einfach anstelel von `id` ein * setzen.

Also:

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 * 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 * 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';

        }

    }



AI steht für Auto Increment - automatisches hoch zählen.
PK steht für Primary Key.

Durch die Kombination von AI und PK hast du ein Feld welches einmalig ist (PK) und sich von alleine, bei jeder neuen Zeile hoch zählt (AI) ohne dein zu tun. Bei einem Insert wird dann einfach auf das ID Feld Value "NULL" angewandt.

So hast du immer ein Feld auf welches du dich beziehen kannst, dessen Format du kennst und du sonst nichts weiter brauchst. Wenn du dein Script dann immer nach ID baust, was dann Update und Delete angeht - bist du eigentlich immer auf der sicheren Seite das die Aktion auch ausgeführt wird.


RE: [MySQL] PHP gibt nur "Array" aus - MMS3 Admin - 29.07.2013 10:15

Danke @Storage-Base.de!

Du hast mir soeben den Tag gerettet Smile