EDIT: Komento takas, komento takas...Puuttui vaan SQL-kyselystä yksi pilkku. Miksei antanut virheilmoitusta?
EDIT2: Moderaattorit poistakoon (vai poistakoot) tämän jos niin parhaaksi näkevät.
Kirjautumis/rekisteröimishommelia olen tekemässä sivuilleni ottaen mallia seuraavasta vinkistä: https://www.ohjelmointiputka.net/koodivinkit/
Ongelma on se, että kirjautuminen ei onnistu. Tai kyllä se tavallaan onnistuu, kun phpMyAdminissa käyn katsomassa käyttäjän last_load-kenttää, niin se kyllä päivittyy aina kun yrittää kirjautua, mutta silti sivulla näkyy kirjautumislomake, eikä käyttäjän tiedot. Vaikuttaa siltä, että tuo ehto if ($user)
ei toimisi halutulla tavalla.
Mistä voi johtua?
No laitetaans nyt tähän kun kerran sama aihe.
Eli onko jotenkin mahdollista päästä suoraan käsiksi juuri lisättyyn riviin? Siis:
$kysely = "INSERT INTO taulu(nimi, rotu) VALUES('Ruupert', 'Rottweiler')"; mysql_query($kysely); // Haluaisin siis juuri lisätyn rivin heti käsittelyyn, koska tarvitsen sieltä // id:n, joka on auto_increment. Onko tähän siis kätevää tapaa, vai pitääkö // tehdä kysely (SELECT id FROM taulu WHERE nimi = 'Ruupert') olettaen että // nimi on myös yksikäsitteinen kenttä?
Tämmöstä tällä kertaa.
Lyhyestä virsi kaunis:
https://www.php.net/manual/fi/function.mysql-insert-id.php
Tattis.
Minkälaisella säännöllisellä lausekkeella teen muutoksen: $teksti = "[linkki]www.google.fi[/linkki]"; // muutos echo $teksti; // tulostuu <a href="www.google.fi">www.google.fi</a> Ilmeisesti jotenkin \[linkki].+?\[/linkki] ,mutta kuinka saan tuossa tagien välissä olevan tekstin talteen?
Tuossa on yksi ehdotus:
$teksti = preg_replace("/\\[linkki\\]([^\\[]+)\\[\\/linkki\\]/", "<a href=\"\\1\">\\1</a>", $teksti);
Siis myöhemmin käytettävä korvattavan tekstin osa merkitään sulkujen sisään säännöllisessä lausekkeessa. Tämän jälkeen talteen otettua osaa voidaan hyödyntää korvaavassa tekstissä merkinnällä \\n, jossa n kertoo, mikä sulkeilla merkitty tekstin osa siihen kohtaan kuuluu. Tai tarkemmin \\0 tarkoittaa koko korvattavaa tekstiä, \\1 on ensimmäisten sulkeiden rajaama osa, \\2 on toisten sulkeiden rajaama osa jne.
Huomaa myös, että hakasuluilla ja kauttaviivalla on erikoismerkitys säännöllisessä lausekkeessa, minkä vuoksi niiden eteen pitää kirjoittaa kenoviivoja, jos ne viittaavatkin tekstissä esiintyviin hakasulkuihin ja jakomerkkeihin.
Asia selvä, kiitos.
Lisää samanlaista pulmaa.
Löysin jostain putkan syövereistä tämmöisen:
$teksti = preg_replace("/((http(s?):\/\/)|(www\.))(([\w\-\.]+)(\/[^[:space:]]+)*)/i", "<a href=\"http$3://$4$5\">$2$4$5</a>", $teksti);
Tuo siis muuttaa tekstistä kaikki nettiosoitteet linkeiksi, mutta kuinka saan siihen semmoisen lisän, että se muuttaa vain sellaiset, jotka EIVÄT ole lainausmerkkien sisällä? Yritin lisätä alkuun ennen http-osaa ja loppuun ennen /i:tä [^\"]*?, mutta ei auttanut. Liian hämmentäviä meikäläisen päähän nämä lausekkeet.
Tuo on ihan toimiva keino, kunhan lisäät hyväksytyt reunamerkit (muut kuin lainausmerkit) myös korvaavaan merkkijonoon. Tässä on esimerkki, joka muuttaa kaikki a-kirjaimet A-kirjaimiksi, kunhan kummallakaan puolella ei ole lainausmerkkiä.
<?php $teksti = 'iai 1a2 "a" ia" bac "a" "a2 oao'; $teksti = preg_replace("/([^\"])a([^\"])/", "\\1A\\2", $teksti); ?>
Jos taas muutos täytyy estää vain silloin, kun molemmilla puolilla on lainausmerkit, koodi täytyy kirjoittaa hieman toisin:
<?php $teksti = 'iai 1a2 "a" ia" bac "a" "a2 oao'; $teksti = preg_replace("/a([^\"])/", "A\\1", $teksti); $teksti = preg_replace("/([^\"])a/", "\\1A", $teksti); ?>
Antti Laaksonen kirjoitti:
Tuo on ihan toimiva keino, kunhan lisäät hyväksytyt reunamerkit (muut kuin lainausmerkit) myös korvaavaan merkkijonoon. Tässä on esimerkki, joka muuttaa kaikki a-kirjaimet A-kirjaimiksi, kunhan kummallakaan puolella ei ole lainausmerkkiä.
<?php $teksti = 'iai 1a2 "a" ia" bac "a" "a2 oao'; $teksti = preg_replace("/([^\"])a([^\"])/", "\\1A\\2", $teksti); ?>
Eikös tuo ole hieman virheellinen. Tuohan vaatii että sen ympäröi jotkin muut merkit kuin lainausmerkit. Eikös se helpommin mene jotekin näin:
<?php $teksti = 'iai 1a2 "a" ia" bac "a" "a2 oao'; $teksti = preg_replace("/\"{0,0}a\"{0,0}/", "\\1A\\2", $teksti); ?>
Lonkalta heitetty, toivottavasti ainakin idea käy ilmi. Pitäisi siis toimia myös stringillä 'a'.
Joo, enpä ottanut tuota asiaa huomioon. Mutta samaa ajatusta käyttäen tuokin tilanne hoituu.
En perhana saa millään toimimaan.
Nyt on sellainen pulma, että seuraava koodinpätkä ei tee mitä pitäisi, eli se ei tallenna muutoksia tietokantaan. Tässäpä tämä:
<?php include("ylaosa.php"); if ($_GET['id'] <> "") { $t_id = $_GET['id']; if ($user['id'] != $t_id) { echo "Fatal Error Exception Code c0000005!\n"; } else { // Päivitetään tiedot if ($_POST['kuvaus'] <> "") { // Tarkistetaan, että validi email if (!(preg_match("/(.+)@(.+)/is", $_POST['email']))) { // Tämä osuus ainakin toimii oikein, eli ilmoittaa // virheellisestä osoitteesta, jos laittaa vaikka kalle.net echo "Virheellinen Sähköpostiosoite!<br />\n"; } else { // TODO: Selvitetään, saako emailin näyttää muille // checkboxin perusteella $naytetaanko = "0"; mysql_query("UPDATE users SET kuvaus = $_POST[kuvaus], email = $_POST[email], show_email = $naytetaanko WHERE id = $t_id"); } } // Haetaan ID:llä henkilön tiedot (jos löytyy) $kysely = mysql_query("SELECT nick, email, kuvaus, passwd, show_email FROM users WHERE id = $t_id"); // Haetaan tiedot muuttujiin $t_nick = mysql_result($kysely, 0, 0); $t_email = mysql_result($kysely, 0, 1); $t_semail = mysql_result($kysely, 0, 4); $t_kuvaus = mysql_result($kysely, 0, 2); $t_passwd = mysql_result($kysely, 0, 3); // Tulostellaan lomakkeita /********************************************** * LOPPUOSASTA POISTETTU EPÄOLEELLISIA RIVEJÄ * * JOTEN ÄLKÄÄ IHMETELKÖ, JOS JOTAIN TAULUKON * * SOLUJA EI ALOITETA TAI SULJETA :) * **********************************************/ // muokkaaprofiilia.php on siis tämä samainen tiedosto echo "<form action=\"muokkaaprofiilia.php?id=$t_id\" method=\"post\">\n"; echo "<td><b>Sähköpostiosoite:</b></td>\n <td><input name=\"email\" type=\"text\" size=\"50\" value=\"$t_email\" /></td></tr>\n"; echo "<tr>\n <td><b>Näytä sähköpostiosoite muille käyttäjille:</b></td>\n"; // Tarkistetaan, saako sähköpostin näyttää (jos saa, niin ruksi valmiina) if ( intval($t_semail) ) { echo "<td><input name=\"ruksi\" value=\"showemail\" type=\"checkbox\" checked/></td>\n"; } // Muuten tyhjä checkbox else { echo "<td><input name=\"ruksi\" value=\"showemail\" type=\"checkbox\" /> </td>\n"; } echo "</tr>\n"; echo "<tr>\n <td valign=\"top\"><b>Vapaa kuvaus:</b></td> <td><textarea name=\"kuvaus\" rows=\"12\" cols=\"80\">$t_kuvaus </textarea></td>\n </tr> <tr><td> </td>\n<td> <input type=\"submit\" value=\"Tallenna muutokset\" /></td>\n </tr> </table>"; echo "</form>\n"; } } else { echo "Ei ID:tä."; } include("alaosa.php"); ?>
Jep jep, sieltähän puuttui SQL-lauseesta merkkijonojen ympäriltä hipsut.
Aihe on jo aika vanha, joten et voi enää vastata siihen.