Avatar billede alta Nybegynder
16. juni 2003 - 09:57 Der er 9 kommentarer og
1 løsning

Hvordan erstatter man i et helt array?

Hvis jeg kører denne:

$get_data = mysql_query("SELECT * FROM $maillistetabel WHERE id='$id'");
$row = mysql_fetch_array($get_data);

Hvordan kan jeg så slippe udenom at skulle lave en ...if tom = %nbsp; else print $row[navn]... hver gang jeg anvender den på siden.

Kan man ikke køre den igennem en eller anden løkke fra start så den husker på hele siden?
Avatar billede jpvj Nybegynder
16. juni 2003 - 09:59 #1
Hvad er tom for en variabel?

Hvis den kommer fra din database, kan du blot tilføje
AND tom<> '%nbsp;' til dit SELECT kald.

JP
Avatar billede myplacedk Nybegynder
16. juni 2003 - 10:12 #2
Jeg fatter ikke rigtigt noget... "if tom = %nbsp; else print $row[navn]" ???

Arrays generelt kan du gennemløbe på flere måder. Fx for at gøre alle bogstaver STORE:

foreach($array as $key=>$value) {
  $array[$key] = strtoupper($value);
}
Avatar billede alta Nybegynder
16. juni 2003 - 10:14 #3
Som det er nu så henter jeg mit array som vist ovenfor og så indsætter jeg indholdet i forskellige tekstfelter, for eksempel:

if ($row[email] == '') {
echo "<td>&nbsp;</td>";
}
else {
echo "<td><a href='mailto:$row[email]'>$row[email]</a></td>";
}

Men flere steder på skal jeg bruge de samme data og så virker næsten omsonst at skulle køre den samme if/else en gang mere. Kan det ikke undgås?

Hvordan skulle jeg i givet fald flette din AND med ind i min query?
Avatar billede myplacedk Nybegynder
16. juni 2003 - 10:18 #4
Så kan du fx. gøre sådan her:

if ($row['email'] == '') {
  $row['email'] = '&nbsp;';
} else {
  $row['email'] = '<a href="mailto:'.$row['email'].'">'.$row['email'].'</a>';
}
Avatar billede alta Nybegynder
16. juni 2003 - 10:25 #5
myplacedk: det ser rigtig fint ud. Den tager jeg. Tror du også det er muligt at lave en x-fidus, hvor den kører alle rækker igennem sådan at den i samme hug tester $row/email, $row/navn og $row/hvadsomhelst?

jpvj: kan du give et eksempel på din brug af AND?
Avatar billede myplacedk Nybegynder
16. juni 2003 - 10:31 #6
Yeps...

foreeach($row as $key=>$val) {
  switch($key{
  case 'email':
    if ($row[$key] == '') {
      $row[$key] = '&nbsp;';
    } else {
      $row[$key] = '<a href="mailto:'.$row[$key].'">'.$row[$key].'</a>';
    }
    break;
  default:
    if ($row[$key] == '') {
      $row[$key] = '&nbsp;';
    }
  }
}
Avatar billede jakoba Nybegynder
16. juni 2003 - 10:44 #7
Kan det passe at den test du egentlig ønsker er:
if ( er_der_overhovedet_data_i_det_row_array ) {
    // skriv de data
} else {
    // skriv "&nbsp;"
}

det tester du med
if ( $row ) {
    // skriv de data
} else {
    // skriv "&nbsp;"
}

og jo. du er nødt til at lave den test hver gang du har prøvet at hente næste række med mysql_fetch_array( $get_data );

mvh JakobA
Avatar billede alta Nybegynder
16. juni 2003 - 11:01 #8
myplacedk: jeg siger tak for den helt rigtige løsning.
Avatar billede alta Nybegynder
16. juni 2003 - 11:04 #9
jakoba: tak fordi du tænkte anderledes, men myplacedk havde den løsning jeg kunne bruge.
Avatar billede jpvj Nybegynder
17. juni 2003 - 09:28 #10
OK har misforstået spm., men det kunne laves med en lille fræk UNION (hvis du har kører med en nogenlunde ny MySQL):

$get_data = mysql_query("
SELECT * FROM $maillistetabel WHERE id='$id' AND email<>''
UNION
SELECT felt1, felt2, ..., email AS '&nbsp;' FROM $maillistetabel WHERE id='$id' AND email='');

$row = mysql_fetch_array($get_data);

Du sætter naturligvis SQL linien sammen på 1 linie - jeg har blot splittet den for overskueligheden skyld.
Det en gør i praksis er følgende:
"Tag alle felter fra de poster hvor email er forskellig fra den tomme streng"
"og lave fællesmænged med " (UNION)
"alle felter (felt1, felt2, ...,) fra de poster hvor email er den tomme streng, og brug email='&nbsp;' i stedet.

felt1, felt2, ..., er navnene på alle feler undtaget email (dvs. de felter du får med en "SELECT * ..." undtaget email feltet).

Prøv det og se det fantastiske med SQL :-)

JP
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB