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ää ?
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?
Voisitko näyttää toimivan esimerkin tosta..
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.
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..
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.
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!
Kyllä kannattaa ja kyllä mä tajuun ohjelmoinneista useistakin kielistä mutta tota en nyt saa toimimaan.
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?
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ä.
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ä.
mutta eikös tosta koodista puutu } ?
mihin kohtaan sen laitan..
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.
<?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..
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>'; } ?>
No nyt se rupes kiukuttelemaan rivi 163
Parse error: parse error, unexpected '}' in /home on line 163
mikäs nyt neuvoksi ?
Ei voi sanoa noilla tiedoilla. Sulla on syntaksiin sopimaton aaltosulku rivillä 163, mutta vika voi olla muuallakin.
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
Kantsisko kattoa mitä sielä rivillä 127 on?
} print ("</table>"); //Ja viimeiseksi tulostetaan tommoinen... } //rivi 127
Sulkeita liikaa...
Ok yritin deletoida noista toisen mut se ei toimi vieläkään..
Käy koko syntaksi huolella läpi, niin saat selville, missä mättää. Ei tuota oikein muutenkaan voi selville saada.
pitää tutkia..
Rivi 143:
<td class="ahref"><?php print $kate[2]?></td>
muotoon:
<td class="ahref"><?php print $kate[2]; ?></td>
Tuon ainakin autan.
eipä noilla välilyönneillä pitäisi olla merkitystä.. eikä puolipistettäkään tarvitse koodin vikaan riviin.
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ä:
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.
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ää.
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).
Aihe on jo aika vanha, joten et voi enää vastata siihen.