ugrás a tartalomhoz

Php kód? mysql-ből való törlés változó megadásával.

proff · 2010. Jan. 14. (Cs), 12.44
Sziasztok. Előre leszögezem hogy még csak most ismerkedem a php-vel. A problémám az lenne hogy van egy iyen urlap2.php-m:

<?php
include("config.php");
?>

<HTML>

<HEAD>
<TITLE> Meditech </TITLE>
</HEAD>

<BODY>
<p align=center>

<font size=5 color=navy><b>Orvosi tű megrendelő űrlap</b></font>
<br><br>

<form action="felvetel2.php" method="POST">

<table cellspacing=20>

<tr>
<td align=right><b>NÉV:</td>
<td>
<?php
$sql="SELECT * FROM megrendelo ORDER BY nick";
$sql_result=mysql_query($sql);

echo "<select name=nick>";

while($rows=mysql_fetch_array($sql_result))
{
echo "<option value=".$rows['nick'].">".$rows['nick']."</option>\n";
}
?>
</td>
</tr>


<tr>
<td align=right><b>Rajzszám:</td>
<td>
<select name="rajzszam">
<option value="DR-4001-C">DR-4001-C
<option value="DR-4002-C">DR-4002-C
<option value="DR-4005-C">DR-4005-C

</select>
</td>
</tr>
<tr>
<td align=right><b>Darabszám(db):</td>
<td>
<input name="darab" style="width:70">
</td>
</tr>

</table>

<input type="submit" value="Megrendelés">

</form>

<form action="torles.php" method="POST">

<table cellspacing=20>

<tr>
<td align=right><b>AZONOSÍTÓ:</td>
<td>
<?php
$sql="SELECT * FROM megrendeles";
$sql_result=mysql_query($sql);

echo "<select name=id>";

while($rows=mysql_fetch_array($sql_result))
{
echo "<option value=".$rows['id'].">".$rows['id']."</option>\n";
}
?>
</td>
</tr>
</table>

<input type="submit" value="Törlés">

</form>

</BODY>


</HTML>
<?php
mysql_close($con);
?>

Ez adatokat visz be egy mysql táblázatba. Ehhez van egy felvetel2.php-m. Ez működik rendesen de van alatta egy olyan rész ami legördülő menübe kiírja a megrendelések id-ját. Szeretném úgy megcsinálni ,hogy azt az id-jú sort törölje a törlés gomb megnyomásával amit kiválasztok.Csak az istennek se tudom megcsinálni pedig szerintem nem olyan nehéz.
Fontos lenne, előre is köszönet a megoldásokért.
 
1

Tipp 1: DELETE FROM táblanév

mahoo · 2010. Jan. 14. (Cs), 14.03
Tipp 1: DELETE FROM táblanév WHERE id='$_POST[id]' LIMIT 1;

Tipp 2: Én vagy betennék egy rejtett mezőt a select tag után és a form elküldése után vizsgálnám annak létezését isset-tel, vagy betennék egy üres <option></option> a lista legelejéra és a form elküldése utan nézném, hogy üres e - empty-vel - a $_POST['id']. Bár a törlésnek ettől függetlenül mennie kellene, ez csak olyan 'biztonsági' funkció.

Ellenőrizted, hogy a torles.php tényleg meghívódik? Pl tedd bele, hogy echo "ok";. Ha ez megjelenik akkor a törlési parancsnak is le kellene futnia.
2

Ezt így semmiképp

ganyecz · 2010. Jan. 14. (Cs), 15.45
DELETE FROM táblanév WHERE id='$_POST[id]' LIMIT 1;

Ahol:
$_POST[id] = "1' OR '1'; SELECT '";

...és minden adatot törölt a táblából.
3

Tipikus hozzászólás ganyecz

mahoo · 2010. Jan. 14. (Cs), 18.17
Tipikus hozzászólás ganyecz részéről, már elnézést! Ahelyett, hogy válaszolnál érdemben proff kérdésére, inkább lehúzod az egyetlen eddigi választ.

Szóval igazad is van meg nem is. Én így használom, a szintaktika helyes!
Az már más kérdés, hogy nekem ez az utasítás egy függvény paramétere, mely biztonságossá teszi használatát.

Mindenki jobban járt volna, ha kb ezt irod: '...bár szintaktikailag helyes, de olvass untána az sql injection-nek...'.

Na mindegy, csak bosszantó, hogy valaki segítséget kér, aki teszem hozzá egy kezdő, és ezt kapja.

Szép napot!
4

úgy marad

randomly · 2010. Jan. 14. (Cs), 21.29
Szia!

Tudom magamról Én is a weblaboron kezdtem az echo parancstól Kaptam megoldásokat itt ilyent mint a Tied is ... akkor gyorsan beillesztettem működik ... gyerünk tovább ezer még a dolog .. és úgy maradt. a mai napig úgy van ide-tova 5 éve. Ugyan kirúgtak a cégtől és még 1,5 hónapot kell kibírjanak a kódok. de most hogy majd valaki belenéz ... lesz minn csámcsognia. :-) Pedig működik, 2db 500-500 látogatós szájtot nem fog senki sql injectionozni....

És segítettél ez a lényeg! De a jó segítségnél is van jobb segítség, és ennyi. Szép napot rand
5

Szia rand, most felcsigáztál,

mahoo · 2010. Jan. 14. (Cs), 21.59
Szia rand, most felcsigáztál, tanulni szeretnék újat :).
Te hogyan oldanád meg különben? Mert én is meg az elején tartok - ezért lettem morcos fórumtársunk válaszán, hogy mért nem lehet építő választ adni - és jelenleg csak az injection ellen védem az utasításokat. Valami példát tudnál mutatni? És 5 éves tapasztalattal a hátad mögött, mmiből látszik, hogy egy programkód kezdőé vagy sem? Tényleg nagyon érdekel, mert mindig fejlesztem a saját kis objektumaim eljárásait... Előre is köszi!


u.i.: Kérdezni nem szégyen, és mindig van aki újat mutat :)!
6

?

deadcode · 2010. Jan. 27. (Sze), 15.55
Nem biztos, hogy értem a problémát, elvileg ennyi lenne:

<?php
// ... mysql_connect(), etc, lenyeg, hogy ezen a ponton mar van MySQL kapcsolatunk
$result = mysql_query('DELETE FROM megrendeles WHERE id = '.(int) $_POST['id']);
if ($result === FALSE) echo 'Nem sikerult a torles!';
else echo 'Megrendeles #'.(int) $_POST['id'].' torolve.';
?>
Az (int) a queryben és az eredmény kiírásában pedig szépen eliminálja az SQL injection és XSS lehetőségeket.

A kérdés az, hogy melyik része nem megy a dolognak? A DELETE query? Esetleg törlés után ugyanazt az oldalt visszakapni?