Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Textarea tietokantaan (MySQL)

Sivun loppuun

Gramexer [13.04.2010 00:06:54]

#

Juu, minulla on tälläinen omanlainen harjoitus-projekti meneillään, mutta törmäsin 'ylivoimaiseen esteeseen'. Taitonihan ei ole ihan huipussaan, joten tulin hieman neuvoa pyytämään.

Eli ongelma on tämä. Minulla on 3 inputtia(type="text") ja yksi textarea. Kaikki toimii muuten loistavasti, mutta jos jossakin näistä on jokin seuraavista (',",# ja varmaan muitakin erikoismerkkejä) niin tiedot eivät tallennu tietokantaan, teksti kyllä tulostuu ruudulle. (ja textarean sisällön saan tulostettua 'normaaliksi' nl2br():n avulla, mutta se ei ratkaisuun mitenkään vaikuta)

Olen monenlaisia purkkaviritelmiä yrittänyt väsätä, mutta mikään ei ole ratkaissut ongelmaani. = /

Vielä olisi kysymys, että kun en ole hirveesti perehtynyt 'omiin'(?) funktioihin, niin voiko ratkaisusta tehä funktion joka sitten jokaiselle 4 inputille tekee sen, ettei tarvitse montaa kertaa samaa kirjoittaa

<?php
function tarkista($n){
//jtn koodia tähän
}...
?>

ja sitten sitä voisi käyttää tyyliin

tarkista($input1)
tarkista($input2)

Grez [13.04.2010 00:49:15]

#

Kai käytät jotain escape-funktiota tallentamisessa. Eli esim jos käytät ihan perus mysql_query() -funktiota niin kai käsittelet syötteet mysql_real_escape_string() -funktiolla?

Macro [13.04.2010 09:09:00]

#

tarkista(mysql_real_escape_string($input1));

pistemies [13.04.2010 09:22:06]

#

Macro kirjoitti:

tarkista(mysql_real_escape_string($input1));

??

mysql_real_escape_string($input1) riittänee ;))
Jos nimi tuntuu pitkältä, siitä voi kyhätä oman lyhennelmän.

function tarkista($str){
  return mysql_real_escape_string($str);
}

Tässä myös auttaa kun laittaa mysql_queryn loppuun mysql_error tarkistuksen.

Metabolix [13.04.2010 15:02:00]

#

Funktio kyselyn suorittamista ja virheen tulostamista varten:

<?php
function mysql_kysely($kysely) {
	$ret = mysql_query($kysely);
	// Jos onnistui, palautetaan, muuten ilmoitetaan virheestä.
	if ($ret) return $ret;
	trigger_error("<pre>Virhe!\n". htmlspecialchars(mysql_error(). "\n". $kysely). "</pre>", E_USER_ERROR);
}

Tallennus tietokantaan:

<?php
$luku = $_POST['luku'];
$teksti = $_POST['teksti'];

// Muutetaan luku aina luvuksi. (Desimaaliluvulle floatval.)
$luku2 = intval($luku);

// Muutetaan erikoismerkit turvallisiksi tallennusta varten.
$teksti2 = mysql_real_escape_string($teksti);

// Käytetään kyselyssä hipsuja tekstin ympärillä.
$kysely = "INSERT INTO taulu SET sarake = '$teksti2', toinen = $luku2";

// Suoritetaan kysely omalla, virheistä ilmoittavalla funktiolla.
mysql_kysely($kysely);

Tulostus sivulle:

<?php
$tieto = "jotain tietokannasta tai lomakkeelta tullutta...";

// Muutetaan tulostusvaiheessa HTML:n erikoismerkit kuten < ja > turvallisiksi.
echo htmlspecialchars($tieto);

Näistä ohjeista (kyselyn suorittaminen, mysql_real_escape_string, intval, floatval, hipsut, htmlspecialchars) saa poiketa vasta, kun ymmärtää itse kunnolla, mitä tekee.

Macro [13.04.2010 15:28:18]

#

Pekka Mansikka kirjoitti:

Macro kirjoitti:

tarkista(mysql_real_escape_string($input1));

??

mysql_real_escape_string($input1) riittänee ;))

No, mistä tiedät mitä tarkista-funktiossa on?

Gramexer [13.04.2010 15:58:47]

#

Noniin, nyttenhän tekstit sun muut tallentuvat mainiosti tietokantaan, tuon mysql_real_escape_string funktion avulla. =)

Käytin ensin kyllä tälläistä kyselyä:

$query = "INSERT INTO lyrics (kentta1,kentta2,kentta3,kentta4)
VALUES ('" . $tekstia2 . "','" . $tekstib2 . "','"  . $tekstic2 . "','" . $tekstid2 . "')"

Mutta se ei toiminut (varmaan jokin virhe tuolla tai sinne päin) ja vaihoin sen

$query =
"INSERT INTO lyrics
SET kentta1 = '$tekstia2',
kentta2 = '$tekstib2',
kentta3 = '$tekstic2',
kentta4 = '$tekstid2'";"

Juu tuo funktio homman selitin aika huonosti, unohdin mainita muutaman jutun ja sillein. Yöllä ei kannata kirjoittaa mitään xP Funktion ideana oisi ollut suurinpiirtein jokin tälläinen

 Syöte --> Tarkistetaan ettei ole ">,<" merkkejä tekstissä ja jos on, niin poistetaan --> mysql_real_escape_string

Jokin tuollainen ihme idea päässä, että jos sen oisi voinut funktiolla. Mutta ei siitä sen enempää, kun sitä tarvitse, yöllisiä ihmeajatuksia taas =) Kiitos avusta!

pistemies [13.04.2010 16:19:17]

#

Kiva homma, kun sait pelaan. Tuossa ekassa kokeilussa sulla näkyi olevan välilyöntejä " merkin jälkeen ja ennen VALUES- osiossa, ne query-lauseen katkaisut olivat muutenkin siinä turhia, kuten tuo alempi skripti osoittaa. ;)

Chiman [13.04.2010 16:25:34]

#

Macro kirjoitti:

No, mistä tiedät mitä tarkista-funktiossa on?

Mitä hyödyllistä siellä voi olla? Itse en keksi mitään, ellei moisen tarkoitus ole tarkistaa itse escape-funktion toimivuutta, mutta sellainen testaus kuulunee muualle.

Tietokantasyötteen escapetus on ainakin minun nähdäkseni viimeinen vaihe ennen kyselyn kokoamista ja suorittamista. Syötteiden tarkistus on syytä tehdä sitä ennen.


Sivun alkuun

Vastaus

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

Tietoa sivustosta