ilch Forum » Allgemein » HTML, PHP, SQL,... » array_combine alternative für PHP4?

Geschlossen
  1. #1
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    Also in meinem WoW Rekrutierungs-System für ilch nutze ich array_combine um zwei verschiedene Arrays zu generieren die ich dann im Script weiterverwende.

    Da array_combine erst ab PHP 5.x möglich ist suche ich eine Alternative für ältere PHP-Versionen da noch nicht jeder auf PHP 5 umgestiegen ist.

    Die betroffenen Zeilen sind 29-39. In diesen Zeilen werden Name und ID sowie Icon und ID geordnet und separat in ein Array gespeichert.

    Hat da jemand einen Rat für mich? lächeln

    <?php
    #   Copyright by Cristian Gheorghiu
    #   Support www.cristiang.de
    
    
    defined ('main') or die ( 'no direct access' );
    
    
    $title = $allgAr['title'].' :: Rekrutierung';
    $hmenu = 'Rekrutierung';
    $design = new design ( $title , $hmenu );
    $design->header();
    
    
    
    // pruefen ob Eintraege existieren
    $result_classes = db_num_rows(db_query("SELECT * FROM `prefix_wow_classes`"));
    $result_recruits = db_num_rows(db_query("SELECT * FROM `prefix_wow_recruit`"));
    		
    // vorhandene Rassen in Arrays speichern
    $ergebnis = db_query("SELECT * FROM `prefix_wow_race` WHERE fraction LIKE '". $allgAr['wow_fraction'] ."' ORDER BY id ASC");
    while($row = db_fetch_object($ergebnis))
    {
    	$form_races .= '<option value="'. $row->id .'">'. $row->name .'</option>';
    }
    // vorhandene Klassen in Arrays speichern
    if( $result_classes > 0 ) {
    
    	$ergebnis = db_query("SELECT * FROM `prefix_wow_classes` ORDER BY id ASC");
    	while($row = db_fetch_object($ergebnis))
    	{
    		$wow_array_a[] = $row->id;
    		$wow_array_b[] = $row->name;
    		$wow_array_c[] = $row->icon;
    		$form_classes .= '<option value="'. $row->id .'">'. $row->name .'</option>';
    	}
    	
    	$wow_class['klasse'] = array_combine($wow_array_a, $wow_array_b);
    	$wow_class['icon'] = array_combine($wow_array_a, $wow_array_c);
    
    }
    // vorhandene Realms in Arrays speichern
    $ergebnis = db_query("SELECT * FROM `prefix_wow_realm` ORDER BY id ASC");
    while($row = db_fetch_object($ergebnis))
    {
    	$wow_realm[$row->id] = $row->name;
    }
    // vorhandene Fraktionen in Arrays speichern
    $ergebnis = db_query("SELECT * FROM `prefix_wow_realm` ORDER BY id ASC");
    $wow_fraktionen = array(
    	1 => 'Allianz', 
    	2 => 'Horde'
    );
    
    
    
    
    // Bewerbung verarbeiten
    //-----------------------------------------------------//
    
    if( !empty($_REQUEST['submit']) ) {
    if( chk_antispam('recruit') ) {
    
    	$_POST['user'] = escape($_POST['user'], 'string');
        $_POST['birth'] = escape($_POST['birth'], 'string');
    	$_POST['email'] = escape($_POST['email'], 'string');
    	$_POST['char'] = escape($_POST['char'], 'string');
    	$_POST['race'] = escape($_POST['race'], 'string');
    	$_POST['class'] = escape($_POST['class'], 'string');
    	$_POST['skill'] = escape($_POST['skill'], 'string');
    	$_POST['equip'] = escape($_POST['equip'], 'textarea');
    	$_POST['arsenalurl'] = escape($_POST['arsenalurl'], 'string');
    	$_POST['onlinetime'] = escape($_POST['onlinetime'], 'string');
    	$_POST['gameexp'] = escape($_POST['gameexp'], 'textarea');
    	$_POST['message'] = escape($_POST['message'], 'textarea');
    
    	// Alle Pflichtfelder
    	if( !empty($_POST['user']) and !empty($_POST['email']) and !empty($_POST['char']) and !empty($_POST['class']) and !empty($_POST['skill']) and !empty($_POST['arsenalurl']) and !empty($_POST['onlinetime']) and !empty($_POST['gameexp']) ) {
    		
    		// pruefen ob User oder eMail schon vorhanden sind
    		$result_applikation = db_num_rows(db_query("SELECT * FROM `prefix_wow_applications` WHERE
    			user = '". $_POST['user'] ."' OR email = '". $_POST['email'] ."'
    		"));
    		$result_user = db_num_rows(db_query("SELECT * FROM `prefix_user` WHERE
    			name = '". $_POST['user'] ."' OR email = '". $_POST['email'] ."'
    		"));
    		
    		
    		if( $result_applikation == 0 and $result_user == 0 ) {
    		
    			// DB Eintrag
    			db_query("INSERT INTO `prefix_wow_applications` (
    				user,
    				user_age,
    				email,
    				user_char,
    				race,
    				char_class,
    				skill,
    				equip,
    				arsenal,
    				user_online,
    				experience,
    				user_message
    			) VALUES (
    				'". $_POST['user'] ."',
    				'". $_POST['birth'] ."',
    				'". $_POST['email'] ."',
    				'". $_POST['char'] ."',
    				'". $_POST['race'] ."',
    				'". $_POST['class'] ."',
    				'". $_POST['skill'] ."',
    				'". $_POST['equip'] ."',
    				'". $_POST['arsenalurl'] ."',
    				'". $_POST['onlinetime'] ."',
    				'". $_POST['gameexp'] ."',
    				'". $_POST['message'] ."'
    			)");
    			
    			// Bestaetigungs-eMail versenden an Bewerber
    			$text = "Hallo ". $_POST['user'] .",
    deine Bewerbung ist bei uns eingegangen.
    			
    Du bekommst eine eMail sobald wir deine Bewerbung annehmen oder ablehnen.
    			
    Mit freundlichen Grüßen
    			
    			
    ". $allgAr['allg_default_subject'];
    			mail($_POST['email'], 'Deine Bewerbung ist angekommen!', $text, "From: ". $allgAr['allg_default_subject'] ." <". $allgAr['adminMail'] .">");
    		
    			// Bestaetigungs-eMail versenden an Admin
    			if( $allgAr['wow_application_email'] == 1) {
    				$text = "Hallo,
    es wurde soeben eine Bewerbung von ". $_POST['user'] ." eingereicht.
    			
    Die Bewerbung kann im Adminbereich ausgewertet werden.
    			
    Mit freundlichen Grüßen
    			
    das Rekrutierungs-System";
    				mail($allgAr['adminMail'], 'Neue Bewerbung ist eingegangen!', $text, "From: ". $_POST['user'] ." <". $_POST['email'] .">");
    			}			
    			
    			$message = '<strong>Erfolg:</strong> Deine Bewerbung ist bei uns eingegangen!<br>';
    			$formular = 'leeren';
    			
    				
    		} else { $message .= '<strong>Fehler:</strong> Der User oder die eMail-Adresse existiert bereits!<br>'; }
    		
    		
    	} else { $message .= '<strong>Fehler:</strong> Es wurden nicht alle Pflichtfelder ausgef&uuml;llt!<br>'; }
    
    } else { $message .= '<strong>Fehler:</strong> Der eingetragene Antispam ist falsch!<br>'; }
    }
    
    
    
    
    $tpl = new tpl ( 'recruit.htm' );
    
    
    // Seite ausgeben
    //-----------------------------------------------------//
    
    // Information
    $ar = array (
    	'fraktion_img'  => $allgAr['wow_fraction'],
    	'gildenname'  => $allgAr['wow_guild_name'],
    	'fraktion'  => $wow_fraktionen[$allgAr['wow_fraction']],
    	'realm' => $wow_realm[$allgAr['wow_realm']]
    );
    $tpl->set_ar_out($ar, 0 );
    
    // Rekrutierung
    if( $result_recruits > 0 ) {
    	
    	$tpl->out(1);
    	
    	// Gesuche ausgeben
    	$ergebnis = db_query("SELECT * FROM `prefix_wow_recruit`");
    	while($row = db_fetch_object($ergebnis))
    	{
    		
    		$tpl->out(2);
    
    		$ar['klicon'] = $wow_class['icon'][$row->classid];
    		$ar['klname'] = $wow_class['klasse'][$row->classid];
    		$ar['anzahl'] = $row->numbers;
    		$tpl->set_ar_out($ar, 3 );
    		
    		// Positionen
    		if( !empty($row->position1) or !empty($row->position2) ) {
    		
    			if( empty($row->position1) and empty($row->position2) ) {
    				$blank = "";
    			} elseif( !empty($row->position1) and !empty($row->position2) ) {
    				$blank = " / ";
    			} elseif( empty($row->position1) or empty($row->position2) ) {
    				$blank = "";
    			}
    			$class_position = $row->position1.$blank.$row->position2;
    			$ar['position'] = $class_position;
    			$tpl->set_ar_out($ar, 4 );
    		}
    
    		// Beschreibung
    		if( !empty($row->subscribe) ) {
    		
    			$ar['beschreibung'] = bbcode($row->subscribe);
    			$tpl->set_ar_out($ar, 5 );
    			
    		}
    		  
    		$tpl->out(6);
    		
    	}
    	
    } else {
    	
    	$tpl->out(1);
    	echo 'Wir suchen im Moment keine speziellen Klassen.';
    	
    }
    
    // Formular ausgeben
    //-----------------------------------------------------//
    if ( !loggedin() and $result_recruits > 0 ) {
    
    	if( empty($_REQUEST['submit']) ) { 
    		$ar['MESSAGE'] = ''; 
    	} else {
    		$ar['MESSAGE'] = '<p>'. $message .'</p>';
    	}
    	
    	$ar['minlevel'] = $allgAr['wow_min_level'];
    	$ar['rasse'] = $form_races;
    	$ar['classes'] = $form_classes;
    	$tpl->set('ANTISPAM', get_antispam('recruit',100));
    	
    	if( $formular == 'leeren' ) {
    	
    		$ar['form_user'] = "";
    		$ar['form_birth'] = "";
    		$ar['form_email'] = "";
    		$ar['form_char'] = "";
    		$ar['form_skill'] = "";
    		$ar['form_equip'] = "";
    		$ar['form_arsenalurl'] = "";
    		$ar['form_onlinetime'] = "";
    		$ar['form_gameexp'] = "";
    		$ar['form_message'] = "";
    
    	} else {
    	
    		$ar['form_user'] = $_POST['user'];
    		$ar['form_birth'] = $_POST['birth'];
    		$ar['form_email'] = $_POST['email'];
    		$ar['form_char'] = $_POST['char'];
    		$ar['form_skill'] = $_POST['skill'];
    		$ar['form_equip'] = $_POST['equip'];
    		$ar['form_arsenalurl'] = $_POST['arsenalurl'];
    		$ar['form_onlinetime'] = $_POST['onlinetime'];
    		$ar['form_gameexp'] = $_POST['gameexp'];
    		$ar['form_message'] = $_POST['message'];
    
    	}	
    		
    		$tpl->set_ar_out($ar, 7 );
    
    }
    
    
    echo '<p>&nbsp;</p><p align="center"><a href="http://www.cristiang.de" target="_blank" class="smallfont">Rekrutierungs-System &copy; CristianG.de</a></p>';
    
    
    
    $design->footer();
    ?>
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    holz Hall Of Fame
    Registriert seit
    17.11.2005
    Beiträge
    4.606
    Beitragswertungen
    117 Beitragspunkte
    also ich persönlich würde sagen die müssen dann einfach ein php update machen ...

    also php 5.3 sollte meiner persönlichen Meinung nach schon Standard sein.
    Man kann nicht immer alle alten Systeme bedienen
    1 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    dastiii Mitglied
    Registriert seit
    27.12.2005
    Beiträge
    2.354
    Beitragswertungen
    84 Beitragspunkte
    Habe mir jetzt mal nur angeschaut, wie du das ganze in der geposteten Datei benutzt,...

    Du machst in dem Fall zwei Arrays, wo eines vollkommen reichen würde.

    if( $result_classes > 0 ) {
     
        $ergebnis = db_query("SELECT * FROM `prefix_wow_classes` ORDER BY id ASC");
        while($row = db_fetch_object($ergebnis))
        {
            $wow_array_a[] = $row->id;
            $wow_array_b[] = $row->name;
            $wow_array_c[] = $row->icon;
            $form_classes .= '<option value="'. $row->id .'">'. $row->name .'</option>';
        }
         
        $wow_class['klasse'] = array_combine($wow_array_a, $wow_array_b);
        $wow_class['icon'] = array_combine($wow_array_a, $wow_array_c);
     
    }


    if( $result_classes > 0 ) {
        
        $wow_class = array();
    
        $ergebnis = db_query("SELECT * FROM `prefix_wow_classes` ORDER BY id ASC");
        while($row = db_fetch_object($ergebnis))
        {
            $wow_class[$row->id]['klasse'] = $row->name;
            $wow_class[$row->id]['icon'] = $row->name;
    
            $form_classes .= '<option value="'. $row->id .'">'. $row->name .'</option>';
        }
    }


    $ar['klicon'] = $wow_class['icon'][$row->classid];
    $ar['klname'] = $wow_class['klasse'][$row->classid];


    $ar['klicon'] = $wow_class[$row->classid]['icon'];
    $ar['klname'] = $wow_class[$row->classid]['klasse'];


    Ich hoffe ich habe nichts übersehen.
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Ahrtas Moderator
    Registriert seit
    17.12.2007
    Beiträge
    2.368
    Beitragswertungen
    210 Beitragspunkte
    Also beide Arrays werden weiter unten separat ausgelesen.

    Und in Zeile 35 muss $row->icon anstelle von $row->name stehen. zwinker

    Ich habe mich für eine ähnliche Lösung entschieden.
    if( $result_classes > 0 ) {
     
        $ergebnis = db_query("SELECT * FROM `prefix_wow_classes` ORDER BY id ASC");
        while($row = db_fetch_object($ergebnis))
        {
            $wow_class['klasse'][$row->id] = $row->name;
            $wow_class['icon'][$row->id] = $row->icon;
            $form_classes .= '<option value="'. $row->id .'">'. $row->name .'</option>';
        }
     
    }


    Aber dennoch Danke für den Denkanstoss. Yes


    Zuletzt modifiziert von Ahrtas am 12.04.2013 - 16:49:34
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Also eine eigene array_combine Funktion zu schreiben, sollte auch kein Problem sein.

    Du kannst dann einfach mit function_exists überprüfen, ob es die Funktion schon gibt, wenn nicht legst du sie an.

    if (!function_exists('array_combine')) {
        function array_combine($keys, $values) {
            if (count($keys) != count($values)) {
                return false;
            }
            $output = array();
            $keys = array_values($keys);
            $values = array_values($values);
            foreach ($keys as $key => $value) {
                $output[$value] = $values[$key];
            }
            return $output;
        }
    }
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    2 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten