Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Yksinkertainen PHP-skripti?

Sivun loppuun

neebo [11.10.2005 12:13:41]

#

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&auml;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???

ajv [11.10.2005 12:43:31]

#

Ä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&auml;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 :)

Olga [11.10.2005 14:43:56]

#

Edit: Viesti poistettu, ajv kertoi jo saman :)

ajv [11.10.2005 15:11:30]

#

Hehheh, joskus musta tuntui, että olen aina hidas vastaamaan, mutta pikkuhiljaa alkaa tuntumaan siltä, että se hidas on Olga :P

Olga [11.10.2005 20:16:16]

#

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... :)

neebo [11.10.2005 20:42:16]

#

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 ;)

ajv [11.10.2005 20:46:52]

#

Sanoisin tässä vaiheessa, että lue tuo aikaisempi viestini uusiksi ajatuksella. Hipsut ovat juuri noita '-merkkejä.

neebo [11.10.2005 21:02:07]

#

$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?

ajv [11.10.2005 21:05:12]

#

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&auml;ivitetty. <a href=./>Palaa takaisin</a>";
   }else{
      echo "Tiedot eivät muuttuneet";
   }
}
?>

neebo [11.10.2005 21:09:08]

#

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.

ajv [11.10.2005 21:13:11]

#

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ää.

neebo [11.10.2005 21:33:19]

#

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

ajv [11.10.2005 21:42:07]

#

Kait sulla on siellä jossakin kohtaa se mysql_connect(); Se palauttaa sen sen linkkitunnisteen sinne tietokantaan:
$sqllink = mysql_connect($host, $username, $password);

neebo [11.10.2005 21:48:04]

#

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&auml;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ä?

ajv [11.10.2005 21:53:56]

#

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.

neebo [11.10.2005 21:57:20]

#

Hehehehehe... Tää varmaan kuullostaa susta hölmöltä, mut mitä debuggaus varsinaisesti tarkoittaa?

ajv [11.10.2005 22:00:54]

#

Ää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.

neebo [11.10.2005 22:09:54]

#

Aevan nyt kirkastu huomattavasti ;D Tänks! Nyt mä rupeenkin metsästää jotain oivaa skriptiä millä pystyn estämään useamman äänen annon :D

Sami [12.10.2005 00:07:03]

#

bug = ötökkä = virhe koodissa
debug = poistaa ötököitä = poistaa virheitä koodista

Loogista, eikö totta?

neebo [12.10.2005 00:49:47]

#

Hehehehe. Todellakin!


Sivun alkuun

Vastaus

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

Tietoa sivustosta