php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.08.2006, 12:50  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard mysql_fetch_assoc schluckt ersten datesatz

hi leutz, folgendes problemchen

ich hole mir mithilfe von
Code:
SELECT kat2 FROM haeuser
WHERE firma = '$firma' AND kat1 = '$kat1'
datensätze aus ner db um sie dann mit einer for schleife in eine
<select> box zu "füllen"

so weit so gut geht auch alles .... nur kommen die inhalte je nachdem was der user vorher ausgewählt (kat1) hat zum vorschein ....

alles supi np bis hierhin ABER
manche kat1 haben kein kat2 (daher ist die select box da aber ohne inhalt).

um dies zu vermeiden habe ich folgendes gemacht:
PHP-Code:
        $result $db->query("
                      SELECT kat2 FROM haeuser
                      WHERE firma = '$firma' AND kat1 = '$kat1'
                              "
);

    
$num_result mysql_num_rows($result);
    
    
$inhalt mysql_fetch_assoc($result);
    
    if(
strlen(trim($inhalt[kat2])) < '1')
    {
        echo 
"Es gibbt nix!";
        
    }else{ 
mit dem simplen effekt das dieser code
PHP-Code:
for($i=0$i $num_result $i++)
        {
            
$feld mysql_fetch_assoc($result);
            
$dropdown.= '<option value=" '.$feld[kat2].' ">';
            
$dropdown.= $feld[kat2];
            
$dropdown.= '</option>'
zwar die select box generiert aber den ersten datensatz weglässt und dafür am ende der liste ein leeres feld einfügt.

die frage ist also wie kann ich verhindern das der erste datensatz "weg" ist?
phpdummi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 04.08.2006, 13:02  
Benutzer
 
Registriert seit: 31.03.2006
Beiträge: 49
uro3
Standard

PHP-Code:
  $inhalt mysql_fetch_assoc($result); 
holt den ersten satz

PHP-Code:
 $feld mysql_fetch_assoc($result); 
beginnt dann mit dem zweiten , und dir fehlt einer

einfach mit while-Schelife arbeiten
uro3 ist offline  
Alt 04.08.2006, 13:03  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

danke für die schnelle aw !

was ändert denn while am problem?
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 04.08.2006, 13:09  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich habs jetzt so:
PHP-Code:
//bereits "gefetchten" wert hinzufügen

dropdown.= '<option value=" '.$inhalt[kat2].' ">';
$dropdown.= $inhalt[kat2];
$dropdown.= '</option>';

               
//mit $i=1 statt 0 anfangen
        
for($i=1$i $num_result $i++)
        {
            
$feld mysql_fetch_assoc($result);
            
$dropdown.= '<option value=" '.$feld[kat2].' ">';
            
$dropdown.= $feld[kat2];
            
$dropdown.= '</option>';
            
        } 
geht aber ich würde gerne eine bessere version haben
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 04.08.2006, 13:16  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

while führt den Block eben solange aus, wie die Bedingung wahr ist und genau das willst du ja. Ist die Bedingung von Anfang an unwahr (es wurden keine Datensätze gefunden) wird auch nichts ausgeführt. Ansonsten wird die Schleife solange ausgeführt, wie Datensätze vorhanden.

Hier findest du Beispiele
http://de.php.net/manual/de/function...etch-assoc.php
Allein schon die Codelänge sollte den Vorteil ersichtlich machen.
Dein Code ist ja eigentlich doppelt - einmal für den 1. Datensatz und dann nocheinmal für den Rest.
Zergling-new ist offline  
Alt 04.08.2006, 13:18  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

genau das war meine definition von
Zitat:
ich würde gerne eine bessere version haben

vielen dank!

//--Edit--//
getestet uuuund es funzt perfekt!

ich verstehe aber nicht wieso
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 04.08.2006, 13:32  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

DOCH NICHT

while zeigt zwar alles an aber auch die leere select box! (logisch da außerhalb von while)

das hatte ich aber auch schon ganz zu anfang!

PHP-Code:
if (mysql_num_rows($result) == 0) {
   echo 
"Keine Zeilen gefunden, nichts auszugeben, daher Abbruch";
   exit; 
geht komischer weise nicht
phpdummi ist offline  
Alt 04.08.2006, 13:34  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Welche leere Select-Box?

Außerhalb der Schleife kannst/sollst du auch nicht mehr auf Datensätze des Queries zugreifen! Weg damit - oder mit was soll sie gefüllt werden?

Bitte mehr Informationen:
http://www.phpfriend.de/forum/ftopic59258.html
Zergling-new ist offline  
Alt 04.08.2006, 13:37  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
if(isset($firma) && isset($kat1) && ! isset($kat2))
{
    
$result $db->query("
                                                SELECT kat2 FROM haeuser
                                                WHERE firma = '$firma' AND kat1 = '$kat1'
                                            "
);
    
$num_result mysql_num_rows($result);
    
    
    if(
mysql_num_rows($result) == 0)
    {
        echo 
"Es gibbt nix!";
        
    }else{
    
        
$dropdown.= '<select name="kat2">';
        
        while (
$feld mysql_fetch_assoc($result))
        {
            
$dropdown.= '<option value=" '.$feld[kat2].' ">';
            
$dropdown.= $feld[kat2];
            
$dropdown.= '</option>';
                    
        }
        
        
$dropdown.= '</select>';
        
$dropdown.= '<input type="submit" value="OK !">';
        
$dropdown.= '<input type="hidden" name="firma" value="'.$firma.'">';
        
$dropdown.= '<input type="hidden" name="kat1" value="'.$kat1.'">';
        
    }

so hab ich es jetzt (wie um tut) ABER die if abfrage greift nicht!
phpdummi ist offline  
Alt 04.08.2006, 13:41  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von phpdummi
geht komischer weise nicht
Gehen tut das schon, auch wenns falsch ist, was echo ausgibt. Dein Lieblingsbrowser weigert sich schlicht und einfach, sowas anzuzeigen.
 
 


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
PHP od. SOAP schluckt ersten Teil der WSDL-URL 123micha PHP-Fortgeschrittene 4 30.05.2006 14:48

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php while und dropdown erster datensatz fehlt, php5 mysql_fetch_assoc 1 satz fehlt, while selectbox erster datensatz fehlt, mysql_fetch_assoc nicht alles

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:15 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.