Millanen koodi tarvitaan että sais mysql lisäämään arvoja. Eli siis esimerkiksi et php:ssä laskutoimitukset toimisivat mysql:lässä?
<? include("dbconnect.php"); if ($_POST["$submit"]) //jos lomakkeesta on painettu lähetä { $rateitem = $_POST["rateitem"]; $ratesum = $_REQUEST["ratesum"]; $rateavg = $_REQUEST["rateavg"]; $ratesum = $ratesum + $rateitem; $newsum = $ratesum / $ratekpl; $newsum = round($newsum,2); $rateavg = $newsum; $newsql = "UPDATE portfolio SET rateavg='$rateavg', ratekpl='$ratekpl', ratesum='$ratesum' WHERE id=$id"; $newresult = mysql_query($newsql); echo "Tiedot päivitetty. <a href=./>Palaa takaisin</a>"; } ?>
Siis kun lähetän formilla tolle koodille arvon. Ni mysql:llässä ei tiedot muutu muuten kuin siten, että siinä on aina vaan se arvo minkä käyttäjä on viimeksi asettanut. Eli miten arvot saa lisääntymään ja tekemään noi laskutoimitukset???
Älä tulosta, että "Tiedot päivitetty", jos et edes tarkasta onko ne päivittyneet.
Parempi:
<?php if(mysql_affected_rows($sqllink) > 0){ echo "Tiedot päivitetty. <a href=./>Palaa takaisin</a>"; } ?>
Ja sitten ongelmaan, en näe lauseessa sinänsä mitään muuta vikaa, paitsi numeerisissa kentissä ei tulisi käyttää hipsuja.
Lisäksi kannattaa opetella debuggaamaan:
<?php $sql = "UPDATE portfolio SET rateavg='$rateavg', ratekpl='$ratekpl', ratesum='$ratesum' WHERE id=$id"; if(!mysql_query($sql)){ echo mysql_error(); echo $sql; exit(); } ?>
Niin ja debuggaukset sitten pois lopullisesta versiosta. Auttaa krakkeria kummasti, jos hän pystyy aiheuttamalla virhetilanteita saamaan kriittistä tietoa koodeistasi ulos :)
Edit: Viesti poistettu, ajv kertoi jo saman :)
Hehheh, joskus musta tuntui, että olen aina hidas vastaamaan, mutta pikkuhiljaa alkaa tuntumaan siltä, että se hidas on Olga :P
Jeh :) Tässä tapauksessa ei käynyt niin, mutta yleensä naputtelen uudet aiheet tabeihin ja käyn niitä yksitellen läpi. Viimeiset ehtivät luonnollisesti muhia aika kauan ennen niihin pääsyä ja usein niihin on ehditty jo vastaamaan kun itse näpyttelen vastausta. Tietty olisi fiksua ladata sivu uudelleen ennen vastausta, mutta eipä sitä koskaan muista... :)
Koodi näyttää tältä:
<?php include("dbconnect.php"); if ($_POST["$submit"]) //jos lomakkeesta on painettu lähetä { $rateitem = $_POST['rateitem']; $ratesum = $_REQUEST['ratesum']; $ratekpl = $_REQUEST['ratekpl']; $rateavg = $_REQUEST['rateavg']; $ratekpl = $ratekpl + 1; $ratesum = $ratesum + $rateitem; $rateavg = $ratesum / $ratekpl; $rateavg = round($rateavg,2); $sql = "UPDATE portfolio SET rateavg='$rateavg', ratekpl='$ratekpl', ratesum='$ratesum' WHERE id=$id"; $result = mysql_query($newsql); } ?>
Mutta siis missä on vika, kun anna selaimessa formille arvon 5. Se lähettää sen kyllä mysql tauluun portfolio jonne se lisää siis kenttiin:
rateavg = 5
ratekpl = 1
ratesum = 5
Siis toisinsanottu mitkään luvut eivät lisäännyt vaikka laitan uudelleen arvon. Edes ratekpl ei lisäänny, vaikka mun mielestä näyttää niin yksinkertaiselta laskutoimitukselta et pitäis wörkkiä. En kyl tajuu :(
Jos vaan joku voi kertoa missä vika??? Ja missä kohtaan ei saa käyttää hipsuja ja onko noi hipsut niinkun " ???
Hehe, oon aika noob ;)
Sanoisin tässä vaiheessa, että lue tuo aikaisempi viestini uusiksi ajatuksella. Hipsut ovat juuri noita '-merkkejä.
$sql = "UPDATE portfolio SET rateavg=$rateavg, ratekpl=$ratekpl, ratesum=$ratesum WHERE id=$id";
Eli noin?
Mutta eipäs vaan noi luvut siltikään lisäänny tuolla mysql:lässä. Missä siis vika?
Ei vaan:
<?php $sql = "UPDATE portfolio SET rateavg=".$rateavg.", ratekpl=".$ratekpl.", ratesum=".$ratesum." WHERE id=".$id; if(!mysql_query($sql)){ echo mysql_error(); echo $sql; exit(); }else{ echo 'SQL-lause suoritettu onnistuneesti'; if(mysql_affected_rows($sqllink) > 0){ //$sqllink, eli sieltä dbconnect.php:stä se linkki tietokantaan echo "Tiedot päivitetty. <a href=./>Palaa takaisin</a>"; }else{ echo "Tiedot eivät muuttuneet"; } } ?>
Ei vaan siltikään numerot mysql:lässä kasva. Vaikka laitoin tuon esimerkkisi, misään vaiheessa ei mitään herjaa, mut luvut eivät kasva.
No koitas nyt vielä, muokkasin tota vielä vähäsen.
Ja jos ei muutu, niin tulosta toi SQL-lause ruudulle ja kato mitä noi muuttujat oikeasti sisältää.
Mulla on siis tuolla dbconnectissa:
$username = "***";//your username $password = "***";//your password $host = "localhost";//your mySQL server $database = "***";//The name of the database $table = 'portfolio'; // The sql table
Ja sit laitoin tohon mysql_affected_rows($sqllink) kohtaan $sqllink tilalle $table.
Tulostaa seuraavaa:
SQL-lause suoritettu onnistuneesti
Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in /home/xxx/public_html/portfolio/rate.php on line 25
Tiedot eivät muuttuneet
Suuri kiitos ajv kun jaksat auttaa tälläistä newbietä :D
Kait sulla on siellä jossakin kohtaa se mysql_connect(); Se palauttaa sen sen linkkitunnisteen sinne tietokantaan:
$sqllink = mysql_connect($host, $username, $password);
YEAH! Nyt sain toimii jotenkin! Kiitos ajv.
Tällänen koodi tuottaa tulosta:
<? include("dbconnect.php"); $sqllink = mysql_connect($host, $username, $password); if ($_POST["$submit"]) //jos lomakkeesta on painettu lähetä { $rateitem = $_POST['rateitem']; $ratesum = $_REQUEST['ratesum']; $ratekpl = $_REQUEST['ratekpl']; $rateavg = $_REQUEST['rateavg']; $sql = "UPDATE portfolio SET rateavg = ratesum / ratekpl, ratekpl = ratekpl + 1, ratesum = ratesum + '$rateitem' WHERE id"; if(!mysql_query($sql)){ echo mysql_error(); echo $sql; exit(); } else{ echo 'SQL-lause suoritettu onnistuneesti'; if(mysql_affected_rows($sqllink) > 0){ //$sqllink, eli sieltä dbconnect.php:stä se linkki tietokantaan echo "Tiedot päivitetty. <a href=./>Palaa takaisin</a>"; }else{ echo "Tiedot eivät muuttuneet"; } } } ?>
Sä oot KONE!
Tiedäkkö jotain helppoa zydeemiä miten tohon sais sillai et käyttäjä ei pysty antaa montaa ääntä?
neebo kirjoitti:
Sä oot KONE!
Kiitos kiitos :D
Eli nyt kun toimii, niin voi vähentää noita debuggaus-tulostuksia hieman. Monen äänen estäminen käyttäjältä onkin sitten hieman monimutkaisempi juttu. Joko tyrkytät käyttäjälle keksiä äänestyksen yhteydessä ja sitten tuossa lisäyksen yhteydessä tarkistat ettei keksiä löydy. Toinen vaihtoehto on tallentaa käyttäjän IP-osoite jonnekkin ja tarkastaa ettei ip-osoitetta löydy ennestään. Kummastakin tavasta löytyy omat huonot puolensa. Täydellistä ratkaisua tuohon ei ole vielä keksittykkään.
Hehehehehe... Tää varmaan kuullostaa susta hölmöltä, mut mitä debuggaus varsinaisesti tarkoittaa?
Äähh... No tuota virheenetsintää. Eli tässä tapauksessa noiden välivaiheiden tulostamista. Eli ei käyttäjälle oikeasti kannata mitään "SQL-lause suoritettu onnistuneesti" tulostaa. Se vaan kerto sulle, että vika ei ole SQL-lauseessa.
Aevan nyt kirkastu huomattavasti ;D Tänks! Nyt mä rupeenkin metsästää jotain oivaa skriptiä millä pystyn estämään useamman äänen annon :D
bug = ötökkä = virhe koodissa
debug = poistaa ötököitä = poistaa virheitä koodista
Loogista, eikö totta?
Hehehehe. Todellakin!
Aihe on jo aika vanha, joten et voi enää vastata siihen.