Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP/MySQL-ongelma

Sivun loppuun

TsaTsaTsaa [22.01.2008 19:00:52]

#

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/24301-php-kirjautuminen-rekisteröityminen-mysql-llä

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?

TsaTsaTsaa [23.01.2008 09:54:35]

#

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.

kayttaja-2791 [23.01.2008 10:41:25]

#

Lyhyestä virsi kaunis:
https://www.php.net/manual/fi/function.mysql-insert-id.php

TsaTsaTsaa [23.01.2008 11:19:15]

#

Tattis.

TsaTsaTsaa [23.01.2008 13:58:48]

#

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?

Antti Laaksonen [23.01.2008 18:39:00]

#

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.

TsaTsaTsaa [23.01.2008 19:15:12]

#

Asia selvä, kiitos.

TsaTsaTsaa [24.01.2008 09:30:31]

#

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.

Antti Laaksonen [24.01.2008 22:19:06]

#

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

kayttaja-2791 [24.01.2008 22:58:54]

#

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

Antti Laaksonen [25.01.2008 16:45:00]

#

Joo, enpä ottanut tuota asiaa huomioon. Mutta samaa ajatusta käyttäen tuokin tilanne hoituu.

TsaTsaTsaa [25.01.2008 19:06:20]

#

En perhana saa millään toimimaan.

TsaTsaTsaa [29.01.2008 16:32:30]

#

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

TsaTsaTsaa [29.01.2008 19:37:38]

#

Jep jep, sieltähän puuttui SQL-lauseesta merkkijonojen ympäriltä hipsut.


Sivun alkuun

Vastaus

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

Tietoa sivustosta