PHP Centeri avaleht Skriptikogu Küsimuste-vastuste leht Teadete vaatamine ja saatmine Foorum - koht küsimiseks Otsingumootor Siit saad infot meie kohta

Kasutajanimi:  
  Parool: 
  Registreeri!   Unustasid salasõna?

Foorumid Programmeerimine PHP & MySQL kood vigane:)
Autor Abi Postitus Abi

ccsf

Postitusi: 295
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 1/10
pöial 1 kood vigane:)

PHP kood:

<?php 
session_start
();
$db_hostname="localhost";
$db_username="flashen_flashen"
$db_password="flashen"
$db_database="proov"

$db mysql_connect($db_hostname,$db_username,$db_password); 
    
mysql_select_db($db_database,$db);

$query="SELECT count(*) FROM proov WHERE kasutajanimi='".$_POST['kasutajanimi']."'"
$result=mysql_query($query); 
$mitu=mysql_fetch_array($result); 
if(
$mitu 1){

   echo 
'Kasutajanimi on juba kasutusel'

} elseif(
strlen($_POST['kasutajanimi']) < 4) {

   echo 
'Kasutajanimi peab olema vähemalt nelja tähemärgi pikkune';

} elseif(
strlen($_POST['parool1']) < 6) {

   echo 
'Parool peab olema vähemalt kuue tähemärgi pikkune';

} elseif(
$_POST["parool1"] != $_POST["parool2"]) {
 
   echo 
'Sisestatud paroolid ei klapi';

} elseif (!
strstr($_POST['emile'],"@") || !strstr($_POST['emile'],".")) {

   echo 
'Emile on vigane';

} else {
 
mysql_query("insert into proov values(0, '".addslashes($_POST["kasutajanimi"])."','".addslashes($_POST ["emile"])."', 

password('"
.addslashes($_POST["parool1"])."'), '".addslashes($_POST["nimi"])."', 

'"
.addslashes($_POST["perenimi"])."')") or die('wtf jälle mingi jama: '.mysql_error());
        
             
$_SESSION['kasutaja'] = $_POST['kasutajanimi']; 
        
$_SESSION['parool'] = $_POST['parool1']; 
        
header("Location: login.php"); 
        exit(); 

}
?> 



ja veateateks ütleb ta et:
Column count doesn't match value count at row 1

ja üks küsimus veel
id int auto_increment primary key not null, mille jaoks seda rida vaja läheb? või ei lähegi?

02.01.2005 22:59:37 Vajutades siia näed kasutaja ccsf profiili

bluefish
Tige Kala


Postitusi: 843
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10
RE: kood vigane:)

1. Nagu veast lugeda võib, siis sisestavate väljade arv ning andmebaasis olevate väljade arv ei ühti. Üldiselt oleks mugavam kasutada seda süntaksit sisestamiseks:
Koodijupp:
"INSERT INTO tabel SET v2li = '1', v2li2 = '2'"

2. Seda läheb vaja tabeli loomise ajal, et defineerida id välja parameetrid.

___________________________________________________
"There are no stupid questions, just stupid people"

02.01.2005 23:16:27 Vajutades siia näed kasutaja bluefish profiili

ccsf

Postitusi: 295
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 1/10
RE: kood vigane:)

ok  ma ei saanud aru mida ma tegema pean?

ja mis asjad seal ei klappinud?

02.01.2005 23:19:44 Vajutades siia näed kasutaja ccsf profiili

bluefish
Tige Kala


Postitusi: 843
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10
RE: kood vigane:)

Query-s peab VALUE(..,..,..) sees olevate väärtuste arv olema võrde andmebaasis olevate väljade arvuga. Hetkel lisad sa 6 välja aga kas ka proov tabelis on täpselt 6 välja?

___________________________________________________
"There are no stupid questions, just stupid people"

02.01.2005 23:45:22 Vajutades siia näed kasutaja bluefish profiili

eero


Postitusi: 890
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10
RE: kood vigane:)

Ülejäänud vead koodis:
1.
PHP kood:

$mitu=mysql_fetch_array($result); 
if(
$mitu 1)

Funktsioon mysql_fetch_array() väljastab massiivi, mida sa aga ei saa võrrelda numbriga
2.
PHP kood:

strlen($_POST['kasutajanimi']) < 4

Siit läheb läbi ka kasutajanimi, milleks on näiteks 10 tühikut -> trim() on puudu; sama käib paroolikontrolli kohta
3.
PHP kood:

$_SESSION['parool'] = $_POST['parool1'];

Nii ei anta paroole edasi -> ebaturvaline

Miks on üldse vaja teha kümme eraldi faili, millest üks suunab, teine registreerib, kolmandas on miskisugused väljad, neljas veel logib sisse jne? Palju lihtsam ning kompaktsem on panna kõik ühte faili...

Vastus tollele ID küsimusele: auto_increment (tõlkes 'ise suurenev') annab igale reale unikaalse ID, mille järgi tehakse ka kõiksugu päringud (palju lihtsam/mõtekam on kaasas vedada ühte numbrit, mitte nime vms)
Sisestades uut kirjet andmebaasi, auto_increment'iga väljale väärtust ei anta.

___________________________________________________
This foreign policy stuff is a little frustrating! - George W. Bush

03.01.2005 11:41:54 Vajutades siia näed kasutaja eero profiili

ccsf

Postitusi: 295
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 1/10
RE: kood vigane:)

Tsiteeritud tekst:
Ülejäänud vead koodis:
1.
PHP kood:

$mitu=mysql_fetch_array($result); 
if(
$mitu 1)

Funktsioon mysql_fetch_array() väljastab massiivi, mida sa aga ei saa võrrelda numbriga
2.
PHP kood:

strlen($_POST['kasutajanimi']) < 4

Siit läheb läbi ka kasutajanimi, milleks on näiteks 10 tühikut -> trim() on puudu; sama käib paroolikontrolli kohta
3.
PHP kood:

$_SESSION['parool'] = $_POST['parool1'];

Nii ei anta paroole edasi -> ebaturvaline

Miks on üldse vaja teha kümme eraldi faili, millest üks suunab, teine registreerib, kolmandas on miskisugused väljad, neljas veel logib sisse jne? Palju lihtsam ning kompaktsem on panna kõik ühte faili...

Vastus tollele ID küsimusele: auto_increment (tõlkes 'ise suurenev') annab igale reale unikaalse ID, mille järgi tehakse ka kõiksugu päringud (palju lihtsam/mõtekam on kaasas vedada ühte numbrit, mitte nime vms)
Sisestades uut kirjet andmebaasi, auto_increment'iga väljale väärtust ei anta.


ok kas ma panen selle funksiooni siis nii?
mysql_fetch_row($result)

trim eemaldab tühikd siis jah?

kuidas ma seda enda koodis kasutan trim($_POST['kasutajanimi'])
ja siis strlen($_POST['kasutajanimi']) < 4 )

ja sellest ma ei saanud aru mis sellel sessioonil viga?

ok nüüd mysql

oletame et mul on tehtud tabel kus on sellised väljad
kasutajanimi
emanimi
isanimi
sinunimi
õenimi

kas ma võin ned siis anbmebaasi suvelises järjekorras lisada näiteks

sinunimi,kasutajnimi,isanimi

või peab samas järjekorras nagu tabel tehtud?

03.01.2005 13:55:29 Vajutades siia näed kasutaja ccsf profiili

eero


Postitusi: 890
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10
RE: kood vigane:)

Tsiteeritud tekst:
ok kas ma panen selle funksiooni siis nii?
mysql_fetch_row($result)
Ei...
Tsiteeritud tekst:
trim eemaldab tühikd siis jah?

kuidas ma seda enda koodis kasutan trim($_POST['kasutajanimi'])
ja siis strlen($_POST['kasutajanimi']) < 4 )
PHP kood:

strlen(trim($_POST['kasutajanimi'])) < 4

Tsiteeritud tekst:
ja sellest ma ei saanud aru mis sellel sessioonil viga?
Paroole ei anta niimoodi edasi, eriti veel krüpteerimata. Nagu ma juba ütlesin, sisselogimise teostuse saad selles samas failis ära teha, pole vaja kümmet erinevat; siis ei peaga ka sessiooniga neid edasi andma...
Tsiteeritud tekst:
ok nüüd mysql

oletame et mul on tehtud tabel kus on sellised väljad
kasutajanimi
emanimi
isanimi
sinunimi
õenimi

kas ma võin ned siis anbmebaasi suvelises järjekorras lisada näiteks

sinunimi,kasutajnimi,isanimi

või peab samas järjekorras nagu tabel tehtud?
Kui kasutad toda varianti, mida kasutasid, siis jah, võib sisestada ükskõik mis järjekorras. Kui Bluefish juba näitas, kuidas on lihtsam sisestada...

Seda postitust on muudetud 1 kord (2005-01-04 13:01:42 eero poolt)

___________________________________________________
This foreign policy stuff is a little frustrating! - George W. Bush

03.01.2005 15:34:16 Vajutades siia näed kasutaja eero profiili

bluefish
Tige Kala


Postitusi: 843
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10
RE: kood vigane:)

Tsiteeritud tekst:
Kui kasutad toda varianti, mida kasutasid, siis jah, võib sisestada ükskõik mis järjekorras. Kui Bluefish juba näitas, kuidas on lihtsam sisestada...

Ei või nii sisestada ju. Ikka samas järjekorras peab nagu tabeliski väljad on loodud.

___________________________________________________
"There are no stupid questions, just stupid people"

03.01.2005 16:41:47 Vajutades siia näed kasutaja bluefish profiili

muidumeez
Ignorantia non est
argumentum


Postitusi: 3864
Tase: Administraator
Olek: Offline

Hinnang: Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10
RE: kood vigane:)

Tsiteeritud tekst:

Ei või nii sisestada ju. Ikka samas järjekorras peab nagu tabeliski väljad on loodud.

Ee .. kui kasutada INSERT INTO TABEL SET-i, siis pole tegelikult väljade järjekord oluline.

___________________________________________________
An Opinion Is Like An Asshole -- Everybody Has One

03.01.2005 16:44:38 Vajutades siia näed kasutaja muidumeez profiili

bluefish
Tige Kala


Postitusi: 843
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10
RE: kood vigane:)

Tsiteeritud tekst:
Ee .. kui kasutada INSERT INTO TABEL SET-i, siis pole tegelikult väljade järjekord oluline.

Aga antud juhul kasutati koodis INSERT INTO tabel VALUES(..,..,..) süntaksit ja küsimus käis ka vist selle kohta.

___________________________________________________
"There are no stupid questions, just stupid people"

03.01.2005 16:49:43 Vajutades siia näed kasutaja bluefish profiili

ccsf

Postitusi: 295
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 1/10
RE: kood vigane:)

ok tänan,aga mul üks küsimus veel kuidas salvestada pilti andmebaasi?

04.01.2005 10:57:30 Vajutades siia näed kasutaja ccsf profiili

siku
tavaline rott


Postitusi: 612
Tase: 7
Olek: Offline

Hinnang: Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10Administratiivhinnang: 8/10
RE: kood vigane:)

Tsiteeritud tekst:
ok tänan,aga mul üks küsimus veel kuidas salvestada pilti andmebaasi?


loed pildifaili sisu muutujasse ja seejärel salvestadki selle LONGBLOB tüüpi väljale...
hiljem väljastad selle taas echo () ja header("Content-type: Image/jpeg") abil...

aga miks sa üldse pilti andmebaasi tahad salvestada??

___________________________________________________
aga see oli kõigest minu arvamus...

04.01.2005 11:23:29 Vajutades siia näed kasutaja siku profiili

eero


Postitusi: 890
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10
RE: kood vigane:)

Tsiteeritud tekst:
Aga antud juhul kasutati koodis INSERT INTO tabel VALUES(..,..,..) süntaksit ja küsimus käis ka vist selle kohta.
Rääkisin sellest variandist, mille kohta tema küsis, ehk kus peale tabelinime ka väljanimed on ära määratud: INSERT INTO tabel (..,..,..) VALUES(..,..,..)
Sellisel juhul ei ole järjekord oluline...
Tsiteeritud tekst:
ok tänan,aga mul üks küsimus veel kuidas salvestada pilti andmebaasi?
Juhin tähelepanu sellele, et pilte kaustas hoidmine on tunduvalt kiirem kui nende sisu MySQL'is hoidmine...

___________________________________________________
This foreign policy stuff is a little frustrating! - George W. Bush

04.01.2005 11:51:57 Vajutades siia näed kasutaja eero profiili

ccsf

Postitusi: 295
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 1/10
RE: kood vigane:)

ok  ma ei saanud ikka mysqliga hakkama

PHP kood:

$sqlcmd="create table proov(
id int auto_increment primary key not null,
kasutajanimi varchar(250) not null,
parool1 char(250) not null,
kuupaev datetime not null,
nimi varchar(250),
perenimi varchar(250),
emile varchar(250) not null
)"
;



ok see on siis se kus ma tabeli teen!

ja see kus ma proovin asju sisestada tabelise:
PHP kood:

mysql_query("insert into proov values(0, 

'"
.addslashes($_POST["kasutajanimi"])."', 

password('"
.addslashes($_POST["parool1"])."'), now(), 

'"
.addslashes($_POST["nimi"])."', '".addslashes($_POST["perenimi"])."', 

'"
.addslashes($_POST["emile"])."')") or die('Jama: '.mysql_error());



ja error:
Column count doesn't match value count at row 1

ja se kood annab koguiaeg et kasutaja nimi olemas

PHP kood:

$query="SELECT count(*) FROM proov WHERE kasutajanimi='".$_POST['kasutajanimi']."'"
$result=mysql_query($query); 
$mitu=mysql_fetch_row($result); 
if(
$mitu ){

   echo 
'Kasutajanimi on juba kasutusel'



ja selline küsimus veel et kuidas anda edasi neid vormi poste samal lehel?
kas nii võib?
Koodijupp:
<form method="POST" action="">


04.01.2005 12:07:51 Vajutades siia näed kasutaja ccsf profiili

eero


Postitusi: 890
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10
RE: kood vigane:)

1. Kui tahad pikka koodirida lõigata, et seda mitmele reale panna, seo pigem erinevad osad punktidega... Ning nagu juba mitu korda öeldud on, kasuta INSERT ... SET sisestamise varianti:
PHP kood:

$sql 'INSERT INTO proov SET '.
         
'kasutajanimi = "'.addslashes($_POST['kasutajanimi']).'", '.
         
'parool1 = "'.md5(addslashes($_POST['parool1'])).'", '.
         
'kuupaev = NOW(), '.
         
'nimi = "'.addslashes($_POST['nimi']).'", '.
         
'perenimi = "'.addslashes($_POST['perenimi']).'", '.
         
'emile = "'.addslashes($_POST['emile']).'"';

Või veelgi parem: kirjuta omale funktsioon andmebaasi sisestamiseks, millele saad andmed massiivina anda saad...

2. Mitu korda oled seda sama koodijuppi juba siin postitanud, iga kord on see ka ära parandatud ning nüüd on jälle valesti... mysql_fetch_row() saab andmebaasist realt andmed, mysql_num_rows() annab aga vastete arvu.

3.
PHP kood:

echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">';



___________________________________________________
This foreign policy stuff is a little frustrating! - George W. Bush

04.01.2005 13:01:14 Vajutades siia näed kasutaja eero profiili
Kokku: 25949 registreerunud kasutajat, 9711 teemat, 54603 postitust.
Täna on esmaspäev, 14. oktoober 2019. Kell on 23:32.

    Vaata selle lehe printerisõbralikku versiooni

Avaleht   -    Skriptikogu   -    Teated   -    Foorum   -    Reklaam   -    Tagasiside   -    Kasutamise reeglid

© Copyright 2002-2019 PHP Center. Kõik õigused reserveeritud.