php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.01.2009, 13:21  
Neuer Benutzer
 
Registriert seit: 03.12.2008
Beiträge: 23
anbeck befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] mysql_fetch_array - return false anwenden

Hallo zusammen,

ich bastel gerade an einer kleinen und simplen Funktion, welche eine Liste für ein drop down Menü eines Formulars erstellen soll.
Dazu holt die Funktion gemäß angegebenem Parameter die passenden Einträge aus der Datenbank. In einer while-Schleife werden dann die einzelnen <option>-Felder erstellt.

Das klappt auch ohne Probleme (so weit so gut).

Aber: wenn es in der DB keine passenden Einträge gibt, wird einfach nur ein leeres Feld angezeigt. Das sieht aber unschön aus.
Also möchte ich, sofern kein passender Eintrag gefunden wurde, einfach "Kein Eintrag" als Option anzeigen lassen.

Ich habe dann den unten stehenden Code probiert, aber leider zeigt er jetzt immer "Kein Eintrag" am Ende der Liste an, auch wenn vorher mehrere Einträge gefunden wurden.

Was muß ich verändern, damit "Kein Antrag" lediglich angezeigt wird, sofern die DB-Abfrage wirklich nichts erbracht hat?

PHP-Code:
   function list_test($test_id)
   {
   
$abfrage "SELECT test_id, test_wert
               FROM test
               WHERE test.test_wert= $test_id;
   $result = mysql_query($abfrage);

    while($row = mysql_fetch_array($result))
       {
         print "
<option value $row[test_id]>$row[test_wert]</option>";
       }
    if ($row = mysql_fetch_array($result) == false)
       {
         print "
<option value 1>Kein Eintrag</option>";
       }
       
    } 
Vielen Dank schon mal!
anbeck ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.01.2009, 13:33  
Erfahrener Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 157
Hexe befindet sich auf einem aufstrebenden Ast
Standard

Nachdem du alles ausgelesen hast, liefert mysql_fetch_array false.

Prüfe mit mysql_num_rows.
Hexe ist offline  
Alt 02.01.2009, 13:37  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Das ist recht unsauberer Code, weil du in der Funktion nur einen Teil der Selectbox ausgibst. <select> und </select>-fehlen vollkommen.

Bau den Code komplett in der Funktion dann zusammen, wenn Select etwas gefunden hat, und gib den kompletten HTML-Code mit Return an das aufrufenden Scriptteil zurück. Wenn Select nichts findet, gibt return einen Leerstring zurück.
__________________
Warum denkt mein Hund eigentlich immer dann, wenn es an der Tür klingelt, es sei für ihn?
Wolla ist offline  
Alt 02.01.2009, 14:46  
Neuer Benutzer
 
Registriert seit: 29.11.2008
Beiträge: 24
alro befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
function list_test($test_id)
   {
   
$abfrage "SELECT test_id, test_wert
               FROM test
               WHERE test.test_wert= "
.$test_id// Anführungszeichen schliessen !
   
$result mysql_query($abfrage);
   
   
// Erst prüfen ob false
   
if($row mysql_fetch_array($result) == false){
   
       print 
"<option value = 1>Kein Eintrag</option>";
       
   }
   else{
       
// wenn true, dann ausgeben
       
while($row mysql_fetch_array($result)){
           print 
"<option value = $row[test_id]>$row[test_wert]</option>";
           
       }
   } 
ungetestet
alro ist offline  
Alt 02.01.2009, 15:22  
Neuer Benutzer
 
Registriert seit: 03.12.2008
Beiträge: 23
anbeck befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank an Euch beide

@Hexe: funktioniert!

@Wolla: ja, hatte ich auch erst so gemacht, alles in $listHTML per .= reingeschrieben und dann ausgegeben. Das hat aber nicht funktioniert, weil ich die Funktion ohne print/echo verwendet hatte...
Aber das fiel mir erst gerade auf.... und jetzt kann ich es natürlich so machen, wie von Dir vorgeschlagen (ganzes select-DOM wird jetzt in einen string geschrieben und 'returned').

Danke für die schnelle Hilfe,
a.
anbeck ist offline  
Alt 02.01.2009, 15:24  
Neuer Benutzer
 
Registriert seit: 03.12.2008
Beiträge: 23
anbeck befindet sich auf einem aufstrebenden Ast
Standard

Hallo Alro,

Zitat:
Zitat von alro Beitrag anzeigen
PHP-Code:
function list_test($test_id)
   {
   
$abfrage "SELECT test_id, test_wert
               FROM test
               WHERE test.test_wert= "
.$test_id// Anführungszeichen schliessen !
   
$result mysql_query($abfrage);
   
   
// Erst prüfen ob false
   
if($row mysql_fetch_array($result) == false){
   
       print 
"<option value = 1>Kein Eintrag</option>";
       
   }
   else{
       
// wenn true, dann ausgeben
       
while($row mysql_fetch_array($result)){
           print 
"<option value = $row[test_id]>$row[test_wert]</option>";
           
       }
   } 
hatte ich auch ausprobiert, leider ohne zufriedenstellendes Ergebnis. Warum ist es wichtig, die Anführungszeichen in der mysql-Abfrage um die Variablen zu schliessen?
anbeck ist offline  
Alt 02.01.2009, 15:30  
Neuer Benutzer
 
Registriert seit: 29.11.2008
Beiträge: 24
alro befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von anbeck Beitrag anzeigen
Warum ist es wichtig, die Anführungszeichen in der mysql-Abfrage um die Variablen zu schliessen?
Mir ist nur aufgefallen, das Du bei Deinem query (erstes Posting) kein schliessendes Anführungszeichen hast.
alro ist offline  
Alt 02.01.2009, 15:53  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von anbeck Beitrag anzeigen
Hallo Alro,



hatte ich auch ausprobiert, leider ohne zufriedenstellendes Ergebnis. Warum ist es wichtig, die Anführungszeichen in der mysql-Abfrage um die Variablen zu schliessen?
das ist wichtig weil:
echo "ich gebe eine $variableAus";
hier würde er die variable $variableAus suchen die nicht gesetzt ist (weil man $variable ausgeben wollte) und somit nur "ich gebe eine" ausgeben.

zumal der code einfach furchtbar zu lesen ist wenn man die variablen in einem string nicht identifizieren kann. und es wird spätestens dann sehr unlustig wenn du mal ein $ ausgeben willst - das musst du nämlich dann escapen (\$) ...
benutz am besten einfache ' statt doppelte " anführungszeichen, dann zwingt dich PHP es sauber zu machen.

das eigentliche problem wurde ja schon beantwortet: vor der while schleife prüfen ob mysql_num_rows 0 zurückgibt. wobei ich hier mit drei anführungszeichen prüfen würde, da mysql_num_rows auch FALSE zurückgeben kann.

mfg
BlackWolf ist offline  
Alt 02.01.2009, 17:26  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Variablen können innerhalb Strings dann geparsed werden, wenn die Strings mit Doppelhochkommas begrenzt sind:
PHP-Code:
$name 'Hans';
echo 
"Der Name lautet $name"
Hier aber Vorsicht mit einem Unterstrich, der sofort auf eine Variable folgt:
PHP-Code:
$vorname 'Hans';
$name 'Meier';
echo 
"Name_Vorname : $name_$vorname"
Das funktioniert nicht, weil der parser nach $name_ sucht.

Will man die Variable nicht parsen lassen, so nimmt man einfache Hochkommas:
PHP-Code:
$name 'Hans';
echo 
"Die Variable $name enthält den Namen"
Besser lesbar in einem Editor mit Syntax-Highlighting ist das ganze aber dann, wenn man die Variablen aus dem String herauslöst:

PHP-Code:
$name 'Hans';
echo 
'Der Name lautet ' $name
__________________
Warum denkt mein Hund eigentlich immer dann, wenn es an der Tür klingelt, es sei für ihn?
Wolla 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
101: Alles regulär Nikolaus 2.0 Adventskalender 2008 14 08.12.2008 21:08
[Erledigt] Transparente Runde Ecken bei Thumbnial realisieren tomtaz PHP Tipps 2008 3 08.07.2008 01:20
Prototype Ajax Array Datenmüll notyyy HTML, Usability und Barrierefreiheit 2 08.04.2008 10:57
Anmeldeformular mac/pc unt.punkt PHP Tipps 2008 3 05.02.2008 11:12
Problem: [Warning Empty delimiter] Lia PHP Tipps 2008 3 03.01.2008 23:21
Voraussetzungen für dieses Thumbnail Skript Plague PHP Tipps 2008 9 19.09.2007 13:35
Parsen von Delimitern Basti Tutorials 0 30.09.2006 21:24
phpfriend.de Server snatch-ic Off-Topic Diskussionen 299 30.09.2006 10:56
Layer ebenen kiffy HTML, Usability und Barrierefreiheit 1 07.05.2006 15:42
Kann Bilder nicht Uploaden / Cannot upload my Images :( PHP Tipps 2005-2 14 25.09.2005 17:47
[Erledigt] Datenbank nicht erreichbar PHP Tipps 2005-2 27 19.08.2005 12:20
formular action mit if else PHP Tipps 2005-2 6 15.07.2005 18:00
Return true, false suter PHP Tipps 2004-2 9 03.12.2004 09:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql_fetch_array false, php return false, return false php, return mysql_fetch_array, mysql_fetch_array, php mysql_fetch_array leer, mysql_fetch_array leer, mysql_fetch_array return, mysql_fetch_array kein ergebnis, php return true, return false mit php, or return php false, mysql_fetch_array leeres ergebnis, php result false, mysql_fetch_array returns false, php return anzeigen, php function return while, fetch_array ohne ergebnis, php mysqli_fetch_array rückgabewerte, mysql_fetch_array liefert false zurück

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