Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: This code

Sivun loppuun

Kruger [07.09.2005 11:51:36]

#

Osaako joku auttaa onko tämä oikein ?
Puuttuuko jotain..

<?php
    }
if(isset($kategory)) {
print ("<br><table align=\"center\" width=\"95%\" cellpadding=\"0\" cellspacing=\"0\">");
 $file = "linkit.txt";
 $open = file($file);
 $count = count($open);
 for ($p=0; $p<$count; $p++) {
 $entry = explode("|", $open[$p]);
?>

Onko tässä koodissa jotain häikkää ?

tsuriga [07.09.2005 12:00:05]

#

Onpa taas otsikko. Englanniksi $category mutta suit yerself. Virheenkäsittely (if (($open=file($file)) === false)) puuttuu. Sisennykset oudohkoja. Mitä tuon nyt sitten pitäisi tehdä? Haet vain $entrylle aina uuden arvon loopissa, joten loopin jälkeen sen arvona on taulukko tiedoston viimeisestä rivistä. Et tulosta sitä edes mihinkään?

Kruger [07.09.2005 12:04:56]

#

Voisitko näyttää toimivan esimerkin tosta..

tsuriga [07.09.2005 12:10:44]

#

Niin siis mistä? Virheenkäsittelyllä tarkoitin sitä, että jos vaikka haluat tulostaa virheilmoituksen, jos tiedoston avaus ei onnistu, niin tuolla if-lausekkeella sen pitäisi onnistua. En ala koodaa sulle käsi paketissa mitään valmista nyt.

Kruger [07.09.2005 12:12:16]

#

tsuriga kirjoitti:

Niin siis mistä? Virheenkäsittelyllä tarkoitin sitä, että jos vaikka haluat tulostaa virheilmoituksen, jos tiedoston avaus ei onnistu, niin tuolla if-lausekkeella sen pitäisi onnistua. En ala koodaa sulle käsi paketissa mitään valmista nyt.

no pitää tapella itse ton kans..

tsuriga [07.09.2005 12:40:04]

#

Teitpä sitten uuden topicin, vaikka vanhakin on ekalla sivulla ja aihe on sama. Lueskelin edellistä topickia ja ilmeisesti yrität tulostaa noita aakkosjärjestyksessä, siihen kelpaa array_multisort, josta Putkassakin on esimerkki, ja jota itse en ole koskaan jaksanut opetella käyttämään. Ongelmana taitaa olla myös eri kategorioihin jako. Tarvitset jonkun if-lausekkeen tyyliin "if($entry[x] == $kategoria) { tulostalinkki }", missä x tarkoittaa indeksiä, missä linkin kategoria on ilmoitettu ja $kategoria on käyttäjän valitsema kategoria.

ajv [07.09.2005 13:14:10]

#

Pakko sanoa, että RTFM! Kannattaako yrittää muokkailla valmiita koodeja, jos ei ole minkäänlaista käsitystä ohjelmoinnista? Nyt mars lukemaan jotain opuksia ja opettelemaan hello worldia!

Kruger [07.09.2005 14:48:37]

#

Kyllä kannattaa ja kyllä mä tajuun ohjelmoinneista useistakin kielistä mutta tota en nyt saa toimimaan.

kayttaja-2791 [07.09.2005 15:24:55]

#

Aakkosjärjestykseen nuo saa ihan sortilla.

Ja koodista sen verran että sisennyksiä se ainakin kaipaa. Ei kait siinä muuten vissiin mitään häikkää ole, pitäisikö olla?

Anssi V [07.09.2005 16:44:17]

#

Kruger kirjoitti:

Onko tässä koodissa jotain häikkää ?

Sinunhan se pitäs tietää, että onko siinä jotain häikkää ja jos on niin voisit sit ehkä kysyä apua siihen ongelmaan... Kyllä se on vähintäänkin vähimmäisvaatimus, että kertoo mitä sen koodin pitäisi mielestäsi tehdä.

tsuriga [07.09.2005 18:06:11]

#

JTS kirjoitti:

Aakkosjärjestykseen nuo saa ihan sortilla.

Jos $entryn kuudes indeksi olisi ensimmäinen niin saisi, olettaen nyt, että halutaan linkin nimen mukaan aakkosjärjestykseen. Eli $entry[0]:ssa pitäisi olla linkin nimi, nyt se on $entry[5]:ssä.

Kruger [07.09.2005 18:24:52]

#

mutta eikös tosta koodista puutu } ?

mihin kohtaan sen laitan..

Heikki [07.09.2005 18:41:51]

#

No jos vaikka ottaisit tuolta toiselta riviltlä pois tuon aaltosulun ja pistäisit loppuun forrille ja iffille vastaavan tähän tapaan:

<?php
if(isset($kategory)) {
  print ("<br><table align=\"center\" width=\"95%\" cellpadding=\"0\" cellspacing=\"0\">");
  $file = "linkit.txt";
  $open = file($file);
  count = count($open);
  for ($p=0; $p<$count; $p++) {
   $entry = explode("|", $open[$p]);
  }
}
?>

Edit. Sisennykset bugaa, jos on 1 space rivin alussa koodi ei sisenny oikein.

Kruger [07.09.2005 19:09:34]

#

<?php
if(isset($kategory)) {
  print ("<br><table align=\"center\" width=\"95%\" cellpadding=\"0\" cellspacing=\"0\">");
  $file = "linkit.txt";
  $open = file($file);
  $count = count($open);
  for ($p=0; $p<$count; $p++) {
   $entry = explode("|", $open[$p]);
  }
?>

Jep näin sain toimimaan eli toinen } alhaalta pois.. mutta ei ongelmat siihen loppuneet nyt jos selaan linkkejä ei näytä mitään..

Juice [07.09.2005 21:08:05]

#

Et tulostakaan mitään?

<?php
if(isset($kategory)) {
  print ("<br><table align=\"center\" width=\"95%\" cellpadding=\"0\" cellspacing=\"0\">");
  $file = "linkit.txt";
  $open = file($file);
  $count = count($open);
  echo '<ul>';
  for ($p=0; $p<$count; $p++) {
    $entry = explode("|", $open[$p]);
    echo '<li><a href="'.$entry[0].'">'.$entry[1].'</a></li>';
  }
  echo '</ul>';
}
?>

Kruger [07.09.2005 21:20:40]

#

No nyt se rupes kiukuttelemaan rivi 163

Parse error: parse error, unexpected '}' in /home on line 163

mikäs nyt neuvoksi ?

hunajavohveli [07.09.2005 21:24:03]

#

Ei voi sanoa noilla tiedoilla. Sulla on syntaksiin sopimaton aaltosulku rivillä 163, mutta vika voi olla muuallakin.

Kruger [07.09.2005 21:31:22]

#

no siinä on koko koodi:

<?php
if($save_new_link) { //Onko uuden linkin lisäämisen aika?
 if($name && $email && $sitename && $siteurl && $description && $kategoria) { //Tarkistetaan että kaikki tiedot on pistetty...
  $pvm = date("j.m.Y"); //Asetetaan $pvm muuttuja olemaan päivämäärä...
  $time = date("H:i:s"); //Asetetaan $time muuttuja olemaan kellonaika...
  $days = array("Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai"); //Asetetaan päivien nimet kohdalleen
  $day = $days[date("w")]; //Asetetaan $day muuttujaan päivän nimi
  $add = "$day|$pvm|$time|$name|$email|$sitename|$siteurl|$description\n"; //Mitä tallennetaan?
  $fo = fopen("linkit.txt", "a"); //Avataan kategoria
  flock($fo, 2); //Lukitaan tiedosto jotta siihen ei pysty kirjoittamaan samaan aikaan
  fwrite($fo, $add); //Tallennetaan tiedot
  flock($fo, 3); //Avataan lukitus
  fclose($fo); //Suljetaan tiedosto
  print ("<script language=\"javascript\" type=\"text/javascript\">");
  print ("alert(\"Uusi linkki lisätty onnistuneesti\");");
  print ("</script>");
  }
  else {
  print ("<script language=\"javascript\" type=\"text/javascript\">");
  print ("alert(\"Täytä kaikki pakolliset kohdat.\");");
  print ("</script>");
   }
}
?>

<br>
<table border=0 align="center" width="95%" cellpadding="0" cellspacing="0" class="navi">
  <tr>
    <td>
        <a href="lisaalinkki.php" class="selaa">Selaa linkkejä</a> |
        <a href="lisaalinkki.php?id=uusi" class="selaa">Lisää uusi linkki</a>
    </td>
  </tr>
</table>

<?php
if(isset($kategory)) {
  print ("<br><table align=\"center\" width=\"95%\" cellpadding=\"0\" cellspacing=\"0\">");
  $file = "linkit.txt";
  $open = file($file);
  $count = count($open);
  echo '<ul>';
  for ($p=0; $p<$count; $p++) {
    $entry = explode("|", $open[$p]);
    echo '<li><a href="'.$entry[0].'">'.$entry[1].'</a></li>';
  }
  echo '</ul>';
}
?>

<form action="<?php print $PHP_SELF;?>" method="post">
<br>
<table class="lomake" border=0 align="center" width="95%" cellpadding="0" cellspacing="0">
  <tr>
    <td>
        Kategoria:
        </td>
        <td>
        <?php
        print ("<select name=\"kategoria\">\n"); //Tulostetaan select juttu
        $file = "http://kategory.txt"; //Määritetään avattava tiedosto
        $open = file($file); //Avataan...
        $count = count($open); //Lasketaan rivit
        for ($p=0; $p<$count; $p++) {
        $info = explode("|", $open[$p]); //Pilkotaan tiedosto...
        print ("<option value=\"$info[0]\">$info[1]</option>\n"); //Tulostetaan kategoriat optioniin
    } //Ja valmis
        print ("</select>\n"); //Ja vielä lopetetaan selecti...
          ?>
    </td>
  </tr>
  <tr>
    <td>Teidän nimenne:</td><td><input type="text" name="name" size="35"></td>
 </tr>
 <tr>
   <td>Sähköposti:</td><td><input type="text" name="email" size="35"></td>
 </tr>
 <tr>
   <td>Sivun nimi:</td><td><input type="text" name="sitename" size="35"></td>
 </tr>
 <tr>
   <td>www-sivun osoite:</td><td><input type="text" value="http://" name="siteurl" size="40"></td>
 </tr>
 <tr>
   <td>Selostus sivuista:</td><td><textarea name="description" cols=30 rows=12></textarea></td>
 </tr>
 <tr>
   <td align="center"><input type="submit" value="Lisää linkki!" name="save_new_link"></td><td></td>
 </tr>
 <tr>
   <td> </td><td></td>
 </tr>
</table>
<br><br>

<?php

if(isset($kategory)) {
  print ("<br><table align=\"center\" width=\"95%\" cellpadding=\"0\" cellspacing=\"0\">");
  $file = "linkit.txt";
  $open = file($file);
  $count = count($open);
  for ($p=0; $p<$count; $p++) {
   $entry = explode("|", $open[$p]);
  }

?>

  <tr>
    <td class="linkki"><a href="<?php print $entry[6]; ?>"><?php print $entry[5];?></a></td>
  </tr>
  <tr>
    <td class="lisaaja"><?php print $entry[7];?></td>
  </tr>
  <tr>
    <td class="lisaaja">
        <?php
        print ("<br>Lisääjä: <a href=\"mailto:$entry[4]\"><b>$entry[3]</b></a><br>");
        print ("Lisätty: $entry[0] $entry[1] kello $entry[2]<br><br>")

        ?>
        </td>
  </tr>
  <?php
  }
 print ("</table>"); //Ja viimeiseksi tulostetaan tommoinen...
 }

 else {
 print ("<br><table align=\"center\" width=\"95%\" cellpadding=0 cellspacing=0>\n");
 $file = "http://kategory.txt"; //Ja aina nää samat jutut
 $open = file($file);
 $count = count($open);
 for ($p=0; $p<$count; $p++) {

 $kate = explode("|", $open[$p]);

?>
  <tr>
    <td class="ahref"><a href="lisaalinkki.php?kategory=<?php print $kate[0];?>"><?php print $kate[1];?></a></td>
  </tr>
  <tr>
    <td class="ahref"><?php print $kate[2]?></td>
  </tr>
<?php
 }
 print ("</table>");
}
//Ja voilá! Scripti on valmis
?>

se on nyt line 127

Anssi V [07.09.2005 21:59:48]

#

Kantsisko kattoa mitä sielä rivillä 127 on?

  }
 print ("</table>"); //Ja viimeiseksi tulostetaan tommoinen...
 } //rivi 127

Sulkeita liikaa...

Kruger [07.09.2005 22:13:02]

#

Ok yritin deletoida noista toisen mut se ei toimi vieläkään..

hunajavohveli [07.09.2005 22:20:29]

#

Käy koko syntaksi huolella läpi, niin saat selville, missä mättää. Ei tuota oikein muutenkaan voi selville saada.

Kruger [07.09.2005 22:22:03]

#

pitää tutkia..

str4nd [10.09.2005 20:35:57]

#

Rivi 143:

<td class="ahref"><?php print $kate[2]?></td>

muotoon:

<td class="ahref"><?php print $kate[2]; ?></td>

Tuon ainakin autan.

ipe [10.09.2005 22:09:47]

#

eipä noilla välilyönneillä pitäisi olla merkitystä.. eikä puolipistettäkään tarvitse koodin vikaan riviin.

leftover [11.09.2005 11:00:31]

#

ipe kirjoitti:

eipä noilla välilyönneillä pitäisi olla merkitystä.. eikä puolipistettäkään tarvitse koodin vikaan riviin.

Nyt täytyy taas kääkän ärähtää, nuo lisäykset olivat enemmän kuin tarpeellisia.

Kysyjä on selkeästi ottanut palan valmisskriptaa joka on yksinkertaisesti tehty vähät välittämättä koodausstandardeista. Jos koodi olisi standardimpaa, olisi kysyjä jo itse osannut korjata koodin meidän ja php.netin avustuksella, mutta noinkin luotaantyöntävä koodi ei ole innostanut esimerkiksi minua neuvomaan koska käytännössä joutuisin kirjoittamaan koko koodin uudestaan.

Otetaan hieman koodauksen perusteita (kyllä, kaikki liittyy vain php:hen mutta soveltamalla niitä myös muihin kieliin kaikkien elämä helpottuu):

1. Ei lyhyitä aloitustageja. Se on pieni vaiva koodaajalta aloittaa koodi <?php mutta julmettu työ implementoijalta muuttaa n^2 tiedoston aloitustagit.

2. Kommentointi. Kun kommentoidaan, ei mennä liiallisuuksiin:

<?php // Aloitetaan PHP-skripti
// Seuraavaksi asetetaan muuttujalle i oletusarvo 0
$i=0;

// for-looppi tulostelee a:n arvoa paitsi jos se on sama
// kuin i:n oletusarvo joka siis oli 0
for ($a=0;$a<50;$a++) {
    // Tässä tehdään a:n ja i:n vertailu
    if ($a != $i) {
        // Tässä tulostetaan a jos se on eri kuin i
        echo "{$a}\n";
    }
}

// Koodin suoritus lopetetaan tähän
?>

3. Kommentointi. Kun kommentoidaan, ei vähätellä:

<?php
$i=0;
for ($a=0;$a<50;$a++) {
    if ($a != $i) {
        echo "{$a}\n";
    }
}
?>

4. Sisennykset. Koodia tulisi sisentää vähintään kahdella, mielellään neljällä välilyönnillä per osa-alue

5. Tulostettavien muuttujien kapsulointi:

<?php

$auto = "Volvo";
$autoa = "silakkaa";

echo "ajoin $autoa"; // Tulostaisi "ajoin silakkaa"
echo "ajoin {$auto}a"; // Tulostaisi "ajoin Volvoa";

?>

6. Kaikki ehdot, loopit ja muut osa-alueiden erottimet alkaa { ja loppuu }. Vaikka ilman aloitusta ensimmäinen rivi suoritetaan ja tämän jälkeen jatketaan koodia, on se hyvä avata ja sulkea niin ei jälkikäteen lisätyt koodirivit lausekkeen sisälle aiheuta pään vaivaa.

7. Tietoturva. Ei tueta sitä register_globals = on asetusta eikä neuvota kyselemään kannasta suoraan $_GET muuttujalla.

8. Väljyyttä. Jos koodi on yhtä pötköä, ei sitä tulkkaa enää edes sen tekijä 2kk päästä. Samoin kuin lauseiden päättäminen ; koska aina on mahdollista että viimeisen komennon jälkeen tulee uusi viimeinen komento.

ugh, olen puhunut.

Blaze [11.09.2005 11:20:14]

#

leftover kirjoitti:

4. Sisennykset. Koodia tulisi sisentää vähintään kahdella, mielellään neljällä välilyönnillä per osa-alue

Ja kaikkein mieluiten yhdellä tabilla.
Jos se tuntuu omaan makuun liian leveältä, editorin asetuksista voi säätää.

leftover [11.09.2005 13:07:08]

#

Blaze kirjoitti:

Ja kaikkein mieluiten yhdellä tabilla.
Jos se tuntuu omaan makuun liian leveältä, editorin asetuksista voi säätää.

Amen. Oman editorini tabileveys on juuri tuo 4 tyhjää, mutta siirrettävyyden vuoksi olen käyttänyt tab=>välilyönneiksi (koska esim. Amiga ei tunnista /t, ainakaan kaikissa versioissa).


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta