PHP nybörjare - är detta rätt sätt

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Halmstad
  • 2011-02-23 23:39

Jag har kämpat alldeles för länge med att med hjälp av php visa om fältet Aktiv innehåller värdet 1 eller 0 i en kryssruta. Till slut fick jag till det genom att göra så här:

$sqlall = mysql_query("SELECT MedlemsID.....
while($medl = mysql_fetch_array( $sqlall)) {
  $db_box1 = $medl["Aktiv"];
  if($db_box1 == 1) { $set_checked = " CHECKED";}
    else{$set_checked = ""; }
  echo ...
<input type=\"checkbox\" name=\"\" value=\"\"" .$set_checked."/>

Nu undrar jag om detta är "korrekt" sätt att lösa detta på. Jag hittade denna lösningen i en forumpost från 2004 så det kanske finns bättre sätt att hantera det på. Varför ska man ha en totalt kododuglig hjärna när man tycker det är så roligt att hålla på med sånt här.

Tackar på förhand för all hjälp. Jag vill bara varna om att om ni svarar på detta kommer jag säkerligen återkomma med mer frågor.

  • Medlem
  • Stockholm
  • 2011-02-24 00:27

Tycker det ser rätt ut. Jag hade nog gjort på typ samma sätt, så länge det funkar så... Det finns antagligen saker man kan göra för att optimera men har man inte tokmycket trafik till sidan så spelar det ju ingen roll.

  • Medlem
  • Stockholm
  • 2011-02-24 09:19

Det kommer fungera, men om du vill följa HTML-standarden helt ska du alltid skriva attribut="värde". Så du kan (om du vill) ändra till följande: $set_checked = ' checked="checked"';

Beroende på om du är helt ny på PHP eller om du hunnit jobba lite med det så får du välja om du vill ta till dig följande tips:

Mina första PHP-script såg också ut som din kodsnutt ovan. Om du gör ett lite större projekt kommer kompexiteten i koden att öka exponentiellt ju mer du skriver på det här sättet, speciellt om du ekar (använder echo) för din html.

Separera istället sammanställningen av data och din html-kod, exempelvis:

// Hämta/sortera/bearbeta all data som behövs på sidan
<?php
$sqlall = mysql_query("SELECT MedlemsID.....
while($medl = mysql_fetch_array( $sqlall)) {
  $db_box1 = $medl["Aktiv"];
?>

// HTML med inspränga PHP-stycken
<html ...>

<input type="checkbox" name="" value=""<?php if($db_box1) echo 'selected="selected"' ?>>

</html>

Om du börjar arbeta på ett liknande sätt kommer du få enklare kod att följa. Samtidigt får du in "tänket" för att kunna gå vidare till kodningsmönster som krävs för lite större projekt.

Men men, bara att välja om du vill ta till dig eller inte

Senast redigerat 2011-02-24 10:22
  • Oregistrerad
  • 2011-02-24 14:55

Lite rörig kod, jag skulle gjort såhär:

1.) använder en klass för att hämta db data:

function mysql_fetch_all($query){
 $r=@mysql_query($query);
 if($err=mysql_errno())return $err;
 if(@mysql_num_rows($r))
 while($row=mysql_fetch_array($r))$result[]=$row;
 return $result;
 }	

För att hämta data gör jag då bara.

$Data = mysql_fetch_all("SELECT MedlemsID.....");
<input type="checkbox" name="" value="<?php if($Data[0][Aktiv] ==1) echo 'selected="selected"' ?>

Eftersom du bara behöver första resultatet från din databas (eftersom det bara returnerar en rad gissar jag) så behöver du inte loopa igenom något resultat utan du hämtar bara första resultatet (dvs [0]) På så sätt blir din kodsnutt bara två rader och det inga problem att klura ut vad koden gör

  • Medlem
  • Halmstad
  • 2011-02-25 00:02

Tack så jättemycker för era svar. Jag ska titta vidare på hur jag kan förbättra koden utifrån era synpunkter för att göra den mer effektiv. Just nu är jag mest bara nöjd med att den fungerar över huvud taget. Den här gången hade jag bara gjort en enkel slagning mot databasen och loopade ut samtliga poster så därför såg koden ut som den gjorde. Nu ska jag gå vidare med att "joina" medlemstabellen med lag- och medlemstypstabellerna, sen ska det byggas inmatnings- och redigeringsformulär och därefter sidor som visar vilka som betalat medlemsavgiften. Sen kommer match- och statistikredovisning mm mm så jag lär återkomma med mer frågor framöver.

Återigen stort tack för att ni tog er tid att titta på koden och svara.

1
Bevaka tråden