ugrás a tartalomhoz

Php - Szavazó program debuggolása

kriszrap · 2011. Már. 29. (K), 23.30
Sziasztok!!!
van egy szavazó scriptem amit saját kezüleg irtam és nem tom hogy hibátlanul fog müködni??:D
Ha találtok hibát szóljatok létszi.
köszönöm!!

<?php
$result = mysql_query("SELECT * FROM szavazas where nick='kriszrap'");
$row = mysql_num_rows($result);

if(isset($_POST['felkuld']))
  {
  $sql = "INSERT INTO szavazas (id,nick,szavazas,datum) VALUES ('','krisz','".$_POST['szavaz']."',now())";
  $query = mysql_query($sql) or die ("Valami baj van az adatbázissal.");
}

$result2 = mysql_query("SELECT * FROM szavazas");
$szamol = mysql_num_rows($result2);

while($row2 = mysql_fetch_array($result2)){

 if($row2['szavazas'] == 1)
    {
     $jo++;
   }

if($row2['szavazas'] == 2)
    {
     $elmegy++;
   }

if($row2['szavazas'] == 3)
    {
     $Lehet_volna_jobb_is++;
   }

if($row2['szavazas'] == 4)
    {
     $rossz++;
   }

}
print $jo."jó<br>";
print $elmegy."elmegy".'<br>';
print $Lehet_volna_jobb_is."Lehet volna jobb is".'<br>';
print $rossz."rossz".'<br>';

$osszeg = $elmegy+$jo+$Lehet_volna_jobb_is+$rossz;
$osztva = 100/$osszeg;// 100%  a maximum érték

print floor($osztva*$jo).'<br>';
print floor($osztva*$elmegy).'<br>';
print floor($osztva*$Lehet_volna_jobb_is).'<br>';
print floor($osztva*$rossz);
?>
 
1

Miért nem próbálod ki

ironwill · 2011. Már. 30. (Sze), 01.47
Miért nem próbálod ki először??

- nincs mysql connect (legalábbis nem szúrtad be). Ezzel a kóddal, anélkül nem jutsz messzire.. :)
- Poetro úgyis szólni fog :), de: sql utasításba, közvetlenül SOSEM TESZÜNK REQUEST PARAMÉTERT(!), mert így csak megkönnyítjük a támadók munkáját (sql injection), az pedig nem cél. Használd a mysql_real_escape_string függvényt a károskódrészletek kiszűrűsére.
- A dátumot (létrehozás dátuma, módosítás dátuma), én automatikusan töltetem ki az adatbázissal, így azt csak kiszednem kell és esetleg formázni.

A működési logikát nem néztem.

$row = mysql_num_rows($result);
//Nem is használod utána sehol a $row-t

$result2 = mysql_query("SELECT * FROM szavazas");
//Felesleges változó definiálás, mivel a $result-ot utána
//sehol sem használod, így lehetett volna ez is csak $result
//- eggyel kevesebb változó. Az első $result-nak amúgy sincs
//értelme, mert nem használod fel sehol..

$szamol = mysql_num_rows($result2);
//Ennek szintén semmi értelme, a fent tárgyalt okokból és még
//a $row2 is maradhatott volna simán $row
Még egy dolog: tanácsos bizonyos jól bevált konvenciókat követni: pl. angol változó nevek. Lehet elsőre szokatlan (bár szerintem inkább furcsa a magyar változónév az angol nyelvű kódban), de érdemes áttérni, mert sok előnye van.
3

SQL injection

Poetro · 2011. Már. 30. (Sze), 02.03
Csak azért se szólok ;-), hogy erre figyelni kell, mert úgyis tudja, elvégre leírtam már neki is szerintem többször is.
2

ajj

solkprog · 2011. Már. 30. (Sze), 01.50
ironwill megjegyzésein felül

Javaslok:
1, notice hibaüzenetek kapcsold be, és amire síkit azokat javítsd ki!
2, == helyett amikor csak "lehet" akkor használd === -ot
3, mysql_* függvénnyek helyett használd a PDO-t (beépített a PHP-ban)
4, gondold át azt a sok változott. $jo, $elmegy, $Lehet_volna_jobb_is, $rossz...
5, PHP-t és a HTML-t válaszd szét

ironwill írta de mégegyszer:
+1, SQL injectionnek sürgősen nézz utána. és védd le!
4

Javaslom ismerkedj meg az

inf · 2011. Már. 30. (Sze), 08.58
Javaslom ismerkedj meg az egységtesztelés (unit test) fogalmával.
5

mysql_real_escape_string

kriszrap · 2011. Már. 30. (Sze), 14.22
mysql_real_escape_string tényleg ki hagytam:( ja meg mysql_connect van:D csak nem irtam bele a kódba:D
köszönöm a tanácsokat:)
9

Ideje lenne a mysql_

bamegakapa · 2013. Jún. 4. (K), 10.35
Ideje lenne a mysql_ függvényeket úgy, ahogy van, elfelejteni. Belátható időn belül úgy néz ki, ki is fognak kerülni a PHP-ból (ideje már) - az 5.5-ben már deprekálva van az egész MySQL extension. Az összes régi kódot persze nagy munka lenne átírni, de új kódban semmiképp NE használd őket.

Tanuld meg vagy a mysqli, vagy a PDO használatát, különös figyelemmel a Prepared statements témakörére. Én a PDO-t javaslom. Emberek vagyunk, hibázunk, sokszor elfelejtettünk már eszképelni és el is fogunk - elég nagy árat lehet fizetni érte. Jobb inkább kikerülni a problémát, a Prepared statements ebben segít.

Mint ahogy a többiek is írják, sokmindent lehetne javítani a kódon, de ezen hiányosságok nagyrésze csak rosszabb minőségű kódot és karbantarthatatlanságot, a hibák nehezebb felderíthetőségét okozza. Az SQL injection sokkal nagyobb baj.

Állj át és ne nézz vissza :).

ui.: most látom, hogy ez rohadt régi topik, node sebaj. A probléma még ma is fennáll sajnos, ha egyvalaki rátalál erre, és a fejére csap, hogy mit tettem, már megérte :).
13

Ellenvélemény

Pepita · 2013. Jún. 4. (K), 19.40
Noha nem akarnék mereven kiállni a MySql mellett, de - hamár mindig vitatkozunk :) - egy két ellenvélemény:
- Az eszképelés elmulasztásának védelmére más eszközök is vannak, mint pdo-drivert használni (pl. saját v. framework osztályon keresztül "MySql-ezni");
- A MySql-nek van egy-két plussz szolgáltatása a pdo-hoz képest, pl. elég egyszerű backup-ot készíteni az adatbázisodról.

Ezzel persze nem akarom azt mondani, hogy "igenis használj MySql-t", csak kicsit kontrázom a (szerintem) túl egyoldalú véleményt.
16

Obviózus dolgokról nem

bamegakapa · 2013. Jún. 4. (K), 20.03
Obviózus dolgokról nem szállok vitába :). Nem véletlenül kerül ki a PHP-ból. Ha a PDO nem tetszik, van mysqli is. A lényeg a prepared statement.

Egy kezdő kezébe meg inkább adja az ember azt az eszközt, amivel kisebb galibát tud okozni. Ezért gáz, hogy a netes tutorialok jelentős része még mindig mysql_ függvényekkel nyomul.
18

Eredmény:

Pepita · 2013. Jún. 4. (K), 20.24
most rájöttem, milyen nagyon rég nem láttam netes tutorialt... Hát, ha egyszer sok időm lesz... - de ezért már megérte :).
6

miegymás

feco1992 · 2013. Jún. 3. (H), 21.20
<form method="POST" name="form" >
<img src="kepek/1.jpg" width="20%" ><input type="checkbox" name="egy" id='egy' ><br>
<img src="kepek/2.jpg" width="20%"><input type="checkbox" name="ketto" id='ketto' ><br>
<img src="kepek/3.jpg" width="20%" ><input type="checkbox" name="harom" id='harom'><br>

<input type="submit" value="Szavazat elküldése!">
</form>

<?php
$kapcsolat=mysql_pconnect("localhost","root","");
if (!$kapcsolat)
{$dbhiba=mysql_error();
return false;}
if (!mysql_select_db('szavazas', $kapcsolat))
{$dbhiba=mysql_error();
return false;}

if ($_POST['egy']){
$parancs="INSERT INTO szav (egy) VALUES ('egy')";

if (mysql_query($parancs, $kapcsolat)){print "Sikeresen szavaztál!";}}

if ($_POST['ketto']){

$parancs="INSERT INTO szav (egy) VALUES ('ketto')";
if (mysql_query($parancs, $kapcsolat)){print "Sikeresen szavaztál!";}}

if ($_POST['harom']){

$parancs="INSERT INTO szav (egy) VALUES ('harom')";
if (mysql_query($parancs, $kapcsolat)){print "Sikeresen szavaztál!";}}

?>

<br><a href="allas.php">A szavazás állásának megtekintése!</a>

<?php
$kapcsolat=mysql_connect("localhost","root","");
if (!$kapcsolat)
{$dbhiba=mysql_error();
return false;}
if (!mysql_select_db('szavazas', $kapcsolat))
{$dbhiba=mysql_error();
return false;}

$sql = "SELECT egy FROM szav WHERE egy='egy' ";

$result = mysql_query($sql);

echo "Első kép: ". mysql_num_rows($result)."<br>";

$sql2 = "SELECT egy FROM szav WHERE egy='ketto' ";

$result2 = mysql_query($sql2);

echo "Második kép: ".mysql_num_rows($result2)."<br>";

$sql3 = "SELECT egy FROM szav WHERE egy='harom' ";

$result3 = mysql_query($sql3);

echo"Harmadik kép: ". mysql_num_rows($result3)."<br>";
?>

<SCRIPT LANGUAGE="JavaScript">

function uresmezo(mezo){
if (mezo.value != "") return true;
else{
alert("A(z) "+ mezo.name +" mező üres!");
return false;
}
}

function email(mezo){
var szoveg = mezo.value;
if (!(szoveg.indexOf('@')>0 && szoveg.indexOf('@')<szoveg.length-1)){
alert("Rossz e-mail cím!");
return false;
}
else return true;
}

function teszt(adat,minta){
for (var i=0; i<adat.length; i++)
if (minta.indexOf(adat.charAt(i)) == -1)
return false;

return true;
}

function numerikusCheck(mezo){
if (!uresmezo(mezo)) return false;
if (!teszt(mezo.value,"1234567890")){
alert("Ez nem numerikus érték!");
return false;
}
else return true;
}

function tartalmaz(adat,minta){
for (var i=0; i<adat.length; i++)
if (minta.indexOf(adat.charAt(i)) != -1)
return true;
return false;
}

function telefon(mezo){
if (!uresmezo(mezo)) return false;
if (!teszt(mezo.value,"1234567890()/- ") || !tartalmaz(mezo.value,"1234567890")){
alert("Ez nem jó telefonszám!");
return false;
}
else return true;
}

function ellenoriz(){
if (uresmezo(document.form.nev) && numerikusCheck(document.form.kor) &&
telefon(document.form.telefon) && email(document.form.email)){
// document.write("<?php include('reg.php'); ?>");

return true;
}
else return false;
}

</SCRIPT>
</head>
<body>
<FORM NAME="form" method="POST" action="reg.php" onSubmit="return ellenoriz()">
<table>
<tr>
<td align="right">Név:</td>
<td><INPUT TYPE="text" NAME="nev" SIZE="20"></td>
</tr>

<tr>
<td align="right">Kor:</td>
<td><INPUT TYPE="text" NAME="kor" SIZE="20"></td>
</tr>

<tr>
<td align="right">Telefonszám:</td>
<td><INPUT TYPE="text" NAME="telefon" SIZE="20"></td>
</tr>

<tr>
<td align="right">E-mail cím:</td>
<td><INPUT TYPE="text" NAME="email" SIZE="20"></td>
</tr>

<tr>
<td align="right"> </td>
<td><INPUT TYPE="submit" VALUE="Regisztráció!"></td>
</tr>
</table>

</FORM>

</body>
</html>

<script language="javascript">
maxkepszam=9;
sorszam=1;
index=1;
function nagy_frissit(szam){
document.nagy.src=+(sorszam+szam)+".jpg";

index=sorszam+szam;
}
function frissit(sorszam){
document.kep1.src=(sorszam)+".jpg";
document.kep2.src=(sorszam+1)+".jpg";
document.kep3.src=(sorszam+2)+".jpg";
document.kep4.src=(sorszam+3)+".jpg";
document.kep5.src=(sorszam+4)+".jpg";
}
function jobbnyilfrissit(fajlnev){
document.kepjobb.src=fajlnev;
}

function balnyilfrissit(fajlnev){
document.kepbal.src=fajlnev;
}
function frissi(sorszam){
document.nagy.src=(sorszam)+".jpg";
}
function jobbnagyfrissit(fajlnev){
document.jobbnyil.src=fajlnev;
}

function balnagyfrissit(fajlnev){
document.balnyil.src=fajlnev;
}

</script>
</head>
<body>
<img src="kepek/regi.jpg" width="1000px" height="1000px"/>
<div id="menu12">
<ul>
<li> <a href="felhasznalo.php"> Kezdőlap</a></li>
<li> <a href="uzenetkuldes.php"> Kapcsolat</a></li>
<li> <a href="galeria.php"> Galéria </a> </li>
<li> <a href="szavazo.php"> Szavazás</a></li>
<li> <a href="kijelentkezes.php"> Kijelentkezés</a></li>
</ul>
<div id="galeria">
<center><h1>Galéria</h1><center>
<table align="center" width="100%" border="0">
<a href="javascript:
if(sorszam>1){sorszam=sorszam-1;frissit(sorszam)};
if(sorszam<2){balnyilfrissit('bal_off.gif')};
jobbnyilfrissit('jobb_on.gif')">
<img src="bal_off.gif" name=kepbal border=0></a>
<img src="1.jpg" width="10%"name=kep1 onMouseOver=nagy_frissit(0);>
<img src="2.jpg" width="10%"name=kep2 onMouseOver=nagy_frissit(1);>
<img src="3.jpg" width="10%"name=kep3 onMouseOver=nagy_frissit(2);>
<img src="4.jpg" width="10%"name=kep4 onMouseOver=nagy_frissit(3);>
<img src="5.jpg" width="10%"name=kep5 onMouseOver=nagy_frissit(4);>
<a href="javascript:
if(sorszam<maxkepszam-4){sorszam=sorszam+1;frissit(so
rszam)}
if(sorszam>maxkepszam-5){jobbnyilfrissit('jobb_off.gi
f')};
balnyilfrissit('bal_on.gif')">
<img src="jobb_on.gif"name=kepjobb border=0></a><br>
<img src="1.jpg"name=nagy width="25%" onMouseOver=document.nagy.title=szoveg[index]>

<form action="uzenetkuldes.php" method="POST">
<td>
<table width="20%" border="0" cellspacing="0" cellpadding="10">
<tr>
<td> <form action="kapcsolat.php" method="POST">
<table width="500" cellspacing="0" border="0" cellpadding="3" align="center">
<tr>
<td align="right"><font color="black"> Név: </td>
<td> <input type="text" name="name" maxlength="255" value=""> </td>
</tr>
<tr>
<td align="right"> <font color="black"> Tárgy: </td>
<td> <input type="text" name="theme" maxlength="255" value=""> </td>
</tr>
<tr>
<td align="right"><font color="black"> E-mail: </td>
<td> <input type="text" name="email" maxlength="255" value=""> </td>
</tr>
<tr>
<td colspan="2" align="center"> <textarea name="message" id="uzen" cols="50" rows="6" tabindex="2" ></textarea> </td>
</tr>

<tr>
<td colspan="2" align="center"> <input type="submit" name="submit" value="Elküld" id="regigomb"> </td>
</tr>
</table>
</form>
</center>
</div>
<div id="szoveg123">
<center>
<h1>Üzenetküldés</h1>
</center>
<?php
if (isset($_POST['submit'])) {
if ($_POST['name'] == NULL) {
echo "<div id='hibakuldes'>Nem adtál meg nevet!</div>";
} else if ($_POST['theme'] == NULL) {
echo "<div id='hibakuldes'>Nem adtál meg tárgyat!</div>";
} else if ($_POST['email'] == NULL) {
echo "<div id='hibakuldes'>Nem adtál meg e-mailt!</div>";
} else if ($_POST['message'] == NULL) {
echo "<div id='hibakuldes'>Nem irtál üzenetet!</div>";
} else {
echo "<div id='sikerkuldes'>Sikeresen elküldtük az üzeneted!</div>";
$name = ($_POST['name']);
$theme = ($_POST['theme']);
$email = ($_POST['email']);
$message = ($_POST['message']);
mail('valaki##kukac##gmail.com', '$theme', '$name, $email, $message', 'From:localhost');
}
}
?>

<?php
if ( !empty($_REQUEST['nev']) &&
!empty($_REQUEST['kor']) &&
!empty($_REQUEST['email'])&&
!empty($_REQUEST['telefon'])

){
$dbhiba="";
$vissza = adatbazis_bovit($_REQUEST['nev'],
$_REQUEST['kor'],
$_REQUEST['email'],
$_REQUEST['telefon'],

$dbhiba);
if (!$vissza)
{print $dbhiba;}
else {print "<h2 alignt='center'>"."Sikeres Regisztráció!"."<h2>";}
}


function adatbazis_bovit($nev, $kor, $email, $telefon, &$dbhiba)
{
$nev=mysql_real_escape_string($nev);
$kor=mysql_real_escape_string($kor);
$email=mysql_real_escape_string($email);
$telefon=mysql_real_escape_string($telefon);


$kapcsolat=mysql_pconnect("localhost","root","");
if (!$kapcsolat)
{$dbhiba=mysql_error();
return false;}
if (!mysql_select_db('users', $kapcsolat))
{$dbhiba=mysql_error();
return false;}
$parancs="INSERT INTO adatok (nev, kor, email, telefon) VALUES ('$nev','$kor','$email','$telfon')";
if (!mysql_query($parancs, $kapcsolat)){$dbhiba=mysql_error(); return false;}
return true;
}
?>
7

Ez egyre szebb :D

inf · 2013. Jún. 3. (H), 22.02
Ez egyre szebb :D
8

Lehet, hogy csak

bamegakapa · 2013. Jún. 4. (K), 10.33
Lehet, hogy csak elrettentésként küldte be.
10

mysql_pconnect

Poetro · 2013. Jún. 4. (K), 10.40
Azért jó a mysql_pconnect, mert nem megfelelő beállítások mellett meg lehet vele fektetni az adatbázis szervert azzal, hogy elfogynak a megnyitható kapcsolatok. Legalábbis jó pár éve nekem sikerült elérnem, hogy csak a root tudta lelőni az összes megnyitott kapcsolatot, mivel más már nem tudott hozzá kapcsolódni.
12

Nyitott szem

Pepita · 2013. Jún. 4. (K), 19.34
Ti ezt a 100 km-nyi színezetlen spagettit mind besziptátok, ráadásul nyitott szemmel?!

Lehet, hogy én vagyok türelmetlen, de meg sem próbáltam...
14

Én sem.

inf · 2013. Jún. 4. (K), 19.51
Én sem.
15

Ha nem szóltok, még

hunkris · 2013. Jún. 4. (K), 19.54
Ha nem szóltok, még azthiszem, ez valami ASCII ábra. Csak vicc volt.
17

Sok pénzt kéne fizetni ahhoz,

bamegakapa · 2013. Jún. 4. (K), 20.05
Sok pénzt kéne fizetni ahhoz, hogy végigolvassam :).
11

A mysql_ függvényekkel

bamegakapa · 2013. Jún. 4. (K), 10.52
A mysql_ függvényekkel kapcsolatban lásd a 9-es hozzászólásomat, nem írom le még egyszer.