taas mysql-ongelma

Eli minulla on sivulla lomake joka hakee tietokannasta tiedot ja sitten noita tietoja pystyy siinä muokkaamaan. Koodin pätkä on seuraavanlainen:


mysql_select_db($database,$yhteys) or die("Virhe valittaessa tietokantaa!");

mysql_connect($server, $user, $pass) or die("Virhe kytkettäessä tietokantaan!");

$query = "UPDATE asiakkaat SET yritys = '$company', etunimi = '$fname', sukunimi = '$sname', kosoite = '$address', postinro = $address1, postitp = '$address2', kosoite2 = '$address3', postinro2 = $address4, postitp2 = '$address5', puhelin = '$phone', email = '$email', tiedot = '$brief', huomautettavaa = '$notice', tyyppi = $tyyppi, hintar = $hintar, riski = $riski, maksut = $maksut WHERE id = $clientid";

mysql_query($query) or die('Virhe suoritettaessa komentoa'.$query);

Saan kuitenkin seuraavanlaisen virheilmoituksen:

Virhe suoritettaessa komentoa
UPDATE asiakkaat SET yritys = 'Kesko Oy', etunimi = 'Pauli', sukunimi = 'Paulinen', kosoite = 'Katu 4', postinro = 45456, postitp = 'Helsinki', kosoite2 = 'katujenkatu 4', postinro2 = 45454, postitp2 = 'Espoo', puhelin = '09-646464', email = '[email protected]', tiedot = 'Huono maksamaan', huomautettavaa = 'Maksamattomia laskuja', tyyppi = 4, hintar = 2, riski = 1, maksut = 1 WHERE id = 44

Nuo taulun kenttien nimet olen tarkistanut ja ne ovat oikein. Lisäksi lisäilin hipsuja ja kokeilin poistaa niitä, mutta sillä ei tunnu olevan vaikutusta. Mikä tuossa oikein voisi olla vikana? Itsellä ei enää taidot riitä :)
12478
Äänestä

Muut lukivat myös

Vastaukset 12

Vanhimmat

Jos ajat tuon käskyn suoraan tietokantaan mysqladminilla tms, meneekö käsky läpi vai saatko jonkun herjan...? Voit rajata virheen aiheuttajaa, onko ongelma php-koodissa vai sql-lauseessa.

Äänestä
  • Joo kyllä tuo käsky näytti läpi menevän eli vika siis PHP:ssä. Ainoa ongelma on ettei ole mitään hajua mistä alkaisi tuota virhettä metsästämään... ideoita?

    Äänestä

Mikä on tuo $yhteys -muutuja? Pitäisikö sen olla näin:
$yhteys = mysql_connect($server, $user, $pass) or die("Virhe kytkettäessä tietokantaan!");
mysql_select_db($database,$yhteys) or die("Virhe valittaessa tietokantaa!");

Äänestä
  • Joo, noin se onkin unohdin vain tuon $yhteys-muuttujan pois viestistä.

    itseasiassa rivi:

    mysql_query($query) or die('Virhe suoritettaessa komentoa'.$query);

    oli alunperin mysql_query($query, $yhteys), mutta tässä on pitänyt kokeilla kaikkea jotta saisi tuon toimimaan :) Eli otin tuon $yhteys muuttujan tuosta pois ja laitoin rivin joka yhdistää tietokantaan. Mutta ei silti äly riitä keksimään, missä vika on :(

       

    Äänestä

  • missä_Vika? kirjoitti:

    Joo, noin se onkin unohdin vain tuon $yhteys-muuttujan pois viestistä.

    itseasiassa rivi:

    mysql_query($query) or die('Virhe suoritettaessa komentoa'.$query);

    oli alunperin mysql_query($query, $yhteys), mutta tässä on pitänyt kokeilla kaikkea jotta saisi tuon toimimaan :) Eli otin tuon $yhteys muuttujan tuosta pois ja laitoin rivin joka yhdistää tietokantaan. Mutta ei silti äly riitä keksimään, missä vika on :(

       

    laita vielä että
    $yhteys = mysql_connect("****", "****", "****");
    $tietokanta = mysql_select_db("****", $yhteys);


    Ja sitten kyselyä perään.

    Äänestä

  • teuro kirjoitti:

    laita vielä että
    $yhteys = mysql_connect("****", "****", "****");
    $tietokanta = mysql_select_db("****", $yhteys);


    Ja sitten kyselyä perään.

    Eipä tunnu auttavan mikään. Tämä on siis tämän hetkinen koodi:

    $yhteys = mysql_connect($server, $user, $pass) or die("Virhe kytkettäessä tietokantaan!");
    mysql_select_db($database,$yhteys) or die("Virhe valittaessa tietokantaa!");

    if($clientid != null) {

    $query = "UPDATE asiakkaat SET yritys = '$company', etunimi = '$fname', sukunimi = '$sname', kosoite = '$address', postinro = $address1, postitp = '$address2', kosoite2 = '$address3', postinro2 = $address4, postitp2 = '$address5', puhelin = '$phone', email = '$email', tiedot = '$brief', huomautettavaa = '$notice', tyyppi = $tyyppi, hintar = $hintar, riski = $riski, maksut = $maksut WHERE id = $clientid";
    mysql_query($query,$yhteys) or die('Virhe suoritettaessa komentoa'.$query);
    $last_client_id = previous_id("asiakkaat", "id");


    }

    else{

    $query = "INSERT INTO asiakkaat (yritys, etunimi, sukunimi, kosoite, postinro, postitp, kosoite2, postinro2, postitp2, puhelin, email, tiedot, huomautettavaa, hintar, tyyppi, riski, maksut ) VALUES ( '".$company."', '".$fname."', '".$sname."', '".$address."', '".$address1."','".$address2."','".$address3."','".$address4."','".$address5."','".$phone."', '".$email."', '".$brief."', '".$notice."','".$hintar."','".$tyyppi."','".$riski."','".$maksut."')";
    mysql_query($query,$yhteys) or die('Virhe suoritettaessa komentoa'.$query);
    $last_client_id = previous_id("asiakkaat", "id");


    }

    mysql_close($yhteys);


    Tuo Else-lauseen INSERT INTO toimii täydellisesti, joten en ymmärrä missä tuossa UPDATE:ssa olisi niin paljon eroa että se aiheuttaisi tuon virheen...

    Äänestä

Virhetilanteissa pähkäilyn sijasta kannattaa käyttää koneen omaa virhejäljitystä kun se on kerta ihan sitä varten tehty.

Lisää siis siihen die-haaraan mysql_errno($link) ja mysql_error($link) tai katso niiden tulokset echo:lla.

Äänestä

...
mysql_query($query);

echo mysql_errno($yhteys) . ": " . mysql_error($yhteys) . "\n";


Niin näät mitä erroreita tietokanta palauttaa.

Äänestä
  • Tällaiset virheilmoitukset sain noilla metodeilla:

    Warning: mysql_query(): 2 is not a valid MySQL-Link resource in /var/www/vahvista2.php on line 109

    Warning: mysql_errno(): 2 is not a valid MySQL-Link resource in /var/www/vahvista2.php on line 111

    Warning: mysql_error(): 2 is not a valid MySQL-Link resource in /var/www/vahvista2.php on line 111
    :
    Warning: mysql_close(): 2 is not a valid MySQL-Link resource in /var/www/vahvista2.php on line 124


    Tässä vielä rivit 106-124:
    if($clientid != null) {

    $query = "UPDATE asiakkaat SET yritys = '$company', etunimi = '$fname', sukunimi = '$sname', kosoite = '$address', postinro = $address1, postitp = '$address2', kosoite2 = '$address3', postinro2 = $address4, postitp2 = '$address5', puhelin = '$phone', email = '$email', tiedot = '$brief', huomautettavaa = '$notice', tyyppi = $tyyppi, hintar = $hintar, riski = $riski, maksut = $maksut WHERE id = $clientid";
    mysql_query($query,$yhteys);// or die(mysql_errno($yhteys));
    //$last_client_id = previous_id("asiakkaat", "id");
    echo mysql_errno($yhteys) . ": " . mysql_error($yhteys) . "\n";

    }

    else{

    $query = "INSERT INTO asiakkaat (yritys, etunimi, sukunimi, kosoite, postinro, postitp, kosoite2, postinro2, postitp2, puhelin, email, tiedot, huomautettavaa, hintar, tyyppi, riski, maksut ) VALUES ( '".$company."', '".$fname."', '".$sname."', '".$address."', '".$address1."','".$address2."','".$address3."','".$address4."','".$address5."','".$phone."', '".$email."', '".$brief."', '".$notice."','".$hintar."','".$tyyppi."','".$riski."','".$maksut."')";
    mysql_query($query,$yhteys) or die('Virhe suoritettaessa komentoa'.$query);
    $last_client_id = previous_id("asiakkaat", "id");


    }

    mysql_close($yhteys);


    Eli minkälaiseen ongelmaan nämä viittaavat ja miten ongelma korjaantuisi?

    Äänestä

  • missä_Vika? kirjoitti:

    Tällaiset virheilmoitukset sain noilla metodeilla:

    Warning: mysql_query(): 2 is not a valid MySQL-Link resource in /var/www/vahvista2.php on line 109

    Warning: mysql_errno(): 2 is not a valid MySQL-Link resource in /var/www/vahvista2.php on line 111

    Warning: mysql_error(): 2 is not a valid MySQL-Link resource in /var/www/vahvista2.php on line 111
    :
    Warning: mysql_close(): 2 is not a valid MySQL-Link resource in /var/www/vahvista2.php on line 124


    Tässä vielä rivit 106-124:
    if($clientid != null) {

    $query = "UPDATE asiakkaat SET yritys = '$company', etunimi = '$fname', sukunimi = '$sname', kosoite = '$address', postinro = $address1, postitp = '$address2', kosoite2 = '$address3', postinro2 = $address4, postitp2 = '$address5', puhelin = '$phone', email = '$email', tiedot = '$brief', huomautettavaa = '$notice', tyyppi = $tyyppi, hintar = $hintar, riski = $riski, maksut = $maksut WHERE id = $clientid";
    mysql_query($query,$yhteys);// or die(mysql_errno($yhteys));
    //$last_client_id = previous_id("asiakkaat", "id");
    echo mysql_errno($yhteys) . ": " . mysql_error($yhteys) . "\n";

    }

    else{

    $query = "INSERT INTO asiakkaat (yritys, etunimi, sukunimi, kosoite, postinro, postitp, kosoite2, postinro2, postitp2, puhelin, email, tiedot, huomautettavaa, hintar, tyyppi, riski, maksut ) VALUES ( '".$company."', '".$fname."', '".$sname."', '".$address."', '".$address1."','".$address2."','".$address3."','".$address4."','".$address5."','".$phone."', '".$email."', '".$brief."', '".$notice."','".$hintar."','".$tyyppi."','".$riski."','".$maksut."')";
    mysql_query($query,$yhteys) or die('Virhe suoritettaessa komentoa'.$query);
    $last_client_id = previous_id("asiakkaat", "id");


    }

    mysql_close($yhteys);


    Eli minkälaiseen ongelmaan nämä viittaavat ja miten ongelma korjaantuisi?

    >...minkälaiseen ongelmaan nämä viittaavat...

    Rivinumeroista ja virheilmoituksen sisällöstä voi päätellä että muuttujan $yhteys sisältö on jotenkin kuralla.

    Äänestä

  • niin! kirjoitti:

    >...minkälaiseen ongelmaan nämä viittaavat...

    Rivinumeroista ja virheilmoituksen sisällöstä voi päätellä että muuttujan $yhteys sisältö on jotenkin kuralla.

    $yhteys = mysql_connect($server, $user, $pass) or die("Virhe kytkettäessä tietokantaan!");

    No tuossa siis $yhteys-muuttujan sisältö, jonka jo aiemmissa posteissa mainitsinkin, mutta en vaan keksi mitä vikaa tuossa voi olla. Muualla kun kuitenkin tuolla samalla tavalla käytän tuota, kuten tuossa else lauseessa ja ilman ongelmia.. Eli voisiko ongelma olla jossain muualla, kuten php:n asetuksissa? Rasittava ongelma...

    Äänestä

  • missä_Vika? kirjoitti:

    $yhteys = mysql_connect($server, $user, $pass) or die("Virhe kytkettäessä tietokantaan!");

    No tuossa siis $yhteys-muuttujan sisältö, jonka jo aiemmissa posteissa mainitsinkin, mutta en vaan keksi mitä vikaa tuossa voi olla. Muualla kun kuitenkin tuolla samalla tavalla käytän tuota, kuten tuossa else lauseessa ja ilman ongelmia.. Eli voisiko ongelma olla jossain muualla, kuten php:n asetuksissa? Rasittava ongelma...

    mysql_query():n link-parametri on optionaalinen. Jos sen jättää pois niin käytetään automaattisesti viimeistä mysql_connect():n palauttamaa arvoa.

    http://fi.php.net/mysql_query

    Kokeile siis näin:
    mysql_query($query) or die('Virhe suoritettaessa komentoa'.$query);

    Äänestä

Kommentoi aloitusta


missä_Vika? kirjoitti:

Eli minulla on sivulla lomake joka hakee tietokannasta tiedot ja sitten noita tietoja pystyy siinä muokkaamaan. Koodin pätkä on seuraavanlainen:


mysql_select_db($database,$yhteys) or die("Virhe valittaessa tietokantaa!");

mysql_connect($server, $user, $pass) or die("Virhe kytkettäessä tietokantaan!");

$query = "UPDATE asiakkaat SET yritys = '$company', etunimi = '$fname', sukunimi = '$sname', kosoite = '$address', postinro = $address1, postitp = '$address2', kosoite2 = '$address3', postinro2 = $address4, postitp2 = '$address5', puhelin = '$phone', email = '$email', tiedot = '$brief', huomautettavaa = '$notice', tyyppi = $tyyppi, hintar = $hintar, riski = $riski, maksut = $maksut WHERE id = $clientid";

mysql_query($query) or die('Virhe suoritettaessa komentoa'.$query);

Saan kuitenkin seuraavanlaisen virheilmoituksen:

Virhe suoritettaessa komentoa
UPDATE asiakkaat SET yritys = 'Kesko Oy', etunimi = 'Pauli', sukunimi = 'Paulinen', kosoite = 'Katu 4', postinro = 45456, postitp = 'Helsinki', kosoite2 = 'katujenkatu 4', postinro2 = 45454, postitp2 = 'Espoo', puhelin = '09-646464', email = '[email protected]', tiedot = 'Huono maksamaan', huomautettavaa = 'Maksamattomia laskuja', tyyppi = 4, hintar = 2, riski = 1, maksut = 1 WHERE id = 44

Nuo taulun kenttien nimet olen tarkistanut ja ne ovat oikein. Lisäksi lisäilin hipsuja ja kokeilin poistaa niitä, mutta sillä ei tunnu olevan vaikutusta. Mikä tuossa oikein voisi olla vikana? Itsellä ei enää taidot riitä :)

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu