Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Register.php ongelma.

Sivun loppuun

Hex [12.12.2009 12:58:03]

#

Tässä on koodia, johon luultavasti pitäisi lisätä jotain omaa tuohon sql query kohtaan, mutta en tiiä mitä siihen pitää lisätä?

Koodinpätkä register.php:stä

<?php
// Fields are clear, add user to database
// Setup query
$q = "INSERT INTO `dbUsers` (`username`,`password`,`email`) "
."VALUES ('".$_POST["username"]."', "
."PASSWORD('".$_POST["password"]."'), "
."'".$_POST["email"]."')";
// Run query
$r = mysql_query($q);

// Make sure query inserted user successfully
if ( !mysql_insert_id() )
{
die("Error: User not added to database.");
}
else
{
// Redirect to thank you page.
Header("Location: register.php?op=thanks");
}
} // end if

Kun ajan register.phpn, tulee virheilmoitus:
Koodi:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'vu5026'@'localhost' (using password: NO) in /var/www/virtual/edit/edit/htdocs/register.php on line 39

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /var/www/virtual/edit/edit/htdocs/register.php on line 39

Warning: mysql_insert_id() [function.mysql-insert-id]: A link to the server could not be established in /var/www/virtual/edit/edit/htdocs/register.php on line 42

Metabolix [12.12.2009 13:02:55]

#

Sinun täytyy koodin alussa yhdistää tietokantapalvelimeen funktiolla mysql_connect oikealla tunnuksella ja salasanalla.

Toinen huomio: PASSWORD-funktiota ei kuulu käyttää itse. Käytä esimerkiksi funktiota MD5 tai SHA1.

Macro [12.12.2009 13:17:21]

#

<?php
mysql_query("INSERT INTO `kayttajat` (tunnus, salasana, sahkoposti) VALUES('" . $_POST["tunnus"] . "', '" . md5($_POST["salasana"]) . "', '" . $_POST["email"] . "')");

Koodiin kannattaa myös tehdä tarkistukset, että mikään kenttä ei ole tyhjä (!empty($kentta)). Tämä aihe varmaan kuuluu nettisivuohjelmoinnin puolelle. (mod. siirsi)

Hex [12.12.2009 13:36:29]

#

Tässä on koko register scripti, eli miten tuo mysql connect tapahtuu? ja muutin PASSWORDIN MD5seen.

<?php

// dbConfig.php is a file that contains your
// database connection information. This
// tutorial assumes a connection is made from
// this existing file.
include ("dbConfig.php");


//Input vaildation and the dbase code
if ( $_GET["op"] == "reg" )
 {
 $bInputFlag = false;
 foreach ( $_POST as $field )
  {
  if ($field == "")
   {
   $bInputFlag = false;
   }
  else
   {
   $bInputFlag = true;
   }
  }
 // If we had problems with the input, exit with error
 if ($bInputFlag == false)
  {
  die( "Problem with your registration info. "
   ."Please go back and try again.");
  }

 // Fields are clear, add user to database
 //  Setup query
 $q = "INSERT INTO `dbUsers` (`username`,`password`,`email`) "
  ."VALUES ('".$_POST["username"]."', "
  ."MD5('".$_POST["password"]."'), "
  ."'".$_POST["email"]."')";
 //  Run query
 $r = mysql_query($q);

 // Make sure query inserted user successfully
 if ( !mysql_insert_id() )
  {
  die("Error: User not added to database.");
  }
 else
  {
  // Redirect to thank you page.
  Header("Location: register.php?op=thanks");
  }
 } // end if


//The thank you page
elseif ( $_GET["op"] == "thanks" )
 {
 echo "<h2>Thanks for registering!</h2>";
 }

//The web form for input ability
else
 {
 echo "<form action=\"?op=reg\" method=\"POST\">\n";
 echo "Username: <input name=\"username\" MAXLENGTH=\"16\"><br />\n";
 echo "Password: <input type=\"password\" name=\"password\" MAXLENGTH=\"16\"><br />\n";
 echo "Email Address: <input name=\"email\" MAXLENGTH=\"25\"><br />\n";
 echo "<input type=\"submit\">\n";
 echo "</form>\n";
 }
// EOF
?>

Metabolix [12.12.2009 13:37:07]

#

Kummatkin esitetyt koodit ovat muuten loistavia esimerkkejä siitä, miten ei koskaan pidä tehdä! Voi sattua SQL-injektio, eli käyttäjä voi kirjoittaa tunnuksekseen tai sähköpostiosoitteekseen haitallista koodia. PHP:n kanssa onneksi yksi mysql_query voi sisältää vain yhden kyselyn, mutta silläkin voi onnistua tekemään kaikenlaista.

Kaikki tietokantaan laitettavat arvot pitää ajaa mysql_real_escape_string-funktion läpi haitallisten SQL-lauseiden estämiseksi, ja kaikki sivulle tulostettavat pitää ajaa htmlspecialchars-funktion läpi haitallisen HTML- ja JS-koodin estämiseksi.

Hex [12.12.2009 13:43:05]

#

Selvä, otin tuon koodin kuitenkin valmiista tutoriaalista, enkä ole muokannut siitä mitään, joten miten saisin sen toimivaksi, jottei mitään virheilmoitusta ilmestyisi?

Metabolix [12.12.2009 13:47:07]

#

Yhdistämällä tietokantaan funktiolla mysql_connect, kuten jo sanottiin.

Hex [12.12.2009 14:47:41]

#

eli lisään alkuun vain:

// Luodaan tietokantayhteys
    $connection = mysql_connect($mysql_host,$mysql_username,$mysql_password) or die(mysql_error());
    $db = mysql_select_db($mysql_db) or die(mysql_error());

Macro [12.12.2009 14:51:54]

#

Muuttujiin lisäät sittenkin tiedot oikein. $mysql_host = localhost, $mysql_username = tunnuksesi, $mysql_password = salasanasi ja $mysql_db = tietokanta. Lisäksi $db = on mysql_select_db:n alussa täysin turha.

Hex [12.12.2009 15:02:06]

#

Anteeksi tämä tietämättömyyteni, mutta koodini on nyt tämä: ja valittaa
"Parse error: syntax error, unexpected T_STRING in"

<?php

// dbConfig.php is a file that contains your
// database connection information. This
// tutorial assumes a connection is made from
// this existing file.
include('dbConfig.php');
$connection = mysql_connect($mysql_host = localhost, $mysql_username = tunnus, $mysql_password = **** ja $mysql_db = 1697_Kanta.


//Input vaildation and the dbase code
if ( $_GET["op"] == "reg" )
 {
 $bInputFlag = false;
 foreach ( $_POST as $field )
  {
  if ($field == "")

Metabolix [12.12.2009 15:04:17]

#

Oletko koskaan yhtään yrittänyt opetella koodausta? Tuo ja-sana keskellä koodia on jo melko lailla typeryyden huippu.

<?php
mysql_connect("localhost", "tunnus", "salasana", "tietokanta");

Hex [12.12.2009 15:06:31]

#

Jotenkin arvasin :DD

kysyisin vielä, että tiedättekö mitä olen tehnyt väärin kun valittaa tuota kohtaa että Error: User not added to database.

// Fields are clear, add user to database
 //  Setup query
 $q = "INSERT INTO `dbUsers` (`username`,`password`,`email`) "
  ."VALUES ('".$_POST["username"]."', "
  ."PASSWORD('".$_POST["password"]."'), "
  ."'".$_POST["email"]."')";
 //  Run query
 $r = mysql_query($q);

 // Make sure query inserted user successfully
 if ( !mysql_insert_id() )
  {
  die("Error: User not added to database.");
  }
 else

Macro [12.12.2009 15:14:06]

#

Muuta rivi $r = mysql_query($q); täksi: $r = mysql_query($q) or die(mysql_error()); ja kerro sitten mitä näytölle tulostuu.

Hex [12.12.2009 15:15:35]

#

"No database selected"

Macro [12.12.2009 15:17:54]

#

Metabolix kirjoitti:

<?php
mysql_connect("localhost", "tunnus", "salasana", "tietokanta");

Ei tietokantaa valita mysql_connect funktiossa.

Hex kirjoitti:

"No database selected"

Lisää mysql_connect funktion jälkeen rivi mysql_select_db("Tietokannan nimi");

<?php
mysql_connect("localhost", "tunnus", "salasana");
mysql_select_db("tietokanta");

Hex [12.12.2009 15:23:24]

#

Jo menee vaikean kautta, nyt valittaa:

Warning: Cannot modify header information - headers already sent by (output started at sivuni.com/htdocs/dbConfig.php:1) in sivuni.com/htdocs/register.php on line 51

// Make sure query inserted user successfully
if ( !mysql_insert_id() )
 {
 die("Error: User not added to database.");
 }
else
 {
 // Redirect to thank you page.
 Header("Location: register.php?op=thanks");
 }
} // end if

Macro [12.12.2009 15:25:10]

#

Koska sivulla on tulostettu tekstiä ennen header-funktiota. Lisää sivun dbConfig.php ensimmäiselle riville ob_start();

trilog [12.12.2009 15:25:27]

#

Tulostat ennen headereita jotakin. Vika ei tuosta koodipätkästä selviä, koska tulostus alkaa jo dbConfig.php-tiedoston rivillä 1.

Metabolix [12.12.2009 15:27:15]

#

Macro kirjoitti:

Ei tietokantaa valita mysql_connect funktiossa.

Joo, oho. Katsoin järjestyksen kysyjän muokkaamasta koodista, kun jotenkin oletin taas kerran, että aiempia ohjeita noudatettaisiin edes sen verran, että annetut funktiot olisivat entisessä (oikeassa) järjestyksessä. Ilmeisesti nyt kuitenkin ymmärrys ohjelmoinnista on niin heikolla tasolla, että parempi olisi vain palkata joku tekemään...

Hex [12.12.2009 15:29:35]

#

hmm... dbconfigini näyttää nyt tältä?

<?
ob_start();
// Replace the variable values below
// with your specific database information.
$host = "localhost";
$user = "sensored";
$pass = "sensored";
$db   = "sensored";

// This part sets up the connection to the
// database (so you don't need to reopen the connection
// again on the same page).
$ms = mysql_pconnect($host, $user, $pass);
if ( !$ms )
{
echo "Error connecting to database.\n";
}

// Then you need to make sure the database you want
// is selected.
mysql_select_db($db);
?>

Macro [12.12.2009 15:31:26]

#

Äh, ota tiedoston register.php alusta pois include rivi. Tuon verran sinun pitäisi ymmärtää tuota ohjeidemme avulla. Laita register.php:n alkuun se ob_start(). Ei sitä MySQL yhteyttä kahdesti muodosteta!

Hex [12.12.2009 15:38:20]

#

nyt valittaa "Parse error: syntax error, unexpected T_STRING" vaikka tein ohjeidesi mukaan..

tämän höskän jälkeen lähtee sellanen php kuuri, että varmasti tulee yksinkertaisemmatkin asiat selväksi :D

Macro [12.12.2009 15:39:46]

#

Taas sinulla on jossain päin tekstiä, minne se ei kuulu. Helpottaisi, kun näyttäisit koodia tuosta kohtaa.

Hex [12.12.2009 15:45:04]

#

Register.php:

<?php

ob_start()
// dbConfig.php is a file that contains your
// database connection information. This
// tutorial assumes a connection is made from
// this existing file.
mysql_connect("localhost", "sens", "sens");
mysql_select_db("sens");


//Input vaildation and the dbase code
if ( $_GET["op"] == "reg" )
 {
 $bInputFlag = false;
 foreach ( $_POST as $field )
  {
  if ($field == "")
   {
   $bInputFlag = false;
   }
  else
   {
   $bInputFlag = true;
   }
  }
 // If we had problems with the input, exit with error
 if ($bInputFlag == false)
  {
  die( "Problem with your registration info. "
   ."Please go back and try again.");
  }

 // Fields are clear, add user to database
 //  Setup query
 $q = "INSERT INTO `dbUsers` (`username`,`password`,`email`) "
  ."VALUES ('".$_POST["username"]."', "
  ."PASSWORD('".$_POST["password"]."'), "
  ."'".$_POST["email"]."')";
 //  Run query
 $r = mysql_query($q) or die(mysql_error());

 // Make sure query inserted user successfully
 if ( !mysql_insert_id() )
  {
  die("Error: User not added to database.");
  }
 else
  {
  // Redirect to thank you page.
  Header("Location: register.php?op=thanks");
  }
 } // end if


//The thank you page
elseif ( $_GET["op"] == "thanks" )
 {
 echo "<h2>Thanks for registering!</h2>";
 }

//The web form for input ability
else
 {
 echo "<form action=\"?op=reg\" method=\"POST\">\n";
 echo "Username: <input name=\"username\" MAXLENGTH=\"16\"><br />\n";
 echo "Password: <input type=\"password\" name=\"password\" MAXLENGTH=\"16\"><br />\n";
 echo "Email Address: <input name=\"email\" MAXLENGTH=\"25\"><br />\n";
 echo "<input type=\"submit\">\n";
 echo "</form>\n";
 }
// EOF
?>

dbconfig.php:

<?

// Replace the variable values below
// with your specific database information.
$host = "localhost";
$user = "sens";
$pass = "sens";
$db   = "sens";

// This part sets up the connection to the
// database (so you don't need to reopen the connection
// again on the same page).
$ms = mysql_pconnect($host, $user, $pass);
if ( !$ms )
{
echo "Error connecting to database.\n";
}

// Then you need to make sure the database you want
// is selected.
mysql_select_db($db);
?>

trilog [12.12.2009 15:45:37]

#

Helpointa olisi varmaan kertoa, mistä olet tuon pätkän ladannut, niin saisit paljon täsmällisemmät ohjeet.

Hex kirjoitti:

tämän höskän jälkeen lähtee sellanen php kuuri, että varmasti tulee yksinkertaisemmatkin asiat selväksi :D

Mikset lue esimerkiksi jo nyt putkan PHP-opasta? Tuolla menolla tuskin saat edes tuota pätkää toimintakuntoon.


Edit. Teit todellakin kirjaimellisesti ohjeiden mukaan... puolipiste päättää rivin.

Macro [12.12.2009 15:47:13]

#

ob_start():n perään kuuluu laittaa ;-merkki.

Metabolix [12.12.2009 15:51:53]

#

Ota varmuuden vuoksi tiedostojen lopusta ?>-merkinnät pois.

Hex [12.12.2009 15:58:04]

#

toimii! ongelmana oli tuo: ;

Nyt register.phpn jälkeen siirrytään seuraavaan ongelmakohtaan nimeltä: login.php..

ei jaksais jokaista käydä läpi? onko tosiaan noin huono toi systeemi että jokaisessa virheitä...

tämän tein:
http://www.trap17.com/index.php/php-simple-login-tutorial_t7887.html

tässä vielä virheellisen login.phpn koodi:

<?php
session_start();
// dBase file
include "dbConfig.php";

if ($_GET["op"] == "login")
 {
 if (!$_POST["username"] || !$_POST["password"])
  {
  die("You need to provide a username and password.");
  }

 // Create query
 $q = "SELECT * FROM `dbUsers` "
  ."WHERE `username`='".$_POST["username"]."' "
  ."AND `password`=PASSWORD('".$_POST["password"]."') "
  ."LIMIT 1";
 // Run query
 $r = mysql_query($q);

 if ( $obj = @mysql_fetch_object($r) )
  {
  // Login good, create session variables
  $_SESSION["valid_id"] = $obj->id;
  $_SESSION["valid_user"] = $_POST["username"];
  $_SESSION["valid_time"] = time();

  // Redirect to member page
  Header("Location: members.php");
  }
 else
  {
  // Login not successful
  die("Sorry, could not log you in. Wrong login information.");
  }
 }
else
 {
//If all went right the Web form appears and users can log in
 echo "<form action=\"?op=login\" method=\"POST\">";
 echo "Username: <input name=\"username\" size=\"15\"><br />";
 echo "Password: <input type=\"password\" name=\"password\" size=\"8\"><br />";
 echo "<input type=\"submit\" value=\"Login\">";
 echo "</form>";
 }
?>

valittaa:
Warning: mysql_query() [function.mysql-query]: Access denied for user 'vu5026'@'localhost' (using password: NO) in /var/www/virtual/sivuni.com/htdocs/login.php on line 19

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /var/www/virtual/sivuni.com/htdocs/login.php on line 19
Sorry, could not log you in. Wrong login information.

Macro [12.12.2009 16:10:57]

#

https://www.ohjelmointiputka.net/koodivinkit/24301-php-kirjautuminen-rekisteröityminen-mysql-llä Käytä tuota, niin kaikkien hermot säästyvät.

Hex [12.12.2009 16:14:32]

#

Noh, koitetaan.. Kyllä aikaa riittää ja kirjottelen tänne samaan aiheeseen jos tulee tuosta linkistä ongelmia :D

aha, voiko olla näin yksinkertaista että lähettämäsi linkin ohjeet toimi heti :D

EDIT: millä koodilla saisin koko sivun keskittymään?


Sivun alkuun

Vastaus

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

Tietoa sivustosta