Master_of_Puppets Posted June 10, 2007 Posted June 10, 2007 php-nak van elmentve? Szerveren fut php? Csináltam már néhány php progit és az mind működött csak ezzel szenved De, hogy örüljetek van egy másik kérdésem: Ez: <?php foreach( $_SERVER as $kulcs=$ertek ) { print "\$_SERVER[\"$kulcs\"] == $ertek<br />"; } ?> Mért nem működik???
h.arpad Posted June 11, 2007 Posted June 11, 2007 Helyes használat: foreach( $_SERVER as $kulcs => $ertek ) Bár nem hiba, de nem értem, hogy a 2. sorban miért van dupla egyenlőségjel, ha azt csak kiiratod ?
Gozo Posted June 19, 2007 Posted June 19, 2007 Sziasztok! Megint itt! Most a következõt szeretném megoldani: checkbox-al kijelölök több elemet és egy gomb megnyomásával kívánom azt egy sql adattáblába bevinni persze egyenként, hisz mindegyik bejelölt adat más és más rekordhoz tartozik. Ez POST-al megoldható? Gondolom tömbben kéne, valahogy átvinnem az sql-t iró részbe a kijelölt adatokat. De hogy? Köszi!
h.arpad Posted June 19, 2007 Posted June 19, 2007 A POST-tal elküldött adatok már eleve egy $_POST tömbbe kerülnek. Minden checkbox-nak adsz egy "name" attribútumot. Ezek után az értéke (value) az $_POST['name']-mel lesz egyenlõ. A "name" helyére természetesen a megfelelõ nevet kell helyettesítsd.
Mezofi Posted June 19, 2007 Posted June 19, 2007 Ahol feldolgozod a form adatait, annak a lapnak az elejére raksz egy ilyet: <?php print_r($_POST); >? Látni fogod milyen nevekkel, milyen adatok jönnek. Annak függvényében már megtudod írni, hogy mit hova rakjon a script.
Gozo Posted June 19, 2007 Posted June 19, 2007 Megnéztem Valahol ott hibázok, hogy egy while ciklussal iratom ki a checkboxokat és a hozzátartozó értékeket. Így jelenitem meg az sql tábla adatait és minden rekordhoz egy checkboxot adok, de mindenk ugye különbözõ név kellene. Én ezt nem oldottam meg és így csak az utolsónak bejelölt értéket viszi át. <?php while($tomb=mysql_fetch_array($eredmeny)) { $cim=$tomb['cim']; $hossz=$tomb['hossz']; $kategoria=$tomb['kategoria']; $id=$tomb['ID']; ?> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" <?php echo "value=$id"; ?> > </td> <?php print "<td>$cim</td><td>$hossz</td><td>$kategoria</td></tr>"; } <input type="submit" name="atad" value="OK" > </t> <input type="reset" name="rgomb" value="MÉGSEM" > </form> ?> Ez a kiragadott rész a kódból ahol atad gomb megnyomásával kéne átadnom a be jelölt értékeket name="mit" -nél lehet a gond, mivel minden bejelölés felülirja az elõzõt. Ezt hogyan lehetne megoldani?
h.arpad Posted June 19, 2007 Posted June 19, 2007 íl: Először is olyan záró tag, hogy </t> nincsen. Hol is van a táblázatod? Mert én nem látok itt olyat hogy <table> . A nélkül viszont nehéz a sorait megadni, és lezárni is. íl: Másodszor pedig a checkbox neve mindig ugyanaz marad, ahányszor kiiratod, ezzel így semmire sem mész. Tehát, szükséged van egy mezőre az adatbázisban, amely az egyes checkbox-ok neveit is tárolja. Ez a legtisztább megoldás, mert ugyanannyi "name" érték lesz, mint ahány "value", vagyis ahány rekord a táblában.
Gozo Posted June 20, 2007 Posted June 20, 2007 A php forrás még sok egyebet is tartalmaz ezért akartam csaka kiragadott résszel illusztrálni a dolgot. De akkor megpróbálok egy olyat csinálni belõle amibe nem zavar be a többi rész és a táblázat is benn van: <html> <head> <title>Filmek törlése</title> <link href="stilus.css" type=text/css rel=stylesheet title=ind> </head> <body class="index"> <table border="0" bordercolor="#FFFFFF" width="100%" height="100%"> <tr class="menu" align="right" height="5%"> <td valign="top"> Itt eredetileg egy menûsor van </td> </tr> <tr class="focim" align="center" height="10%"> <td valign="top"> Filmek törlése </td> </tr> <tr align="center"> <td valign="top"> <table class="menu" border="1" cellpadding="0" cellspacing="0" style="border-collapse:collapse" bordercolor="#FFFFFF" width="80%"> <?php include "config.php"; $kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($dbname,$kapcsolat) or die(mysql_error()); $sql="select * from filmek order by cim"; $eredmeny1 = mysql_query($sql) or die(mysql_error()); if(mysql_num_rows($eredmeny1)>0) { print "<tr><th></th><th>Cím</th><th>Hossz</th><th>Kategória</th></tr><br/>"; while($tomb=mysql_fetch_array($eredmeny1)) { $id=$tomb['filmID']; $cim=$tomb['cim']; $hossz=$tomb['hossz']; $kategoria=$tomb['kategoria']; ?> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" <?php echo "value=$id"; ?> > </td> <?php print "<td>$cim</td><td>$hossz</td><td>$kategoria</td></tr>"; } } else { ?> <tr class="uzenet" align="center"> <td valign="top"> Jelenleg üres a filmtár </td> </tr> <?php } ?> </table> </td> </tr> <tr align="center"> <td> <input type="submit" name="ok" value="OK" > <input type="reset" name="rgomb" value="MÉGSEM" > </form> </td> </tr> <tr class="menu"> <td colspan="3"> <?php if (isset($_POST['ok'])) { $film=$_POST['mit']; include "config.php"; $kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($dbname,$kapcsolat) or die(mysql_error()); $sql="delete from filmek where convert(filmek.filmID USING utf8)='".$film."'"; $eredmeny2 = mysql_query($sql) or die(mysql_error()); if($eredmeny2>0) { print "Film törölve!"; } else { print "Sikertelen törlés!"; } } ?> </td> </tr> <tr class="menu" align="center" height="10%"> <td valign="bottom"> Itt eredetileg egy alsó felirat van </td> </tr> </table> </body> </html> Köszi, hogy segítesz!
h.arpad Posted June 20, 2007 Posted June 20, 2007 Ne ezt idézd be. A HTML-kimenetet, vagyis az oldal forrását (Firefox-ban Ctrl+U ) idézd be kezdetnek, mivel HTML-gondod is van. Próbáljuk kezdetnek azt kilőni. Én a fenti kódot saját szerveren nyilván nem tudom lefuttatni. A checkbox "name" problémát változatlanul nem oldottad meg. :!: A nélkül a form nem fog működni. Az include helyes használata (23. sor): include ("valami.php"); Még egy hiba (30. sor), helyesen: print "<tr><td>Cím</td><td>Hossz</td><td>Kategória</td></tr><br/>";
Gozo Posted June 20, 2007 Posted June 20, 2007 Pont a checkbox miatt kérdeztem a dolgot, mert enm tudok rájönni, hogy azt hogyan kellene megcsinálnom, hogy egyszerre többet kijelölve, mindet átvigye és ne csak az utolsónak jelöltet. Megpróbáltam azt hogy az adott sor ID-jét (ami egyedi mert kulcs) adom a name értékének De akkor meg ott áll meg a tudományom, hogy abban a részben ahol az sql táblából törölni akarom a kívánt rekordot, hogyan nyerem ki a POST-olt adatok közül? Ezt hozza át mondjuk két rekord kijelölésekor: Array ( [12] => 12 [1] => 1 [ok ]=> OK ) Ebbõl kéne a 12-es és az 1-es ID-jû rekordot törölnöm. De azért itt az oldal forrása: <html> <head> <title>Filmek törlése</title> <link href="stilus.css" type=text/css rel=stylesheet title=ind> </head> <body class="index"> <table border="0" bordercolor="#FFFFFF" width="100%" height="100%"> <tr class="menu" align="right" height="5%"> <td valign="top"> Itt eredetileg egy menûsor van </td> </tr> <tr class="focim" align="center" height="10%"> <td valign="top"> Filmek törlése </td> </tr> <tr align="center"> <td valign="top"> <table class="menu" border="1" cellpadding="0" cellspacing="0" style="border-collapse:collapse" bordercolor="#FFFFFF" width="80%"> <tr><th></th><th>Cím</th><th>Hossz</th><th>Kategória</th></tr><br/> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=11 > </td> <td>8. utas a halál</td><td>87</td><td>Sci-fi</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=7 > </td> <td>Büszkeség és balítélet</td><td>88</td><td>Romantikus</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=10 > </td> <td>Csillagok háborúja</td><td>105</td><td>Sci-fi</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=4 > </td> <td>Die Hard 4</td><td>96</td><td>Kaland</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=14 > </td> <td>Elfújta a szél</td><td>132</td><td>Romantikus</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=6 > </td> <td>Hair</td><td>87</td><td>Zenés</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=9 > </td> <td>Karib tenger kalózai</td><td>94</td><td>Kaland</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=12 > </td> <td>Mekk Elek</td><td>68</td><td>Rajzfilm</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=2 > </td> <td>Mézga Géza</td><td>88</td><td>Rajzfilm</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=3 > </td> <td>Rettenthetetlen</td><td>102</td><td>Történelmi</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=1 > </td> <td>Shrek 3</td><td>98</td><td>Rajzfilm</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=5 > </td> <td>Sikoly</td><td>89</td><td>Horror</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=13 > </td> <td>Szombat esti láz</td><td>84</td><td>Zenés</td></tr> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" name="mit" value=8 > </td> <td>Sztálingrád</td><td>105</td><td>Történelmi</td></tr> </table> </td> </tr> <tr align="center"> <td> <input type="submit" name="ok" value="OK" > <input type="reset" name="rgomb" value="MÉGSEM" > </form> </td> </tr> <tr class="menu"> <td colspan="3"> </td> </tr> <tr class="menu" align="center" height="10%"> <td valign="bottom"> Itt eredetileg egy alsó felirat van </td> </tr> </table> </body> </html>
h.arpad Posted June 21, 2007 Posted June 21, 2007 Ezt hozza át mondjuk két rekord kijelölésekor: Array ( [12] => 12 [1] => 1 [ok ]=> OK ) Ebből kéne a 12-es és az 1-es ID-jű rekordot törölnöm. Bejárod foreach-csel az $_POST tömböt. Feltöltesz egy tömböt ($tomb) csak az értékekkel (az OK-t is levágod), és valahogy így építed fel az SQL-utasítást: $sql = "DELETE FROM tablanev WHERE"; $elemek = count ($tomb); if ( $elemek > 1 ) { //utolsó tömbindex $lindex = ($elemek - 1); //utolsó előtti tömbindex $pindex = ($elemek - 2); for ($c = 0; $c <= ($pindex); $c++) { $sql .= " id=$tomb[$c] AND"; } $sql .= " id=$tomb[$lindex];"; } else { $sql .= " id=$tomb[0];"; } Előtte persze irasd ki az $sql változó tartalmát, hogy lásd, hogy jó-e az utasítás.
Gozo Posted June 21, 2007 Posted June 21, 2007 Kipróbáltam a kódot de sajnos nem mûködik, nem töröl az adatbázisból. Pedig kipróbáltam, belép a for ciklusba. Ki is tudom iratni a törölni kivánt rekordok id-it de törlés az nem hajtódik végre.
h.arpad Posted June 21, 2007 Posted June 21, 2007 A pontosvesszők a helyükön vannak. Az első sorba ne tegyél egyet se! :!: Mi az $sql tartalma, ha lefut a ciklus? Az $tomb tartalma is érdekelne, remélem nem hagytad meg társításos tömbnek (ahogy az $_POST tartalmazza), mert úgy nehéz lesz...
Gozo Posted June 22, 2007 Posted June 22, 2007 Biztos én bénázok! Itt a kód: <html> <head> <title>Filmek törlése</title> <link href="stilus.css" type=text/css rel=stylesheet title=ind> </head> <body class="index"> <table class="menu" border="1" cellpadding="0" cellspacing="0" style="border-collapse:collapse" bordercolor="#FFFFFF" width="80%"> <?php include "config.php"; $kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($dbname,$kapcsolat) or die(mysql_error()); $sql="select * from filmek"; $eredmeny1 = mysql_query($sql) or die(mysql_error()); if(mysql_num_rows($eredmeny1)>0) { print "<tr><th></th><th>Cím</th><th>Hossz</th><th>Kategória</th></tr><br/>"; while($tomb=mysql_fetch_array($eredmeny1)) { $id=$tomb['id']; $cim=$tomb['cim']; $hossz=$tomb['hossz']; $kategoria=$tomb['kategoria']; ?> <form method="POST" action=""> <tr> <td align="center" valign="center"> <input type="checkbox" <?php echo "name=$id value=$id"; ?> > </td> <?php print "<td>$cim</td><td>$hossz</td><td>$kategoria</td></tr>"; } ?> </table> <input type="submit" name="ok" value="TÖRLÉS" > <input type="reset" name="rgomb" value="MÉGSEM" > </form> <?php } else { ?> </table> Jelenleg üres a filmtár <?php } ?> <?php if (isset($_POST['ok'])) { //$tomb2 eloallitasa $j=0; foreach($_POST as $seged) { $tomb1[$j]=$seged; $j++; } $hossz=count($tomb1)-1; $tomb2=array_slice($tomb1,0,$hossz); include ("config.php"); $kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($dbname,$kapcsolat) or die(mysql_error()); $sql="delete FROM filmek WHERE"; $elemek = count ($tomb2); print "$elemek"; if ( $elemek > 1 ) { $lindex = ($elemek - 1); $pindex = ($elemek - 2); for ($c = 0; $c <= ($pindex); $c++) { $sql .= " id=$tomb2[$c] AND"; } $sql .= " id=$tomb2[$lindex];"; } else { $sql .= " id=$tomb2[0];"; } $eredmeny2 = mysql_query($sql) or die(mysql_error()); if($eredmeny2>0) { print "Film törölve!"; } else { print "Sikertelen törlés!"; } } ?> </body> </html> sql-ben semmi változás nem történik ha futtatom a kódot és bejelölök valamit és megnyomom a gombot hogy töröljön. Kiirja hogy a film törölve, de az sql-ben benn marad.
Mezofi Posted June 22, 2007 Posted June 22, 2007 Van ez a sor: $eredmeny2 = mysql_query($sql) or die(mysql_error()); Ezt alakítsd így: print("<br/>Ez a lekérdezésem: ".$sql."<br/>"); $eredmeny2 = mysql_query($sql) or die(mysql_error()); Aztán lássuk mit ír.
Gozo Posted June 22, 2007 Posted June 22, 2007 A kiírás: Ez a lekérdezésem: delete FROM filmek WHERE id=15 AND id=16; Film törölve! Itt a 15-ös és 16-os id-jû filmet töröltem volna. Persze semmi nem történt. Viszont ha csak egyet ejlölök be azt törli is. Közben elgondolkodtam Miért is használunk AND-et? Inkább OR-t kellene Átirtam és így megy! Viszont hogyan alakitsam át ha egy vagy két cella értékét akarom módosítani?
h.arpad Posted June 22, 2007 Posted June 22, 2007 [...] Inkább OR-t kellene [...] Ezen (OR) én is gondolkodtam, mikor leírtam, de nem találtam sehol rá példát a ref. manual-ban. Nem tudom, akkor mi az AND értelme konkrét esetben. Olyan sort keres, ahol mindegyik egyedi kulcs megtalálható? Hát azt nehéz lesz... Na, legalább a PHP-kód jó volt. Ha a táblában módosítani akarsz valamit, akkor: UPDATE tablanev SET valtozo1=valtozo2 WHERE feltetel De konkrét példa kell nekem ahhoz, hogy értelmesen át tudjam írni.
Gozo Posted June 22, 2007 Posted June 22, 2007 Köszönöm a segítséged, mert végül is el kellett jutni az AND-ig is onnan már csak egy lépés volt az OR. Az sql paranccsal tisztában vagyok. A probléma ott van, ha több rekordban (persze minden rekordban ugyanazokat ugyanazt a mezőt) akarok változtatni. Tehát elvileg minden sornál be kéne olvastatni a változo1=változo2-t. Valahogy így: if (isset($_POST['ok'])) { $j=0; foreach($_POST as $seged) { $tomb1[$j]=$seged; $j++; } $hossz=count($tomb1)-1; $tomb2=array_slice($tomb1,0,$hossz); $ma=date("Y-m-d"); include "config.php"; $kapcsolat = mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($dbname,$kapcsolat) or die(mysql_error()); $sql="update filmek "; $elemek = count ($tomb2); if ( $elemek > 1 ) { $lindex = ($elemek - 1); $pindex = ($elemek - 2); for ($c = 0; $c <= ($pindex); $c++) { $sql .= "set be='$ma' WHERE' id=$tomb2[$c] OR"; } $sql .= "set be='$ma' WHERE' id=$tomb2[$lindex];"; } else { $sql .= "set be='$ma' WHERE' id=$tomb2[0];"; } $eredmeny2 = mysql_query($sql) or die(mysql_error()); if($eredmeny2>0) { print "Adat módosítva!"; } else { print "Sikertelen módosítás!"; } }
Gozo Posted June 22, 2007 Posted June 22, 2007 Srácok! Köszönöm mindenkinek a segítséget! Közben az OR-ral megoldottam ezt is csak egy helyen kimaradt egy sor azért nem ment elsőre. Valószinűleg még igénybe veszem a tanácsaitokat, ha nem probléma. Még egyszer köszi mindenkinek! Jó hétvégét!
Mezofi Posted June 22, 2007 Posted June 22, 2007 Ugye mondtam, hogy ha kiíratod a $sql tartalmát rájössz a hibára. És így is lett.
payskin Posted June 22, 2007 Posted June 22, 2007 Nem tudom, akkor mi az AND értelme konkrét esetben. Olyan sort keres, ahol mindegyik egyedi kulcs megtalálható? Hát azt nehéz lesz... Jó, de nem csak az id mezõket lehet logikai mûveletekbe foglalni. Mutatok egy példát egy szép lekérdezésre, amiben aztán van AND bõven: $sql = "select p.products_id as id, m.manufacturers_name as gyarto, pd.products_name as nev, p.master_categories_id as mkatid, c.parent_id as pkatid, p.products_price as ar, t.tax_rate as afa, pd.products_description as leiras, p.products_image as kep from shop_products p, shop_products_description pd, shop_manufacturers m, shop_categories c, shop_tax_rates t where p.products_status = '1' and p.master_categories_id NOT IN $category_filter and pd.products_id = p.products_id and m.manufacturers_id = p.manufacturers_id and c.categories_id = p.master_categories_id and t.tax_class_id = p.products_tax_class_id and pd.language_id = 2 order by p.products_id";
h.arpad Posted June 22, 2007 Posted June 22, 2007 Azért mondtam, hogy konkrét esetben. Persze aki jártas az SQL-ben, annak nem okozna gondot az, ami miatt én elakadtam. Amit beidéztél szép, ilyen példákból tényleg meg lehet tanulni az SQL-t. (Egyetlen gondom az, hogy, hacsak nem állok neki [valamilyen csoda folytán] -- lustaságomat lekûzdve -- pl. egy egyszerûbb webáruház építésének, az ilyet megtanulom, aztán el is felejtem, ahogy van.)
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now