Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: .:UND3R:. en 29 Abril 2012, 01:31 am



Título: Mostrar banderas según codigo de pais hubicado en una BD
Publicado por: .:UND3R:. en 29 Abril 2012, 01:31 am
Hola a todos, tal como lo dice el título tengo el siguiente problema:
tengo una BD (mssql) en donde en un campo se encuentra un número, este número representa un país, me gustaría que se mostrara una banderita en la web según el código obtenido de la BD, la estructura de la BD es la siguiente:

BD:MuOnline

Tabla:MEMB_INFO

campo:country



Quiero implementar un PHP que muestre un ranking (el nº 1 de un juego).
Funciona casi todo perfecto, el único problema que encontré es al momento de querer mostrar las banderas, según el país en donde reside el personaje Nº1, este me muestra siempre la 1era bandera (1.png).

para entenderlo de manera visual pueden visitar la página (en el mismo index, abajo muestra el TOP 1):
www.mu-caos.cl (http://www.mu-caos.cl)

El código es el siguiente:
Código
  1. <table border=0 align=left width="476" height="234" cellpadding=0 cellspacing=0  background="template/<?=$core['config']['template'] ?>/images/Top1.png">
  2. <tr>
  3. <td>
  4. <b>
  5.  <div align="center">
  6.    <blockquote>
  7.      <p><font color="#FFFFFF" size=3 face="arial,verdana" align="right" >
  8. <br>
  9. <br>
  10. <br>
  11. <br>
  12. <br>
  13.        <?
  14.  
  15. function flag($country){
  16. $flags_array=array(
  17.  
  18. 1=>"1",2=>"2",3=>"3",4=>"4",5=>"5",6=>"6",7=>"7",8=>"8",9=>"9",10=>"10",11=>"11",12=>"12",13=>"13",14=>"14",15=>"15",16=>"16",17=>"17",18=>"18",19=>"19",20=>"20",21=>"21",22=>"22",23=>"23",24=>"24",25=>"25",26=>"26",27=>"27",28=>"28",29=>"29",30=>"30",31=>"31",32=>"32",33=>"33",34=>"34",35=>"35",36=>"36",37=>"37",38=>"38",39=>"39",40=>"40",41=>"41",42=>"42",43=>"43",44=>"44",45=>"45",46=>"46",47=>"47",48=>"48",49=>"49",50=>"50",51=>"51",52=>"52",53=>"53",54=>"54",55=>"55",56=>"56",57=>"57",58=>"58",59=>"59",60=>"60",61=>"61",62=>"62",63=>"63",64=>"64",65=>"65",66=>"66",67=>"67",68=>"68",69=>"69",70=>"70",71=>"71",72=>"72",73=>"73",74=>"74",75=>"75",76=>"76",77=>"77",78=>"78",79=>"79",80=>"80",81=>"81",82=>"82",83=>"83",84=>"84",85=>"85",86=>"86",87=>"87",88=>"88",89=>"89",90=>"90",91=>"91",92=>"92",93=>"93",94=>"94",95=>"95",96=>"96",97=>"97",98=>"98",99=>"99",100=>"100",101=>"101",102=>"102",103=>"103",104=>"104",105=>"105",106=>"106",107=>"107",108=>"108",109=>"109",110=>"110",111=>"111",112=>"112",113=>"113",114=>"114",115=>"115",116=>"116",117=>"117",118=>"118",119=>"119",120=>"120",121=>"121",122=>"122",123=>"123",124=>"124",125=>"125",126=>"126",127=>"127",128=>"128",129=>"129",130=>"130",131=>"131",132=>"132",133=>"133",134=>"134",135=>"135",136=>"136",137=>"137",138=>"138",139=>"139",140=>"140",141=>"141",142=>"142",143=>"143",144=>"144",145=>"145",146=>"146",147=>"147",148=>"148",149=>"149",150=>"150",151=>"151",152=>"152",153=>"153",154=>"154",155=>"155",156=>"156",157=>"157",158=>"158",159=>"159",160=>"160",161=>"161",162=>"162",163=>"163",164=>"164",165=>"165",166=>"166",167=>"167",168=>"168",169=>"169",170=>"170",171=>"171",172=>"172",173=>"173",174=>"174",175=>"175",176=>"176",177=>"177",178=>"178",179=>"179",180=>"180",181=>"181",182=>"182",183=>"183",184=>"184",185=>"185",186=>"186",187=>"187",188=>"188",189=>"189",190=>"190",191=>"191",192=>"192",193=>"193",194=>"194",195=>"195",196=>"196",197=>"197",198=>"198",199=>"199",200=>"200",201=>"201",202=>"202",203=>"203",204=>"204",205=>"205",206=>"206",207=>"207",208=>"208",209=>"209",210=>"210",211=>"211");
  19.  
  20. $img= isset($flags_array[$country]) ? $flags_array[$country] : "2";
  21.  
  22. return "<img src=template/DarkBrown/images/banderas/{$img}.gif  width='25' height='15' >";
  23. }
  24.  
  25.  
  26.  
  27.  $Top = mssql_query("select top 1 name from MuOnline.dbo.character where ctlcode<32 order by Grand_Resets desc");
  28.  for($i;$i<mssql_num_rows($Top);$i++) {
  29.  $MuTop = mssql_fetch_row($Top);
  30.  
  31.  $country = mssql_query("Select memb___id,country from  MEMB_INFO where memb___id='".$MuTop[0]."'");
  32.  $country->fields[1] = flag($country->fields[1]);
  33. echo '
  34.  <u>Personaje</u>: &nbsp <font color="#FF0000"><strong>'.$MuTop[0].'</strong></font> &nbsp <font color="#FFFFFF"><u>Pais</u>: '.$country->fields[1].'
  35. '; }
  36. ?>
  37.        <br/>
  38.      </font></p>
  39.    </blockquote>
  40.  </div></td>
  41. </tr>
  42. </table>

Si alguien me explicara en que estoy fallando se lo agradecería mucho, tengo nociones muy básicas de PHP, por eso acudo a ustedes. Muchas Gracias



Título: Re: Mostrar banderas según codigo de pais hubicado en una BD
Publicado por: engel lex en 29 Abril 2012, 02:57 am
sin que lo tomes a mal D: pero quien usa mssql? D:

bueno aqui unas cositas primero usa

Código:
mssql_get_last_message()

para ver si es un error en la llamada a la DB (sospecho esto porque tienes
Código:
mssql_query("select top 1 name from MuOnline.dbo.character where ctlcode<32 order by Grand_Resets desc")

no se si mssql acepte espacios en los nombres de las tablas, en este caso usarías comillas para encerrar "top 1 name"

por otro lado para

Código:
flags_array=array( 
 
1=>"1",2=>"2",3=>"3",4=>"4",5=>"5", .............. ,211=>"211");
 
$img= isset($flags_array[$country]) ? $flags_array[$country] : "2";
 
return "<img src=template/DarkBrown/images/banderas/{$img}.gif  width='25' height='15' >";
}


joder XD no tenias que escribirte un array de 211 indices para hacer de un numero un string, puedes pasarlo como numero ya que php lo interpretará como string de ser necesario,

si lo necesitas es para saber si está dentro del rango de números bastaría con un

Código:
if($country>=1 && $country<=211){ //algo }

o si quieres el array por x razon

Código:
$a;
for($i=1;$i<=211;$i++){
    $a[$i]="$i";
}


en {$img} no necesitas las llaves, con "comillas dobles" las variables son tomadas por su valor (mas no en 'comillas simples'),( en el for procura siempre inicializar la variable a 0)

chequea esos detallitos, principalmente el error, si sigue presentando el mismo error y no es la llamada a mssql avisa :P


Título: Re: Mostrar banderas según codigo de pais hubicado en una BD
Publicado por: raul338 en 29 Abril 2012, 18:37 pm
engelx, MSSQL no creo que acepte espacios en los nombres de la tabla, pero en este caso, quiere obtener solo el primer registro (seria el LIMIT 1 en MySQL)