Seite 1 von 1

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

Verfasst: 27.12.2003 15:35
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)

Verfasst: 27.12.2003 15:43
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] ...";

Verfasst: 27.12.2003 15:55
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. :-?

Verfasst: 27.12.2003 17:40
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?

Verfasst: 27.12.2003 19:43
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.

Verfasst: 27.12.2003 20:06
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?