Variable mit Default-Werten füllen wenn Wert nicht vorhanden

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
RogerM
Mitglied
Beiträge: 216
Registriert: 26.04.2003 18:09
Wohnort: Eschenbach

Variable mit Default-Werten füllen wenn Wert nicht vorhanden

Beitrag von RogerM »

Dies hier ist ein Ausschnitt aus einem (funktionierenden) Script:

Code: Alles auswählen

if ( $userdata['user_country'] == 'Österreich' ) // User aus Österreich
	{ 
		$sql = "SELECT * FROM " . ADMINBANNERS_TABLE . " where forenid = '$forum_id' and country = 'AT'";
		if( !$result = $db->sql_query($sql) )
		{
			message_die(GENERAL_ERROR, "Could not query words table", $lang['Error'], __LINE__, __FILE__, $sql);
		}
		$word_rows = $db->sql_fetchrowset($result);
		$word_count = count($word_rows);
	
		for($i = 0; $i < $word_count; $i++)
		{
			$country = $word_rows[$i]['country'];
			$word = $word_rows[$i]['word'];
			$replacement = $word_rows[$i]['replacement'];
			$word_id = $word_rows[$i]['word_id'];
		}
  	
		$bannerscript = "<a href=\"".$word."\" target=\"_blank\"><img src=\"".$replacement."\" border=\"0\" alt=\"Werbung\"></a>";
	} 
[Das Selbe nochmals mit anderen Ländern]
Wie mache ich nun, dass wenn

Code: Alles auswählen

where forenid = '$forum_id' and country = 'AT'
leer ist, bzw. keine Übereinstimmung zu finden ist, die Variablen $word und $replacement mit bestimmten Werten aus der Tabelle gefüllt werden? (also zb. aus forenid = 99 und country = 'AT')

(Versteht man überhaupt was ich meine? Ich bin nämlich nicht gerade gut in diesen Sachen, aber abändern von bestehenden Mod etc. kann ich gerade noch so einigermassen)
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Code: Alles auswählen

for($i = 0; $i < $word_count; $i++) 
      { 
         $country = $word_rows[$i]['country']; 
         $word = $word_rows[$i]['word']; 
         $replacement = $word_rows[$i]['replacement']; 
         $word_id = $word_rows[$i]['word_id']; 
      }
Kannst du mir mal den Sinn dieser Schleife erklären?

Ich würde das ganze so machen:

Code: Alles auswählen

$result = $db->sql_query('SELECT a,b,c FROM blah WHERE blub LIMIT 1');
//message_die krams hier

if($db->sql_numrows($result)) {
    $daten = $db->sql_fetchrow($result);
}
else {
    $daten = array (
        'a' => 'Standardwert für A',
        'b' => 'Standardwert für B',
        'c' => 'Standardwert für C'
    );
}
echo "a: $daten[a], b: $daten[b] ...";
RogerM
Mitglied
Beiträge: 216
Registriert: 26.04.2003 18:09
Wohnort: Eschenbach

Beitrag von RogerM »

Pyramide hat geschrieben:

Code: Alles auswählen

for($i = 0; $i < $word_count; $i++) 
      { 
         $country = $word_rows[$i]['country']; 
         $word = $word_rows[$i]['word']; 
         $replacement = $word_rows[$i]['replacement']; 
         $word_id = $word_rows[$i]['word_id']; 
      }
Kannst du mir mal den Sinn dieser Schleife erklären?
Nein, ich habe diesen Codeteil aus dem Mod "Forum Random Advertising Banners"* von AWSW übernommen. Ohne den Teil funktioniert es jedenfalls nicht.

Und zu deinem Code: Ich versuchs mal, obwohl ich noch nicht wirklich schlau daraus werde. (ich habe halt so gut wie keine Ahnung, aber probieren geht über studieren ;-))

*Oder auch nicht. Weiss gar nicht mehr, woher das stammt. :-?
RogerM
Mitglied
Beiträge: 216
Registriert: 26.04.2003 18:09
Wohnort: Eschenbach

Beitrag von RogerM »

Ich weiss zwar nicht ob es so ist wie du meintest, doch es scheint zu funktionieren:

Code: Alles auswählen

if ( $userdata['user_country'] == 'Österreich' ) // User aus Österreich
	{ 

		$sql = "SELECT word, replacement FROM " . ADMINBANNERS_TABLE . " where forenid = '$forum_id' and country = 'AT' LIMIT 1";  
		if ( !($result = $db->sql_query($sql)) )	
		{
			message_die(GENERAL_ERROR, 'Could not obtain ADMINBANNERS information', '', __LINE__, __FILE__, $sql);
		}


		if($db->sql_numrows($result)) 
		{ 
			while ($row = $db->sql_fetchrow($result))
			{
				$word = $row['word'];
				$replacement = $row['replacement'];
			}  
		} 

		else
		{ 
			$sql = "SELECT word, replacement FROM " . ADMINBANNERS_TABLE . " where forenid = '99' and country = 'AT' LIMIT 1";  
			if ( !($result = $db->sql_query($sql)) )	
			{
				message_die(GENERAL_ERROR, 'Could not obtain ADMINBANNERS information', '', __LINE__, __FILE__, $sql);
			}
			while ($row = $db->sql_fetchrow($result))
			{
				$word = $row['word'];
				$replacement = $row['replacement'];
			}

		}

		$bannerscript = "<a href=\"".$word."\" target=\"_blank\"><img src=\"".$replacement."\" border=\"0\" alt=\"Werbung\"></a>";
	} 
Gibt es (für mich verständliche) Verbesserungsvorschläge?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Code: Alles auswählen

while ($row = $db->sql_fetchrow($result)) 
         { 
            $word = $row['word']; 
            $replacement = $row['replacement']; 
         }
Sowas macht keinen Sinn. Bei mehreren Datensätzen werden die Variablen bei jedem Durchlauf der Schleife mit den Werten aus dem nächsten Datensatz überschrieben. Und bei einem Datensatz (was du ja mit LIMIT 1 erzwingst) ist die Schleife überflüssig.
RogerM
Mitglied
Beiträge: 216
Registriert: 26.04.2003 18:09
Wohnort: Eschenbach

Beitrag von RogerM »

endlich habe ich das ganze verstanden (hoffe ich zumindest):

Code: Alles auswählen

	$sql = "SELECT word, replacement FROM " . ADMINBANNERS_TABLE . " where forenid = '$forum_id' and country = '$country' LIMIT 1";  
	if ( !($result = $db->sql_query($sql)) )	
	{
		message_die(GENERAL_ERROR, 'Could not obtain ADMINBANNERS information', '', __LINE__, __FILE__, $sql);
	}

	if($db->sql_numrows($result)) 
	{ 
		 $daten = $db->sql_fetchrow($result); 
	} 
	else
	{ 
		$sql = "SELECT word, replacement FROM " . ADMINBANNERS_TABLE . " where forenid = '99' and country = '$country' LIMIT 1";  
		if ( !($result = $db->sql_query($sql)) )	
		{
			message_die(GENERAL_ERROR, 'Could not obtain ADMINBANNERS information', '', __LINE__, __FILE__, $sql);
		}
		$daten = $db->sql_fetchrow($result);			
	}
	$bannerscript = "<a href=\"".$daten[word]."\" target=\"_blank\"><img src=\"".$daten[replacement]."\" border=\"0\" alt=\"Werbung\"></a>";
Es funktioniert zumindest alles.

Vielen Dank, oder muss (sollte) ich noch was ändern?
Antworten

Zurück zu „Coding & Technik“