php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.05.2005, 13:29  
Benutzer
 
Registriert seit: 10.12.2003
Beiträge: 79
Schiedsrichter ist zur Zeit noch ein unbeschriebenes Blatt
Standard Function gibt immer falschen Wert zurück

Hallo,

ich benutze folgende Funktion
Code:
	function check_public($parentid) {
			$public= "true";
			$sql = "SELECT id, parent_id, public from product_categories where id=$parentid";	
			$result = mysql_query($sql);
			$row = mysql_fetch_array($result); 
			if ( $row['public']== 0 ) {
				$publicwert = "false";
			} else {
				if ( $parentid > 0  ) {
					check_public($row['parent_id']);	
				} else {
				}
			}
		return $publicwert;
	}
um zu überprüfen ob im Tabellenfeld public eine 0 steht. Dies soll so lange passieren bis im Tabellenfeld parent_id eine 0 steht (Dann ist die oberste Ebene erreicht).
Ich bekomme hier aber jedesmal den Wert true zurück, obwohl er nachweisslich in die erste IF-Bedingung reingeht.

Kann mir da vielleicht jemand weiterhelfen, vielleicht sehe ja den Wald vor lauter Bäumen nicht.

Jürgen
Schiedsrichter ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 18.05.2005, 13:31  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

??
wie siehts damit aus:

error-reporting
Zum testen von Scripts setzt man normalerweise am anfang des scripts (oder direkt in einer config-datei die immer Includet wird)
PHP-Code:
error_reporting(E_ALL); 
damit werden dann alle Fehler ausgegeben.
Mögliche Fehler die dann auftreten und wie man sie beheben kann:
Notice: Use of undefined constant ...
Notice: Undefined variable ...

mysql error
man sollte in seinen Scripten immer mysql_error() verwenden, in etwa so:
PHP-Code:
$sql "SELECT feld1,feld2 FROM table WHERE id=5";
$result mysql_query($sql) or die(mysql_error().'
Query: '
.$sql); 
robo47 ist offline  
Alt 18.05.2005, 13:34  
Gast
 
Beiträge: n/a
Standard Re: Function gibt immer falschen Wert zurück

Zitat:
Zitat von Schiedsrichter
Hallo,

ich benutze folgende Funktion
PHP-Code:
<?php
    
function check_public($parentid) {
            
$public"true";
            
$sql "SELECT id, parent_id, public from product_categories where id=$parentid";    
            
$result mysql_query($sql);
            
$row mysql_fetch_array($result); 
            if ( 
$row['public']== ) {
                
$publicwert "false";
            } else {
                if ( 
$parentid 0  ) {
                    
check_public($row['parent_id']);    
                } else {
                }
            }
        return 
$publicwert;
    }
?>
um zu überprüfen ob im Tabellenfeld public eine 0 steht. Dies soll so lange passieren bis im Tabellenfeld parent_id eine 0 steht (Dann ist die oberste Ebene erreicht).
Ich bekomme hier aber jedesmal den Wert true zurück, obwohl er nachweisslich in die erste IF-Bedingung reingeht.

Kann mir da vielleicht jemand weiterhelfen, vielleicht sehe ja den Wald vor lauter Bäumen nicht.

Jürgen
Du hast eine rekursive Funktion - ruft sich selber auf - aber wenn du in dem ersten teil landest, die funktion wieder aufrufst und diese false zurückgibt, wird DIESES Ergebnis verworfen... .
Vielleicht solltest du den auch aufbewahren ?
 
Alt 18.05.2005, 13:35  
Gast
 
Beiträge: n/a
Standard

so lang mach ich ja noch kein PHP, aber kann es sein, dass es deshalb keinen wert gibt, weil die var vorher noch nicht vorhanden war?

Bau doch mal $publicwert = "" oder $publicwert = "true" vor oder nach $public = "true" ein. Denn die Variable wird ja das erste mal nur im IF block angesprochen.
 
Alt 18.05.2005, 13:41  
Benutzer
 
Registriert seit: 10.12.2003
Beiträge: 79
Schiedsrichter ist zur Zeit noch ein unbeschriebenes Blatt
Standard

also wir haben bei uns in der Arbeit die ZEN Entwicklungsumgebung. Dort ist auch ein Debugger dabei. Es funktioniert alles einwandfrei. Dort kann man schrittweise die Anweisungen abarbeiten. jedoch beim letzten



PHP-Code:
return $publicwert 
macht der Debugger etwas komisches. Er führt dieses return zweimal aus. beim ersten mal hat er noch den ricgtigen wert(false). beim zweiten mal hat er dann auf einmal den Wert (true).
Schiedsrichter ist offline  
Alt 18.05.2005, 13:47  
Gast
 
Beiträge: n/a
Standard

warum machst du eigentlich nicht folgendes?

PHP-Code:
<?php
   
function check_public($parentid) {
         
$public"true";
         
$sql "SELECT id, parent_id, public from product_categories where id=$parentid";   
         
$result mysql_query($sql);
         
$row mysql_fetch_array($result);
         if ( 
$row['public']== )
            return 
false;
         if ( 
$parentid 0  ) {
               
check_public($row['parent_id']);   
         } else {
         }
      return 
$publicwert;
   }
?>
P.S.: return "false" -> string false = true
return false -> bool false = false
 
Alt 18.05.2005, 13:57  
Benutzer
 
Registriert seit: 10.12.2003
Beiträge: 79
Schiedsrichter ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das hat leider auch nicht den gewünschten Erfolg gebracht. jetzt bringt er mir immer TRUE zurück
Schiedsrichter ist offline  
Alt 18.05.2005, 14:02  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

bis auf die tatsache, dass mir die augen tränen, wenn ich sehe, wie hier die arme mysql-datenbank für das unwissen anderer mit rekursiven abfragen bestraft wird, wäre mein korrekturvorschlag folgender:

PHP-Code:
<?php
function check_public($parentid) {
    
$sql "SELECT id, parent_id, public from product_categories where id=" .$parentid;   
    
$result mysql_query($sql);
    
$row mysql_fetch_array($result);
    if ( 
$row['public']== ) {
        return 
false;
    }
    if(
$parentid 0) {
        return 
check_public($row['parent_id']);
    }
    return 
true;

?>
axo ist offline  
Alt 18.05.2005, 14:13  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von axo
bis auf die tatsache, dass mir die augen tränen, wenn ich sehe, wie hier die arme mysql-datenbank für das unwissen anderer mit rekursiven abfragen bestraft wird, wäre mein korrekturvorschlag folgender:

PHP-Code:
<?php
function check_public($parentid) {
    
$sql "SELECT id, parent_id, public from product_categories where id=" .$parentid;   
    
$result mysql_query($sql);
    
$row mysql_fetch_array($result);
    if ( 
$row['public']== ) {
        return 
false;
    }
    if(
$parentid 0) {
        return 
check_public($row['parent_id']);
    }
    return 
true;

?>
Bei einzeiligen Anweisungen innerhalb einer if-Bedingung kann man die Klammern weglassen.
@Schiedsrichter: achte darauf, das du das false nicht in "" schreibst.
 
Alt 18.05.2005, 14:18  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Bei einzeiligen Anweisungen innerhalb einer if-Bedingung kann man die Klammern weglassen.
danke für die info.
axo ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
GD-Spezialisten gesucht....wer kann helfen? rezix PHP Tipps 2008 12 26.02.2008 17:55
Call to a member function on a non-object Riks PHP Tipps 2007 20 10.02.2007 22:59
nach grösstem (unbekannten) Wert suchen lindner Datenbanken 2 20.08.2006 22:13
Wie diesen Wert in eine DB einfügen? Mike² Datenbanken 5 29.03.2006 23:57
array als Return wert aus einer Function heraus PHP-Fortgeschrittene 7 09.02.2006 22:46
Funktion &amp;quot;in_array&amp;quot; gibt falschen Wert zurück? PHP-Fortgeschrittene 4 04.02.2006 18:47
array verarbeitung (schlag auf den hinterkopf) PHP Tipps 2007 9 16.11.2005 11:37
function in einer function - help! PHP Tipps 2005-2 4 25.10.2005 00:20
minus wert, plus wert in variable nutzen PHP Tipps 2005-2 5 22.10.2005 19:15
Dropdown gibt falschen Wert an DB PHP Tipps 2005-2 6 30.08.2005 10:53
kleinsten und größten wert ermitteln niffi PHP Tipps 2005 14 26.04.2005 12:42
[Erledigt] OOP: function in eine andere function einbinden PHP Tipps 2005 10 20.03.2005 16:13
[Erledigt] is_dir liefert falschen Wert PHP-Fortgeschrittene 4 19.03.2005 12:27
[Erledigt] Problem: per klick auf Button Wert erhöhen/verringern HTML, Usability und Barrierefreiheit 7 07.10.2004 08:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php return gibt keinen wert zurück, return gibt keinen wert zurück php, mysql procedure select liefert falschen wert, function wert zurück, php eine funktion liefert immer den wert zurück wenn, funktionen php wert zurück

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.