Avatar billede kimox Nybegynder
26. maj 2008 - 22:17 Der er 9 kommentarer og
1 løsning

Hjælp til enkel kode

Hej eksperter.

kan denne kode:
<?
if ($id == "") {
$sql_oeko_tjek = mysql_query("SELECT * FROM ansatte WHERE ansat_by = 1 AND medrang = 1 ORDER BY id ASC");
} else {
$sql_oeko_tjek = mysql_query("SELECT * FROM ansatte WHERE ansat_by = $id AND medrang = 1 ORDER BY id ASC");
}
if ($id == "") {
$antal_oeko_tjek = mysql_result(mysql_query("SELECT COUNT(*) FROM ansatte WHERE ansat_by = 1 AND medrang = 1"),0);
} else {
$antal_oeko_tjek = mysql_result(mysql_query("SELECT COUNT(*) FROM ansatte WHERE ansat_by = $id AND medrang = 1"),0);
}
if (mysql_num_rows($sql_oeko_tjek)==0) {
echo "";
} else {
echo "<tr>
          <td colspan=\"3\">&nbsp;</td>
        </tr>
      <tr>
    <td height=\"19\" bgcolor=\"#D1DD10\" class=\"main_txt\"><div align=\"right\" class=\"top_oversk\">Økonomiafdeling&nbsp;</div></td>
    </tr>
  <tr>
    <td valign=\"top\" bgcolor=\"#E3E3E3\" class=\"main_txt\" align=\"center\">";
require "db.php";   
if ($antal_oeko_tjek > 2) {
$cols = "3";
$i = 0;
$a = 0;
print "<table cellspacing=\"8\" class=\"email\" width=\"100%\" align=\"center\"><tr>";
while($row = mysql_fetch_array($sql_oeko_tjek)) {
    if ($num == $a) {
        $rest = $cols-$i;
$navn = $row['navn'];
$email = $row['email'];
$stilling = $row['stilling'];
$tlfnr = $row['tlfnr'];
$upfile = $row['upfile'];
echo "<td colspan=\"2\" width=\"33%\" align=\"center\">"; ?>
        <?php if (!empty($row['upfile'])) { echo "<img src=\"$upfile\" width=\"88\" height=\"104\" class=\"border_pic\"><br><b>$navn</b><br>$stilling<br /><a href=\"mailto:$email\">$email</a><br>$tlfnr"; } else { echo "<img src=\"images/intet_pic.gif\" width=\"88\" height=\"104\" class=\"border_pic\"><br><b>&nbsp;$navn</b><br>&nbsp;$stilling<br><a href=\"mailto:$email\">&nbsp;$email</a><br>$tlfnr"; } echo"</td>";
} else {
echo"<td colspan=\"2\" width=\"33%\" align=\"center\">"; ?>
        <?php if (!empty($row['upfile'])) { echo "<img src=\"$upfile\" width=\"88\" height=\"104\" class=\"border_pic\"><br><b>$navn</b><br>$stilling<br /><a href=\"mailto:$email\">$email</a><br>$tlfnr"; } else { echo "<img src=\"images/intet_pic.gif\" width=\"88\" height=\"104\" class=\"border_pic\"><br><b>&nbsp;$navn</b><br>&nbsp;$stilling<br><a href=\"mailto:$email\">&nbsp;$email</a><br>$tlfnr"; } echo"</td>";
        $a++;
    }
    $i++;
    if ($i == $cols) {
        echo "</tr><tr>";
        $i = 0;
    }
}

print "<td colspan=\"$cols\">&nbsp;</td>\n</tr>\n</table>\n";
} else {
$cols = "2";
$i = 0;
$a = 0;
print "<table cellspacing=\"12\" width=\"100%\" class=\"email\" align=\"center\"><tr>";
while($row = mysql_fetch_array($sql)) {
    if ($num == $a) {
        $rest = $cols-$i;
$navn = $row['navn'];
$email = $row['email'];
$stilling = $row['stilling'];
$tlfnr = $row['tlfnr'];
$upfile = $row['upfile'];
echo "<td colspan=\"2\" width=\"50%\" align=\"center\">"; ?>
        <?php if (!empty($row['upfile'])) { echo "<img src=\"$upfile\" width=\"88\" height=\"104\" class=\"border_pic\"><br><b>$navn</b><br>$stilling<br /><a href=\"mailto:$email\">$email</a><br>$tlfnr"; } else { echo "<img src=\"images/intet_pic.gif\" width=\"88\" height=\"104\" class=\"border_pic\"><br><b>&nbsp;$navn</b><br>&nbsp;$stilling<br><a href=\"mailto:$email\">&nbsp;$email</a><br>$tlfnr"; } echo"</td>";
} else {
echo"<td colspan=\"2\" width=\"50%\" align=\"center\">"; ?>
        <?php if (!empty($row['upfile'])) { echo "<img src=\"$upfile\" width=\"88\" height=\"104\" class=\"border_pic\"><br><b>$navn</b><br>$stilling<br /><a href=\"mailto:$email\">$email</a><br>$tlfnr"; } else { echo "<img src=\"images/intet_pic.gif\" width=\"88\" height=\"104\" class=\"border_pic\"><br><b>&nbsp;$navn</b><br>&nbsp;$stilling<br><a href=\"mailto:$email\">&nbsp;$email</a><br>$tlfnr"; } echo"</td>";
        $a++;
    }
    $i++;
    if ($i == $cols) {
        echo "</tr><tr>";
        $i = 0;
    }
}
print "<td colspan=\"$cols\">&nbsp;</td>\n</tr>\n</table>\n";
}
echo"</td>
    </tr>";
    }
?>

gøres mindre på nogen måde??
Avatar billede jakobdo Ekspert
26. maj 2008 - 22:44 #1
Måske det kunne laves på denne måde:

<?
//Forbinder til DB
require "db.php";

function printData($input){
    $output  = '<td colspan="2" width="33%" align="center">';
    if(!empty($input['upfile'])){
        $output .= '<img src="'.$input['upfile'].'" width="88" height="104" class="border_pic">';
    }else{
        $output .= '<img src="images/intet_pic.gif" width="88" height="104" class="border_pic">';
    }
    $output .= '<br><b>'.$input['navn'].'</b><br>'.$input['stilling'].'<br />':
    $output .= '<a href="mailto:'.$input['email'].'">'.$input['email'].'</a><br>'.$input['tlfnr'].'</td>';
    return $output;
}

//Jeg antager $id kommer fra $_GET['id'] eller $_POST['id']
if(isset($id) && is_numeric($id)){
    $sql_oeko_tjek = mysql_query("SELECT * FROM ansatte WHERE ansat_by = '".intval($id)."' AND medrang = 1 ORDER BY id ASC");
    $antal_oeko_tjek = mysql_result(mysql_query("SELECT COUNT(*) FROM ansatte WHERE ansat_by = '".intval($id)."' AND medrang = 1"),0);
}else{
    $sql_oeko_tjek = mysql_query("SELECT * FROM ansatte WHERE ansat_by = 1 AND medrang = 1 ORDER BY id ASC");
    $antal_oeko_tjek = mysql_result(mysql_query("SELECT COUNT(*) FROM ansatte WHERE ansat_by = 1 AND medrang = 1"),0);
}

if(mysql_num_rows($sql_oeko_tjek)>0){
    echo "<tr><td colspan=\"3\">&nbsp;</td></tr><tr><td height=\"19\" bgcolor=\"#D1DD10\" class=\"main_txt\"><div align=\"right\" class=\"top_oversk\">Økonomiafdeling&nbsp;</div></td></tr><tr><td valign=\"top\" bgcolor=\"#E3E3E3\" class=\"main_txt\" align=\"center\">";

    if ($antal_oeko_tjek > 2) {
        $cols = "3";
        $i = 0;
        $a = 0;
        echo '<table cellspacing="8" class="email" width="100%" align="center"><tr>';
        while($row = mysql_fetch_array($sql_oeko_tjek)){
        if ($num == $a) {
        $rest = $cols-$i;

                echo printData($row);
               
            }else{
                echo printData($row);
               
        $a++;
        }
        $i++;
        if ($i == $cols){
                echo '</tr><tr>';
        $i = 0;
        }
        }
        echo '<td colspan="'.$cols.'">&nbsp;</td></tr></table>';
    } else {
        $cols = "2";
        $i = 0;
        $a = 0;
        echo '<table cellspacing="12" width="100%" class="email" align="center"><tr>';
        while($row = mysql_fetch_array($sql)) {
        if ($num == $a) {
                $rest = $cols-$i;
               
                echo printData($row);
               
            } else {
               
                echo printData($row);
               
                $a++;
        }
        $i++;
        if ($i == $cols) {
                echo '</tr><tr>';
                $i = 0;
            }
        }
        echo '<td colspan="'.$cols.'">&nbsp;</td></tr></table>';
    }
    echo '</td></tr>';
}
?>
Avatar billede kimox Nybegynder
26. maj 2008 - 22:49 #2
ah ja det gjorde den en del mere overskuelig. koden står 6 gange på siden fordi den laver 6 connects ;(
Avatar billede dkfire Nybegynder
26. maj 2008 - 23:04 #3
Lige en lille rettelse til jakobdo's kode:
//Jeg antager $id kommer fra $_GET['id'] eller $_POST['id']
if(isset($id) && is_numeric($id)){
    $sql_oeko_tjek = mysql_query("SELECT * FROM ansatte WHERE ansat_by = '".intval($id)."' AND medrang = 1 ORDER BY id ASC");
    $antal_oeko_tjek = mysql_num_rows($sql_oeko_tjek);
}else{
    $sql_oeko_tjek = mysql_query("SELECT * FROM ansatte WHERE ansat_by = 1 AND medrang = 1 ORDER BY id ASC");
    $antal_oeko_tjek = mysql_num_rows($sql_oeko_tjek);
}

Der er jo ingen grundt til at lave den samme query to gange lige efter hinanden.
Avatar billede jakobdo Ekspert
27. maj 2008 - 06:35 #4
dkfire: Så meget havde jeg ikke set koden igennem. :o)
Men jeg mener faktisk at SELECT COUNT(id) er hurtigere end at bruge mysql_num_rows()
Så brugeren burde lave noget tidstagning på det og tage den løsning som er bedst og hurtigst.
Avatar billede kimox Nybegynder
27. maj 2008 - 07:55 #5
ja det skal nemlig være den form for kode som bliver kørt hurtigst igennem som skal bruges for som sagt så skal koden stå der 6 gange på samme side :) så for at være sikker på brugeren ikke venter 100 år siden kommer frem heh.
Avatar billede jakobdo Ekspert
27. maj 2008 - 08:07 #6
Her har jeg forenklet din kode endnu mere:

<?
//Forbinder til DB
require "db.php";

function printData($input){
    $output  = '<td colspan="2" width="33%" align="center">';
    if(!empty($input['upfile'])){
        $output .= '<img src="'.$input['upfile'].'" width="88" height="104" class="border_pic">';
    }else{
        $output .= '<img src="images/intet_pic.gif" width="88" height="104" class="border_pic">';
    }
    $output .= '<br><b>'.$input['navn'].'</b><br>'.$input['stilling'].'<br />':
    $output .= '<a href="mailto:'.$input['email'].'">'.$input['email'].'</a><br>'.$input['tlfnr'].'</td>';
    return $output;
}

//Jeg antager $id kommer fra $_GET['id'] eller $_POST['id']
if(isset($id) && is_numeric($id)){
    $sql_oeko_tjek = mysql_query("SELECT * FROM ansatte WHERE ansat_by = '".intval($id)."' AND medrang = 1 ORDER BY id ASC");
    $antal_oeko_tjek = mysql_result(mysql_query("SELECT COUNT(*) FROM ansatte WHERE ansat_by = '".intval($id)."' AND medrang = 1"),0);
}else{
    $sql_oeko_tjek = mysql_query("SELECT * FROM ansatte WHERE ansat_by = 1 AND medrang = 1 ORDER BY id ASC");
    $antal_oeko_tjek = mysql_result(mysql_query("SELECT COUNT(*) FROM ansatte WHERE ansat_by = 1 AND medrang = 1"),0);
}

if(mysql_num_rows($sql_oeko_tjek)>0){
    echo "<tr><td colspan=\"3\">&nbsp;</td></tr><tr><td height=\"19\" bgcolor=\"#D1DD10\" class=\"main_txt\"><div align=\"right\" class=\"top_oversk\">Økonomiafdeling&nbsp;</div></td></tr><tr><td valign=\"top\" bgcolor=\"#E3E3E3\" class=\"main_txt\" align=\"center\">";

    if ($antal_oeko_tjek > 2) {
        $cols = "3";
        $i = 0;
        $a = 0;
        echo '<table cellspacing="8" class="email" width="100%" align="center"><tr>';
        while($row = mysql_fetch_array($sql_oeko_tjek)){
            if ($num == $a) {
                $rest = $cols-$i;
            }else{
                $a++;
            }
           
            echo printData($row);
           
            $i++;
            if ($i == $cols){
                echo '</tr><tr>';
            $i = 0;
            }
        }
        echo '<td colspan="'.$cols.'">&nbsp;</td></tr></table>';
    } else {
        $cols = "2";
        $i = 0;
        $a = 0;
        echo '<table cellspacing="12" width="100%" class="email" align="center"><tr>';
        while($row = mysql_fetch_array($sql)) {
            if ($num == $a) {
                $rest = $cols-$i;
            }else{
                $a++;
            }
            $i++;
           
            echo printData($row);
           
            if ($i == $cols) {
                echo '</tr><tr>';
                $i = 0;
            }
        }
        echo '<td colspan="'.$cols.'">&nbsp;</td></tr></table>';
    }
    echo '</td></tr>';
}
?>
Avatar billede kimox Nybegynder
28. maj 2008 - 21:18 #7
det er perfekt. mange tak for hjælpen. smid et svar :)
Avatar billede jakobdo Ekspert
28. maj 2008 - 22:01 #8
Svar!
Avatar billede kimox Nybegynder
28. maj 2008 - 22:57 #9
endnu engang tak.

-lukket-
Avatar billede jakobdo Ekspert
29. maj 2008 - 06:50 #10
Takker for point.
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