Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Erikoinen ongelma

Sir McDuck [22.02.2004 20:03:58]

#

Pahoittelen ensinnäkin huonosti kuvaavaa otsikkoa. Parempaa en valitettavasti keksinyt.

Minulla on PHP:n kanssa mielestäni erikoinen ongelma, ja kyseessä on kiireinen asia. Liitän alkuun melko pitkän litanian koodia ja selostan lopussa pitkästi mikä on ongelmana ja mitä olen havainnut, joten tämä vaatinee teiltä pitkäjänteisyyttä. Kiitos hukkaamastanne ajasta :)

Aloitan koodeilla (ei kokonaisia tiedostoja, vain pätkiä).

tiedot.php

// Haetaan asetuksia
	$tiedosto = file("asetukset.txt");
	$tiedot = explode("|", $tiedosto[0], 4);
	$palvelin = $tiedot[0];
	$tunnus = $tiedot[1];
	$salasana = $tiedot[2];
	$tietokanta1 = $tiedot[3];

ylaosa.php

include("tiedot.php");

...

// Palauttaa arvon TRUE, jos käyttäjä on kirjautunut sisään
$session_id = $_COOKIE['session_id'];
function kirjautunut() {
	global $session_id;
	global $palvelin;
	global $tunnus;
	global $salasana;
	global $tietokanta;
    if(!empty($session_id)) {
		$yhteys = mysql_connect("$palvelin", "$tunnus", "$salasana");
		$tietokanta = mysql_select_db("$tietokanta", $yhteys);
		$kysely = "SELECT COUNT(*) AS tulokset FROM blog_admin WHERE session_id='$session_id'";
        $tulos = mysql_query($kysely, $yhteys);
        $mfetch = mysql_fetch_array($tulos);

        if($mfetch['tulokset'] == 1) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

asetukset.php

<?php

include("ylaosa.php");

if(kirjautunut()) {
if($kayttaja['taso'] == 2) {

?>

HTML:ää.

<?php

} else { include("eioikeutta.php"); } }
else { include("eikirjautunut.php"); }
include("alaosa.php");

?>

sivu.php

<?php

include("ylaosa.php");

...

if(kirjautunut() && $kayttaja['taso'] > 1) { print("<br><br><a href=\"muokkaae.php?id=" . $rivi['id'] . "\">[muokkaa]</a> <a href=\"poistae.php?id=" . $rivi['id'] . "\">[poista]</a>"); }

Ongelma: Minulla on eräs sivusto, jossa on sisäänkirjautuminen (otettu jphp.netin esimerkistä). Sisäänkirjautuminen hakee tiedot MySQL-tietokannasta, jonka tunnus, salasana, nimi, yms. on sijoitettu tekstitiedostoon asetukset.txt, ja jotka haetaan $palvelin-, $tunnus-, jne muuttujiin tiedot.php-tiedostossa. tiedot.php on vielä sisällytetty include-funktiolla ylaosa.php-tiedostoon.
Näin ollen jokaiseen tiedostoon haetaan yläosa ja samalla tiedot.txt-muuttujineen.

Olen yhdistänyt tietokantaan näiden muuttujien avulla.

$yhteys = mysql_connect("$palvelin", "$tunnus", "$salasana");
$tietokanta = mysql_select_db("$tietokanta");

Tällainen yhdistäminen kirjautunut()-funktion (joka on ylaosa.php:ssä) kanssa toimii esimerkiksi blog.php-tiedoston kohdassa, jonka liitin. Mutta juuri muualla ei, katso esimerkiksi asetukset.php, joka antaa virheilmoitukseksi "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\program files\[...]\ylaosa.php on line 48".

Miksi tämä toimii jossain, mutta jossain ei, vaikka kirjautunut()-funktiota käytettäisiin samalla tavalla? Liittämässäni blog.php-kohdassa se toimii, mutta samaisessa tiedostossa yritin käyttää sitä toisessa kohtaa, mutta se epäonnistui.

HUOM:
Jos muutan kirjautunut()-funktion mysql_connect()-funktioon $palvelin-, $tunnus-, jne muuttujien tilalle oikeat arvot ("localhost"...), skripti toimii kaikkialla.

EDIT:
Hieman selvennettynä. Eli kirjautunut()-funktion käyttö onnistuu muutamissa kohdissa, mutta pääosin ei. Jos kirjautunut()-funktiossa yhdistetään tietokantaan "mysql_connect("localhost", "tunnukseni", "salasanani")"-tyylillä pätkän "mysql_connect("$palvelin", "$tunnus", "$salasana")" sijasta, funktio toimiikin kaikkialla.

Pahoittelen sekavaa selostustani. Yritän parannella sitä kaiken aikaa...

folio [23.02.2004 13:07:33]

#

Laitappa noiden mysql-funktoiden eteen @-merkki ja perään seuraava koodi, niin näet mistä tuo skriptisi itseasiassa edes valittaa:

or die('db error: '.mysql_error().' (nro: '.mysql_errno().')');

Mutta veikkaan kuitenkin että olet koodissasi korvannut jonkun seuraavista muuttujista uudella arvolla.

$palvelin = $tiedot[0];
$tunnus = $tiedot[1];
$salasana = $tiedot[2];
$tietokanta1 = $tiedot[3]; // typo? myöhemmin koodissa:  mysql_select_db("$tietokanta"...

Eli kokeile vaikka echottaa nuo $palvelin, $tunnus ym. -muuttujat tuossa funktiossa ennen mysql_connectia ja katso mitä ne sisältävät.

Sir McDuck [23.02.2004 16:54:59]

#

lainaus:

Laitappa noiden mysql-funktoiden eteen @-merkki ja perään seuraava koodi, niin näet mistä tuo skriptisi itseasiassa edes valittaa:

Mutta veikkaan kuitenkin että olet koodissasi korvannut jonkun seuraavista muuttujista uudella arvolla.

$palvelin = $tiedot[0];
$tunnus = $tiedot[1];
$salasana = $tiedot[2];
$tietokanta1 = $tiedot[3]; // typo? myöhemmin koodissa:  mysql_select_db("$tietokanta"...

Eli kokeile vaikka echottaa nuo $palvelin, $tunnus ym. -muuttujat tuossa funktiossa ennen mysql_connectia ja katso mitä ne sisältävät.

Voi herranjestas minua ja tyhmyyttäni. Kokeilin tosiaan aluksi lisäämällä @-merkin funktioiden eteen, ja vastaukseksi tuli etten ole valinnut tietokantaa. Tässä vaiheessa oletin että tuo kirjoitusvirhe ($tietokanta1 -> $tietokanta) oli vain tuossa viestissäni, mutta sama virhe löytyi itse koodista.

Tuhannet kiitokset avusta :) Ei ollut ensimmäinen kerta kun revin tuntikausia hiuksiani puuttuvan aaltosulun tai muun kirjoitusvirheen takia...

Vastaus

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

Tietoa sivustosta