MySQL Problem

FingerSkill

Erfahrenes Mitglied
Hoi,
ich hab folgenden Quellcode:

PHP:
public function get_activateForm($activationcode)
	{
	  require_once('functions/check_numchar.func.php');
	  if(check_numchar($activationcode))
	  {
	    $sql = 'SELECT
	                `LoginName`
		        FROM
			        `SignUp`
			    WHERE
			        `ActivationCode` = "' . $activationcode . '" LIMIT 1';
					
		require_once ('classes/mysqlresult.class.php');
		$dbresult = new MySQLResult($db,$sql);
		$user = $dbresult->fetch();
		if(!empty($user))
		{.............

Jedoch bekomme ich immer wenn PHP keine Zeile mit

PHP:
"WHERE `ActivationCode` = "' . $activationcode . '" LIMIT 1';"

findet eine Fehler, und zwar folgenden:

Code:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/sda/home/u0006445618/public_html/devman/classes/mysqlresult.class.php on line 61

Hier nochmal der Code der Methode fetch():

PHP:
public function fetch()
	{
	  $this->query = mysql_query($this->query);
	
	  if($row = mysql_fetch_array($this->query, MYSQL_BOTH))
	  {
	    return $row;
	  }
	  else if ($this->size() > 0)
	  {
	    mysql_data_seek($this->query, 0);
		return false;
	  }
	  else
	  {
	    return false;
	  }
	}

und hier der Code von der Methode size() da hier der Fehler auftritt:

PHP:
public function size()
	{
	  $this->query = mysql_query($this->query);
	
      return mysql_num_rows($this->query);  //Zeile 61 der Datei "mysqlresult.class.php"
	}

Ich hoffe ihr versteht das Problem und koennt mir helfen.

Gruss Finga
 
Ich würde erstmal schauen, ob beim Query nicht zufällig ein Fehler auftritt, wodurch keine Ressource fürs mysql_num_rows() zur Verfügung steht ( or die(mysql_error()); )

Wenn da keine Fehler auftreten, würde ich die RETURN Zeile abändern.

PHP:
public function size()
    {
      $this->query = mysql_query($this->query) or die(mysql_error());
    
      return (mysql_num_rows($this->query) > 0) ? mysql_num_rows($this->query) : (int)0;
//      return mysql_num_rows($this->query);  //Zeile 61 der Datei "mysqlresult.class.php"
    }

edit:

Halt, wieder Code nicht genau angeschaut.

in der fetch() Methode fürs du den SQL Query schon aus und legst das Ergebniss (Ressource) in $this->query ab.
In der Size() Methode führst du wieder ein Query aus, allerdings als Grundlage die Ressource ($this->query).
Nimm die Zeile
PHP:
$this->query = mysql_query($this->query);
in size() mal raus, bzw auskommentieren.

Wenn es das auch nicht ist, sollte ich doch mal ein Mittagsschlaf machen ;)
 
Zuletzt bearbeitet:
Dann passiert nichts.

Das was ich eigenartig finde ist, dass wenn eine Zeile in der Datenbank gefunden wird alles super funktioniert und wenn nicht kommt die oben genannte Fehlermeldung.
 
PHP:
"WHERE `ActivationCode` = "' . $activationcode . '" LIMIT 1';"

ist falsch :)

Normale SQL Anweisung ist ja so:

"WHERE `ActivationCode` = 'code' 'LIMIT 1'

du setzt es grade falsch ein, versuch mal das:

PHP:
"WHERE `ActivationCode` = '" . $activationcode . "' LIMIT 1";
 
Wenn nichts passiert, ist es auch schonmal kein Fehler ;)

In deiner Abfrage aus der DB Klasse;
PHP:
 else if ($this->size() > 0)
  {
    mysql_data_seek($this->query, 0);
    return false;   // <<<<<<<
  }

wird ein FALSE zurückgegeben.
Dein Hauptcode lautet weiter:

PHP:
$dbresult = new MySQLResult($db,$sql);
$user = $dbresult->fetch(); 
if(!empty($user))
  {.............

In dem Fall wäre $user == FALSE also trifft diese IF Abfrage nicht. Keine Ahnung was passieren soll, wenn FALSE ist (code sehen wir nicht).
Hast du denn auch mal selber was probiert? Mit nem paar echo's, var_dump() usw Fehler zu suchen? Welchen Wert hat denn zum Beispiel $user vor dem IF Abfrage? (var_dump($user);) ist er wirklich false wenn kein DB Eintrag gefunden wird? Hast du das mal mit dem "or die(mysql_error));" versucht?
 
Ich post nochma den Code was passieren sollte jedoch passiert auch nicht else.

PHP:
public function get_activateForm($activationcode)
	{
	  require_once('functions/check_numchar.func.php');
	  if(check_numchar($activationcode))
	  {
	    $sql = 'SELECT
	                `LoginName`
		        FROM
			        `SignUp`
			    WHERE
			        `ActivationCode` = "' . $activationcode . '" LIMIT 1';
					
		require_once ('classes/mysqlresult.class.php');
		$dbresult = new MySQLResult($db,$sql);
		$user = $dbresult->fetch();
		if(!empty($user))
		{
          echo'
	  <p>
	  <br />
	  <br />
	  <form id="SignUp" name="SignUp" method="post" action="' . $_SERVER['PHP_SELF'] . '">
	  <table align="center" width="40%" border="0" cellspacing="0" cellpadding="0">
	    <tr>
		  <td width="60%"><p class="Content">Login-Name:</p></td>
		  <td width="60%"><div align="right">' . $user['LoginName'] . '<input type="hidden" name="code" value="' . $activationcode . '" /></div></td>
		</tr>
		<tr>
		  <td width="60%"><p class="Content">Passwort:</p></td>
		  <td width="60%"><div align="right"><input type="password" name="Password1" /></div></td>
		</tr>
		<tr>
		  <td width="60%"><p class="Content">Passwort (Wiederholung):</p></td>
		  <td width="60%"><div align="right"><input type="password" name="Password2" /></div></td>
		</tr>
		<tr>
		  <td><p></p></td>
		  <td><p></p></td>
		</tr>
		<tr>
		  <td width="60%"><input name="reset" type="reset" value="Reset" /></td>
		  <td width="60%"><div align="right"><input name="submit" type="submit" value="Aktivieren" /></div></td>
		</tr>
	  </table>
  </form></p>';
        }
      }else{
	    echo '<p>
	  <br />
	  <br />Der Aktivierungscode ist ung&uuml;ltig.</p>';
	  }
	}



edit: @Eyüp: naja nachdem der Code nur nicht Funktioniert wenn keine Zeile gefunden wird, und alles super t wenn eine Zeile identisch ist kann ich mir nicht vorstellen das da was in der Abfrage falsch ist.
 
Ich sehe gerade keinen Fehler wenn ich ehrlich bin, aber vielleicht findet ein anderer was.

Da ich im Moment keine Zeit habe, das alles lokal hier nachzubauen und zu testen, muss ich dich bitten einfach mit echo und var_dump die entscheidenen Schritte zu debuggen für den Fall das kein Ergebniss in der DB gefunden wird.
 
Noe ist nicht möglich bevor die Variable in den MySQL Query kommt wird ueberprueft ob sie ausschliesslich aus Buchstaben und Ziffern besteht trifft dies nicht zu wird nicht abgefragt.
 
Zurück