Síða 1 af 2
PHP hjálp
Sent: Fös 28. Jan 2011 19:43
af B.Ingimarsson
vantar smá hjálp hérna, er aðeins að leika mér að búa til register síðu, kóðinn:
Kóði: Velja allt
<body bgcolor="#252525">
<font color="white" face="arial" >
<b>
<h2>Nýskráning</h2>
<h2>______________________________</h2>
</b>
</font>
</body>
<?php
$name=$_POST[name];
$username=$_POST[username];
$email=$_POST[email];
$email2=$_POST[email2];
$password=$_POST[password];
$password2=$_POST[password2];
$terms=$_POST[accept];
//see if password is correct
if ($password==$password2)
{
}
else
{
header("location:villa/incorrectpassword.html");
}
//see if email is correct
if ($email==$email2)
{
}
else
{
header("location:villa/incorrectemail.html");
}
//see if username is alphanumberic
if (!eregi(("[^A-Za-z0-9.^]"),$username))
{
}
else
{
header("location:villa/incorrectusername.html");
}
//see if name is alpharic
if (!eregi(("[^A-Z a-z^]"),$name))
{
}
else
{
header("location:villa/incorrectname.html");
}
if (isset($terms))
{
}
else
{
header("location:villa/terms.html");
}
if ($name=="")
{header("location:villa/empty.html");}
elseif ($username=="")
{header("location:villa/empty.html");}
elseif ($email=="")
{header("location:villa/empty.html");}
elseif ($password=="")
{header("location:villa/empty.html");}
include('connect.php');
$query="SELECT * FROM users WHERE username ='$username'";
$result=mysql_query($query);
$num=mysql_num_rows($result);
if ($num==0)
{}
else
{header("location:villa/empty.html");}
?>
<?php
?>
<body bgcolor="#252525">
<font color="white" face="arial" >
<b>
<?php
echo "fullt nafn: ".$name."<br/>" ;
echo "notendanafn: ".$username."<br/>" ;
echo "netfang: ".$email."<br/>" ;
echo "lykilorð: ";
?>
<input type="button" value="sýna lykilorð" onclick="alert('<?php echo ($password); ?>')">
</b>
</font>
</body>
allavega vandamálið byrjar í línu 80 eða þar nálægt, það sem þetta á að gera er að gá hversu mörg notendanöfn eru í mySQL sömu og það sem var sett inn,
ef það eru 0 jöfn og $username á ekkert að gerast annars á það að fara á síðu sem segir að notendanafn sé í notkun, vandamálið er í línu 84 sem er:
Kóði: Velja allt
header("location:villa/empty.html")
hvað er ég að gera vitlaust ?, allar ábendingar vel þegnar
EDIT: fattaði núna að ég var með html kóða efst en það má víst ekkert vera fyrir ofan php tögin
hvernig get ég fengið þetta:
Kóði: Velja allt
<body bgcolor="#252525">
<font color="white" face="arial" >
<b>
<h2>Nýskráning</h2>
<h2>______________________________</h2>
</b>
</font>
</body>
til að vera efst
Re: PHP hjálp
Sent: Fös 28. Jan 2011 20:16
af dori
Ég held að það sé nokkurnvegin svona:
https://gist.github.com/800857 (hef ekki keyrt þetta)
Það sem er að er að þú verður að stilla allt sem þú sendir í HTTP hausnum áður en þú byrjar að prenta út => setja header() köll efst.
Re: PHP hjálp
Sent: Fös 28. Jan 2011 20:23
af B.Ingimarsson
dori skrifaði:Ég held að það sé nokkurnvegin svona:
https://gist.github.com/800857 (hef ekki keyrt þetta)
Það sem er að er að þú verður að stilla allt sem þú sendir í HTTP hausnum áður en þú byrjar að prenta út => setja header() köll efst.
þetta virkar takk, reyndar dáltið einfalt þegar ég sé villuna
Re: PHP hjálp
Sent: Fös 28. Jan 2011 20:29
af appel
Kóði: Velja allt
$username=$_POST[username];
...
$query="SELECT * FROM users WHERE username ='$username'";
Dæmigerð öryggishola væni, sql-injection.
http://en.wikipedia.org/wiki/SQL_injectionNotaðu:
http://php.net/manual/en/function.mysql ... string.php
Re: PHP hjálp
Sent: Fös 28. Jan 2011 21:30
af dori
Bobby tables myndi fara illa með kerfið þitt... Haha, ég las ekkert yfir þetta nema til að finna hvar header() endaði. Ég myndi líka nota library fyrir formið. Sé í fljótu bragði þetta
hérna.. Það er kannski bara ég.
Svo er þetta form á kóðanum mjög skrýtið:
Kóði: Velja allt
ef ekki skilyrði:
no-op
annars:
redirect-á-villusíðu
Það er líka rosalega móðins að senda notandanum aftur formið og leyfa honum að leiðrétta sig ef eitthvað var vitlaust hjá honum. Eitthvað í þessa áttina:
Kóði: Velja allt
form = SvakaFormLibrary($_POST)
if form.is_valid():
búa-til-notanda
redirect-á-forsíðu/dashboard/shit
render(form)
Þetta er auðvitað ekki kóði sem virkar en ætti að gefa einhverja hugmynd um hvað þú getur gert.
Re: PHP hjálp
Sent: Lau 29. Jan 2011 09:37
af B.Ingimarsson
Kóði: Velja allt
<?php
// Connect
$link = mysql_connect('localhost', 'top secret', 'top secret')
OR die(mysql_error());
// Query
$query = sprintf("SELECT * FROM users WHERE username ='$username'"),
mysql_real_escape_string($user),
mysql_real_escape_string($password));
?>
hvað á að vera í "mysql_real_escape_string()" ?
Re: PHP hjálp
Sent: Lau 29. Jan 2011 10:30
af SteiniP
B.Ingimarsson skrifaði:hvað á að vera í "mysql_real_escape_string()" ?
Þetta er einhvernveginn svona held ég.
Kóði: Velja allt
$query=sprintf("SELECT * FROM users WHERE username ='%s", mysql_real_escape_string($username));
semsagt setur ekki breytuna inn í queryið sjálft, heldur '%s' sem er placeholder fyrir streng. Svo inn í real escape string kemur strengurinn sem þú vilt að komi í staðinn fyrir '%s' þegar kóðinn er keyrður.
Re: PHP hjálp
Sent: Lau 29. Jan 2011 10:52
af B.Ingimarsson
SteiniP skrifaði:B.Ingimarsson skrifaði:hvað á að vera í "mysql_real_escape_string()" ?
Þetta er einhvernveginn svona held ég.
Kóði: Velja allt
$query=sprintf("SELECT * FROM users WHERE username ='%s", mysql_real_escape_string($username));
semsagt setur ekki breytuna inn í queryið sjálft, heldur '%s' sem er placeholder fyrir streng. Svo inn í real escape string kemur strengurinn sem þú vilt að komi í staðinn fyrir '%s' þegar kóðinn er keyrður.
ok, er þetta semsegt öruggara svona.
núna ætlaði ég að láta scriptina setja breyturnar $name, $username, $email, $password í mysql table þetta er kóðinn sem ég notaði:
Kóði: Velja allt
mysql_query("INSERT INTO users (full name, username, email, password) VALUES ($name,$username, $email, $password)");
hvað er ég að gera vitlaust
Re: PHP hjálp
Sent: Lau 29. Jan 2011 11:06
af SteiniP
B.Ingimarsson skrifaði:ok, er þetta semsegt öruggara svona.
Já, annars getur fólk sett inn sql query í username kassann og t.d. fengið út allar upplýsingar um alla notendur á síðunni.
B.Ingimarsson skrifaði:núna ætlaði ég að láta scriptina setja breyturnar $name, $username, $email, $password í mysql table þetta er kóðinn sem ég notaði:
Kóði: Velja allt
mysql_query("INSERT INTO users (full name, username, email, password) VALUES ($name,$username, $email, $password)");
hvað er ég að gera vitlaust
Eru þetta örugglega rétt nöfn á dálkunum í töflunni? Man ekki hvort það var hægt að nota bil í mysql dálkanöfnum ("full name")
Annars ættirðu að nota sql escape string í þessu á sama hátt og í select queryinu.
Kóði: Velja allt
sprintf("INSERT INTO users (fullname, username, email, password) VALUES ('%s', '%s', '%s', '%s')",
mysql_real_escape_string($name),
mysql_real_escape_string($username),
mysql_real_escape_string($email),
mysql_real_escape_string($password));
Re: PHP hjálp
Sent: Lau 29. Jan 2011 16:44
af B.Ingimarsson
hmmm
þetta virkar með sql query, svona:
Kóði: Velja allt
mysql_query("INSERT INTO `b.ingimarsson`.`temp` (`code`, `username`, `email`, `password`) VALUES ('$confirm_code', '$username', '$email', '$password')")
en ekki svona:
Kóði: Velja allt
sprintf("INSERT INTO `b.ingimarsson`.`users` (`code`, `username`, `email`, `password`) VALUES ('%s', '%s', '%s', '%s')",
mysql_real_escape_string($name),
mysql_real_escape_string($username),
mysql_real_escape_string($email),
mysql_real_escape_string($password));
? ? ? ? ? ?
Re: PHP hjálp
Sent: Lau 29. Jan 2011 17:11
af dori
sprintf() er bara til að formatta streng (
string print formatted er væntanlega það sem þetta stendur fyrir).
Gerðu bara þetta:
Re: PHP hjálp
Sent: Lau 29. Jan 2011 17:30
af B.Ingimarsson
dori skrifaði:sprintf() er bara til að formatta streng (
string print formatted er væntanlega það sem þetta stendur fyrir).
Gerðu bara þetta:
þetta er ekki að virka, hef þetta bara hinseginn laga það seinna þegar ég kann betur á þetta
takk samt fyrir alla hjálpina
Re: PHP hjálp
Sent: Lau 29. Jan 2011 18:27
af dori
B.Ingimarsson skrifaði:dori skrifaði:sprintf() er bara til að formatta streng (
string print formatted er væntanlega það sem þetta stendur fyrir).
Gerðu bara þetta:
þetta er ekki að virka, hef þetta bara hinseginn laga það seinna þegar ég kann betur á þetta
takk samt fyrir alla hjálpina
Neineinei... Þá ertu að bjóða uppá injection attack. Hvaða villa kemur? Það væri rosalega flott að fá það svo að við getum hjálpað þér. Prufaðu svo að henda þessu inn í kóðann:
Hvaða streng prentar þetta?
Re: PHP hjálp
Sent: Lau 29. Jan 2011 18:49
af intenz
Kóði: Velja allt
$name = mysql_real_escape_string( $name );
$username = mysql_real_escape_string( $username );
$email = mysql_real_escape_string( $email );
$password = mysql_real_escape_string( $password );
mysql_query( "INSERT INTO users (name, username, email, password) VALUES ('$name','$username', '$email', '$password')" );
Re: PHP hjálp
Sent: Lau 29. Jan 2011 18:51
af B.Ingimarsson
villurnar:
Kóði: Velja allt
Warning: sprintf() [function.sprintf]: Too few arguments in C:\xampp\htdocs\B.Ingimarsson\2.php on line 98
Warning: mysql_query() expects at most 2 parameters, 5 given in C:\xampp\htdocs\B.Ingimarsson\2.php on line 102
kóðinn í heild:
Kóði: Velja allt
<?php
$name=$_POST[name];
$username=$_POST[username];
$email=$_POST[email];
$email2=$_POST[email2];
$password=$_POST[password];
$password2=$_POST[password2];
$terms=$_POST[accept];
$confirm_code=md5(uniqid(rand()));
//see if password is correct
if ($password==$password2)
{
}
else
{
header("location:villa/incorrectpassword.html");
break;
}
//see if email is correct
if ($email==$email2)
{
}
else
{
header("location:villa/incorrectemail.html");
break;
}
//see if username is alphanumberic
if (!eregi(("[^A-Za-z0-9.^]"),$username))
{
}
else
{
header("location:villa/incorrectusername.html");
break;
}
//see if name is alpharic
if (!eregi(("[^A-Z a-z^]"),$name))
{
}
else
{
header("location:villa/incorrectname.html");
break;
}
if (isset($terms))
{
}
else
{
header("location:villa/terms.html");
break;
}
if ($name=="")
{header("location:villa/empty.html"); break;}
elseif ($username=="")
{header("location:villa/empty.html"); break;}
elseif ($email=="")
{header("location:villa/empty.html"); break;}
elseif ($password=="")
{header("location:villa/empty.html"); break;}
include('connect.php');
$query=sprintf("SELECT * FROM users WHERE username ='%s'",
mysql_real_escape_string($username));
$result=mysql_query($query);
$num=mysql_num_rows($result);
if ($num==0)
{}
else
{header('location:villa/nameinuse.html');}
$query=sprintf("SELECT * FROM users WHERE username ='%s'",
mysql_real_escape_string($email));
$result=mysql_query($query);
$num=mysql_num_rows($result);
if ($num==0)
{}
else
{header('location:villa/emailinuse.html');}
mysql_query(sprintf("INSERT INTO `b.ingimarsson`.`temp` (`code`, `username`, `email`, `password`) VALUES ('%s', '%s', '%s', '%s')"),
mysql_real_escape_string($name),
mysql_real_escape_string($username),
mysql_real_escape_string($email),
mysql_real_escape_string($password));
?>
<body bgcolor="#252525">
<font color="white" face="arial" >
<b>
<h2>Nýskráning</h2>
<h2>______________________________</h2>
</b>
</font>
</body>
<body bgcolor="#252525">
<font color="white" face="arial" >
<b>
<?php
?>
<body bgcolor="#252525">
<font color="white" face="arial" >
<b>
<?php
echo "fullt nafn: ".$name."<br/>" ;
echo "notendanafn: ".$username."<br/>" ;
echo "netfang: ".$email."<br/>" ;
echo "lykilorð: ";
?>
<input type="button" value="sýna lykilorð" onclick="alert('<?php echo ($password); ?>')">
<br/>
<br/>
<?php
echo $confirm_code;
?>
<br/>
<br/>
<input type="button" value="halda áfram" onclick="">
</b>
</font>
</body>
sprintf kóðinn:
Kóði: Velja allt
mysql_query(sprintf("INSERT INTO `b.ingimarsson`.`temp` (`code`, `username`, `email`, `password`) VALUES ('%s', '%s', '%s', '%s')"),
mysql_real_escape_string($name),
mysql_real_escape_string($username),
mysql_real_escape_string($email),
mysql_real_escape_string($password));
echo sprintf kóðinn:
Kóði: Velja allt
echo sprintf("INSERT INTO `b.ingimarsson`.`temp` (`code`, `username`, `email`, `password`) VALUES ('%s', '%s', '%s', '%s')"),
mysql_real_escape_string($name),
mysql_real_escape_string($username),
mysql_real_escape_string($email),
mysql_real_escape_string($password);
þegar ég notaði echo þá prentaði það út:
Kóði: Velja allt
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
sem er $name, $username, $email, $password til samans ($name = bbbbbbb, $username = bbbbbbb, $email = bbbbbbb, $password = bbbbbbbbbbbbbb)
og gaf ennþá villuna:
Kóði: Velja allt
Warning: sprintf() [function.sprintf]: Too few arguments in C:\xampp\htdocs\B.Ingimarsson\2.php on line 98
Re: PHP hjálp
Sent: Lau 29. Jan 2011 19:22
af intenz
Af hverju að nota sprintf() ?
Re: PHP hjálp
Sent: Lau 29. Jan 2011 19:25
af B.Ingimarsson
intenz skrifaði:Af hverju að nota sprintf() ?
það er víst öruggara, lestu þráðinn
Re: PHP hjálp
Sent: Lau 29. Jan 2011 19:42
af SteiniP
B.Ingimarsson skrifaði:intenz skrifaði:Af hverju að nota sprintf() ?
það er víst öruggara, lestu þráðinn
Skiptir ekki máli. þetta sem intenz póstaði gerir held ég sama gagn.
Aðalatriðið er að setja mysql_real_escape_string() utan um breyturnar áður en query er keyrt á gagnagrunninum.
Annars sýnist mér þessi villa bara vera smá svigaruglingur. Þú ert að loka sprintf kallinu áður en þú setur strengina inn í það.
Kóði: Velja allt
mysql_query(sprintf("INSERT INTO `b.ingimarsson`.`temp` (`code`, `username`, `email`, `password`) VALUES ('%s', '%s', '%s', '%s')",
mysql_real_escape_string($name),
mysql_real_escape_string($username),
mysql_real_escape_string($email),
mysql_real_escape_string($password)));
Ætti að virka svona.
Re: PHP hjálp
Sent: Lau 29. Jan 2011 19:59
af dori
intenz skrifaði:Af hverju að nota sprintf() ?
Ég fíla að nota string formatting... Kannski er það dýrara en hitt, ég hef ekki notað PHP svo lengi að ég man ekki lengur allt um hvernig þetta virkar. Var ekki líka einhver díll með ' eða "? Þannig að ef þú notar einfaldar gæsalappir er ekki leitað eftir $breytum og þannig er það hraðvirkara (ef það á ekki að leita eftir breytum).
Ég allavega fíla string formatting, þetta er rosalega basic virkni en þegar þú ert kominn með fjölda aukastafa á tölum, dagsetningar o.fl. þess háttar þá er þetta alveg magnað og mjög ávanabindandi.
Re: PHP hjálp
Sent: Lau 29. Jan 2011 20:17
af B.Ingimarsson
ókey svona er kóðinn núna:
Kóði: Velja allt
<?php
$name=$_POST[name];
$username=$_POST[username];
$email=$_POST[email];
$email2=$_POST[email2];
$password=$_POST[password];
$password2=$_POST[password2];
$terms=$_POST[accept];
$confirm_code=md5(uniqid(rand()));
//see if password is correct
if ($password==$password2)
{
}
else
{
header("location:villa/incorrectpassword.html");
break;
}
//see if email is correct
if ($email==$email2)
{
}
else
{
header("location:villa/incorrectemail.html");
break;
}
//see if username is alphanumberic
if (!eregi(("[^A-Za-z0-9.^]"),$username))
{
}
else
{
header("location:villa/incorrectusername.html");
break;
}
//see if name is alpharic
if (!eregi(("[^A-Z a-z^]"),$name))
{
}
else
{
header("location:villa/incorrectname.html");
break;
}
if (isset($terms))
{
}
else
{
header("location:villa/terms.html");
break;
}
if ($name=="")
{header("location:villa/empty.html"); break;}
elseif ($username=="")
{header("location:villa/empty.html"); break;}
elseif ($email=="")
{header("location:villa/empty.html"); break;}
elseif ($password=="")
{header("location:villa/empty.html"); break;}
include('connect.php');
$query=sprintf("SELECT * FROM users WHERE username ='%s'",
mysql_real_escape_string($username));
$result=mysql_query($query);
$num=mysql_num_rows($result);
if ($num==0)
{}
else
{header('location:villa/nameinuse.html');}
$query=sprintf("SELECT * FROM users WHERE username ='%s'",
mysql_real_escape_string($email));
$result=mysql_query($query);
$num=mysql_num_rows($result);
if ($num==0)
{}
else
{header('location:villa/emailinuse.html');}
mysql_query(sprintf("INSERT INTO `b.ingimarsson`.`temp` (`code`, `username`, `email`, `password`) VALUES ('%s', '%s', '%s', '%s')",
mysql_real_escape_string($name),
mysql_real_escape_string($username),
mysql_real_escape_string($email),
mysql_real_escape_string($password)));
?>
<body bgcolor="#252525">
<font color="white" face="arial" >
<b>
<h2>Nýskráning</h2>
<h2>______________________________</h2>
</b>
</font>
</body>
<body bgcolor="#252525">
<font color="white" face="arial" >
<b>
<?php
?>
<body bgcolor="#252525">
<font color="white" face="arial" >
<b>
<?php
echo "fullt nafn: ".$name."<br/>" ;
echo "notendanafn: ".$username."<br/>" ;
echo "netfang: ".$email."<br/>" ;
echo "lykilorð: ";
?>
<input type="button" value="sýna lykilorð" onclick="alert('<?php echo ($password); ?>')">
<br/>
<br/>
<?php
echo $confirm_code;
?>
<br/>
<br/>
<input type="button" value="halda áfram" onclick="">
</b>
</font>
</body>
er þetta ekki bara fínt
, hef samt aldrei áður séð þetta sprintf, notaði altaf bara mysql_quote
Re: PHP hjálp
Sent: Lau 29. Jan 2011 21:32
af dori
B.Ingimarsson skrifaði:ókey svona er kóðinn núna:
er þetta ekki bara fínt
, hef samt aldrei áður séð þetta sprintf, notaði altaf bara mysql_quote
Ég myndi nú ekki segja að þetta sé "fínt" (skoðaðu fyrri athugasemdir við stílinn á if setningum og notkun á http redirect til að birta villur. Ég var búinn að gera einhverja tilraun til að lagfæra þetta en gafst upp í bili þegar ég sá að þetta er bara síðan sem höndlar formið (s.s. bara fyrir post höndlun). Skal kannski rífa mig í að senda kóðann sem ég var búinn að breyta með athugasemdum.
Það sem ég var að breyta var samt basically ekki nota þetta kjánalega "if() { no-op } else { action! }", ekki nota regex heldur ctype_alnum/ctype_alpha til að skoða strengi (þessi regex hjá þér eru líka eitthvað vafasöm finnst mér). Og svo ekki ákveða of mikið hvernig nöfn á fólki eru (bara alpha? það er til fólk sem heitir nöfnum með allskonar táknum t.d. - og ').
Re: PHP hjálp
Sent: Lau 29. Jan 2011 21:47
af intenz
B.Ingimarsson skrifaði:intenz skrifaði:Af hverju að nota sprintf() ?
það er víst öruggara, lestu þráðinn
Er það öruggara? Hvernig þá?
Re: PHP hjálp
Sent: Lau 29. Jan 2011 21:51
af B.Ingimarsson
dori skrifaði:Ég myndi nú ekki segja að þetta sé "fínt" (skoðaðu fyrri athugasemdir við stílinn á if setningum og notkun á http redirect til að birta villur. Ég var búinn að gera einhverja tilraun til að lagfæra þetta en gafst upp í bili þegar ég sá að þetta er bara síðan sem höndlar formið (s.s. bara fyrir post höndlun). Skal kannski rífa mig í að senda kóðann sem ég var búinn að breyta með athugasemdum.
Það sem ég var að breyta var samt basically ekki nota þetta kjánalega "if() { no-op } else { action! }", ekki nota regex heldur ctype_alnum/ctype_alpha til að skoða strengi (þessi regex hjá þér eru líka eitthvað vafasöm finnst mér). Og svo ekki ákveða of mikið hvernig nöfn á fólki eru (bara alpha? það er til fólk sem heitir nöfnum með allskonar táknum t.d. - og ').
þarft þess ekkert mín vegna ég er bara eitthvað að leika mér, ég skil líka ekkert alltof mikið af því sem þú segir ég byrjaði að æfa mig í php í des '10 með tutorials frá
http://www.thenewboston.com er bara að æfa mig, takk samt
er heldur ekki alveg að skilja þig með ekki regex heldur eitthvað annað ?
Re: PHP hjálp
Sent: Sun 30. Jan 2011 18:20
af B.Ingimarsson
ætlaði að láta upplýsingarnar sendast í mysql þegar notandi ýtir á takka, er ekki viss um að þetta sé rétti kóðinn en hvernig gæti ég gert þetta
(echo 'echo' er þarna bara til prófunar)
Kóði: Velja allt
<form name="form" method="post">
<input type="button" name="button" value="Halda áfram">
</form>
<?php
if(isset($_POST['button']))
{
mysql_query(sprintf("INSERT INTO `b.ingimarsson`.`users` (`name`, `username`, `email`, `password`) VALUES ('%s', '%s', '%s', '%s')",
mysql_real_escape_string($name),
mysql_real_escape_string($username),
mysql_real_escape_string($email),
mysql_real_escape_string($password)));
echo "echo";
}
else
{}
?>
Re: PHP hjálp
Sent: Sun 30. Jan 2011 18:38
af intenz
<input type="submit" name="button" value="Halda áfram">
type="button" submittar ekki formið og því sendist breytan aldrei.