headcoach Posted July 30, 2009 Posted July 30, 2009 Köszönöm a hozzászólásokat, sikerült megoldani. Hasonló elvvel, mint az include-os módszer, egy while függvényt használtam. Egy adatbázist raktam be, s bevittem mindig a kód mellé egy dátumot, s ha az kissebb volt mint a mai (ami az utolsó nap kellett hogy legyen), akkor nem hívja meg újra. Még egyszer kösz az indításért.
Garono Posted July 30, 2009 Posted July 30, 2009 Így még talán elegánsabb is. (Habár egyszerûbbnek nem egyszerûbb. )
enjoys1ng1ng Posted August 8, 2009 Posted August 8, 2009 Egy nagyon egyszerû php tutorial-t próbáltam levezetni. Persze mint szinte mindig, nem mûködik. De fogtam magam és elkezdtem kijavítgatni. Egy "birthday" táblázatról van szó ahova adatokat lehet bevinni, törölni és módosítani. Az adatbevitel, a törlés már rendesen mûködik is, de a módosítás nem. Azt hiszem már mindent megpróbáltam az én tudásszintemen. Bemásolom ide az én kódomat, az alján található a "change_form.php" és a "change_record.php". Nagyon örülnék ha valaki tudna segíteni és elmagyarázná, hogy mi a hiba. (Az HTML nyitó és záró tag-eket csak egyszer másoltam be a lap tetejére és az aljára). <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Birthday database</title> </head> <body> // create_database.php <?php $con = mysql_connect('localhost','username','password'); if(!$con) { die('Could not connect: ' . mysql_error()); } if (mysql_query( "CREATE DATABASE birthday",$con)) {echo "Database created"; } else { echo "Error creating database: " . mysql_error(); } mysql_close($con); ?> // create_table.php <?php $con = mysql_connect('localhost','username','password'); if (!$con) {die('Could not connect: ' .mysql_error());} mysql_select_db('birthday', $con); $sql = "CREATE TABLE birthdays ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name VARCHAR(30), birthday VARCHAR(7))"; mysql_query($sql,$con); print "Table created"; mysql_close($con); ?> // database_interface.php <div> <h3>Birthdays Interface</h3> <form method="post" action="insert_form.php"><input type="submit" value="Insert Record" /></form> <form method="post" action="display_records.php"><input type="submit" value="Display Records" /></form> <form method="post" action="update_form.php"><input type="submit" value="Update Records" /></form> <form method="post" action="delete_form.php"><input type="submit" value="Delete Record" /></form> </div> // insert_form.php <div> <h3>Insert Record</h3> <form method="post" action="insert_record.php"> <?php print "<p>Enter name: <input type='text' name='name' size='20' /></p>"; print "<p>Enter Birthday: <input type='text' name='birthday' size='10' /></p>"; print "<p><input type='submit' value='Submit' /> <input type='reset' /></p>"; ?> </form> <p><a href="dbase_interface.php" title="view database">Database interface</a></p> </div> // insert_record.php <?php $name=$_POST['name']; $birthday=$_POST['birthday']; $con = mysql_connect('localhost','username','password'); if (!$con) {die('Could not connect: ' .mysql_error());} mysql_select_db('birthday', $con); $result = mysql_query("INSERT INTO birthdays (name, birthday) VALUES ('$name','$birthday')") or die("Insert Error: ".mysql_error()); print "Record added\n"; mysql_close($con); ?> <div> <form method="post" action="insert_form.php"><input type="submit" value="Insert Another Record" /></form> <form method="post" action="dbase_interface.php"><input type="submit" value="Dbase Interface" /></form> </div> // display_records.php <?php $con = mysql_connect('localhost','username','password'); if (!$con) {die('Could not connect: ' .mysql_error());} mysql_select_db('birthday', $con); $result = mysql_query( "SELECT * FROM birthdays" ) or die("SELECT Error: ".mysql_error()); $num_rows = mysql_num_rows($result); print "<p>There are $num_rows records.</p>"; print "<table width='200' border='1' summary='records'>\n"; while ($get_info = mysql_fetch_row($result)){ print "<tr>\n"; foreach ($get_info as $field) print "\t<td>$field</td>\n"; print "</tr>\n"; } print "</table>\n"; mysql_close($con); ?> <form method="post" action="dbase_interface.php"><input type="submit" value="Dbase Interface" /></form> // delete_form.php <?php $con = mysql_connect('localhost','username','password'); if (!$con) {die('Could not connect: ' .mysql_error());} mysql_select_db('birthday', $con); $result = mysql_query( "SELECT * FROM birthdays" ) or die("SELECT Error: ".mysql_error()); $num_rows = mysql_num_rows($result); print "<p>There are $num_rows records.</p>"; print "<table width='200' border='1' summary='records'>\n"; while ($get_info = mysql_fetch_row($result)){ print "<tr>\n"; foreach ($get_info as $field) print "\t<td>$field</td>\n"; print "</tr>\n"; } print "</table>\n"; mysql_close($con); ?> <div> <form method="post" action="delete_record.php"> <p>Enter Id Number to Delete: <input type="text" name="id" size="5" /></p> <p><input type="submit" value="Submit" /> <input type="reset" /></p> </form> <p><a href="dbase_interface.php" title="view database">Database interface</a></p> </div> // delete_record.php <?php $id=$_POST['id']; $con = mysql_connect('localhost','username','password'); if (!$con) {die('Could not connect: ' .mysql_error());} mysql_select_db('birthday', $con); mysql_query("DELETE FROM birthdays WHERE id=$id") or die("Delete Error: ".mysql_error()); print "Record Removed.\n"; mysql_close($con); ?> <div> <form method="post" action="delete_form.php"><input type="submit" value="Delete Another" /></form> <form method="post" action="dbase_interface.php"><input type="submit" value="DBase Interface" /></form> </div> // update_form.php <?php $con = mysql_connect('localhost','username','password'); if (!$con) {die('Could not connect: ' .mysql_error());} mysql_select_db('birthday', $con); $result = mysql_query( "SELECT * FROM birthdays" ) or die("SELECT Error: ".mysql_error()); $num_rows = mysql_num_rows($result); print "<p>There are $num_rows records.</p>"; print "<table width='200' border='1' summary='records'>\n"; while ($get_info = mysql_fetch_row($result)){ print "<tr>\n"; foreach ($get_info as $field) print "\t<td>$field</td>\n"; print "</tr>\n"; } print "</table>\n"; mysql_close($con); ?> <div> <form method="post" action="change_form.php"> <p>Enter Id Number to Edit: <input type="text" name="id" size="5" /></p> <p><input type="submit" value="Submit" /> <input type="reset" /></p> </form> <p><a href="dbase_interface.php" title="view database">Database interface</a></p> </div> // change_form.php <?php $id=$_POST['id']; $con = mysql_connect('localhost','username','password'); if (!$con) {die('Could not connect: ' .mysql_error());} mysql_select_db('birthday', $con); $result = mysql_query( "SELECT * FROM birthdays WHERE id='$id'" ) or die("SELECT Error: ".mysql_error()); $num = mysql_num_rows($result); $i=0; while ($i < $num) { $name=mysql_result($result,$i,'name'); $birthday=mysql_result($result,$i,'birthday'); ++$i; } mysql_close($con); ?> <div> <h3>Edit and Submit</h3> <form action="change_record.php" method="post"> <p><input type="hidden" name="ud_id" value="<?php echo $id ?>" /></p> <p>Name: <input type="text" name="ud_name" value="<?php echo $name ?>" /></p> <p>Birthday: <input type="text" name="ud_birthday" value="<?php echo $birthday ?>" /></p> <p><input type="submit" value="Update" /></p> </form> <p><a href="dbase_interface.php" title="view database">Database interface</a></p> </div> // change_record.php <?php $ud_id=$_POST['ud_id']; $ud_name=$_POST['ud_name']; $ud_birthday=$_POST['ud_birthday']; $con = mysql_connect('localhost','username','password'); if (!$con) {die('Could not connect: ' .mysql_error());} mysql_select_db('birthday', $con); $sql = "UPDATE birthdays SET name = $ud_name, birthday = $ud_birthday WHERE id = $ud_id or die('Update Error: '.mysql_error())"; mysql_query($sql,$con); echo "Record Updated.\n"; mysql_close($con); ?> <div> <form method="post" action="update_form.php"><input type="submit" value="Change Another" /></form> <form method="post" action="dbase_interface.php"><input type="submit" value="Dbase Interface" /></form> </div> </body> </html>
arpsoft Posted August 8, 2009 Posted August 8, 2009 Ez itt elég kaotikus: $sql = "UPDATE birthdays SET name = $ud_name, birthday = $ud_birthday WHERE id = $ud_id or die('Update Error: '.mysql_error())"; mysql_query($sql,$con); Inkább így: mysql_query("UPDATE birthdays SET name = $ud_name, birthday = $ud_birthday WHERE id = $ud_id") or die('Update Error: '.mysql_error());
enjoys1ng1ng Posted August 8, 2009 Posted August 8, 2009 Átírtam ezt a részt, de továbbra is ezt a hibaüzenetet kapom: Update Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Feb WHERE id = 2' at line 2
enjoys1ng1ng Posted August 8, 2009 Posted August 8, 2009 Mûködik!!! Két dolgot kellett megváltoztatnom Hála az egyikért @arpsoft-nak: a dátum rosszul volt beállítva, illetve egyáltalán nem dátumnak volt beállítva a mysql táblázatban. Köszönöm az ötletet. Ezután azt a hibaüzenetet kaptam, hogy "Unknown column in 'field list' " - ami elvezetett oda, hogy a "change_record.php"-ban hiányoztak a macskakörmök, tehát az aktuális rész így néz ki helyesen: // change_record.php <?php $ud_id=$_POST['ud_id']; $ud_name=$_POST['ud_name']; $ud_birthday=$_POST['ud_birthday']; $con = mysql_connect('localhost','username','password'); if (!$con) {die('Could not connect: ' .mysql_error());} mysql_select_db('birthday', $con); mysql_query("UPDATE birthdays SET name = '$ud_name', birthday = '$ud_birthday' WHERE id = '$ud_id'") or die('Update Error: '.mysql_error()); echo "Record Updated.\n"; mysql_close($con); ?> <div> <form method="post" action="update_form.php"><input type="submit" value="Change Another" /></form> <form method="post" action="dbase_interface.php"><input type="submit" value="Dbase Interface" /></form> </div> Na, két "apró" hiba amivel két hétig küszködtem éjszakánként... lehet továbblépni a php lépcsõkön.... @arpsoft! Nagyon köszönöm, hogy foglalkoztál ezzel!
Kiskalóz Posted September 7, 2009 Posted September 7, 2009 Az mitől lehet, hogy duplán látom a session adatokat? Kiíratom a print_r-t és ilyet kapok: Array ( [nick] => Array ( [0] => 1 [id] => 1 [1] => gabor [username] => gabor [2] => 956285b297e19e8e3b40113c11c21317 [password] => 956285b297e19e8e3b40113c11c21317 [4] => e10adc3949ba59abbe56e057f20f883e [bizt_kod] => e10adc3949ba59abbe56e057f20f883e [5] => Gábor [admin_nev] => Gábor [6] => igen [aktiv] => igen [7] => 1252169936 [last_datum] => 1252169936 ) ) (A számok azért nem stimmelnek mert kiszedtem belőle adatokat)
Kiskalóz Posted September 7, 2009 Posted September 7, 2009 Adatbázisból egy sima beléptetés után. function loginuser($nev,$jelszo){ $nev=mysql_real_escape_string($nev); // a megadott név $log_password=mysql_real_escape_string($jelszo); $jelszo=md5($jelszo); $datum=time(); //jelenlegi idõ $eh=dbQuery("select * from admin where username='".$nev."' and password='".$jelszo."' AND aktiv='igen' "); if($sor=mysql_fetch_array($eh)){ session_register('nick'); $_SESSION['nick']=$sor; $user_id=$sor['id']; $dbuser=dbQuery("Update admin set last_datum='".time()."', ip='".$ip."' Where id='".$user_id."' "); return true; }else{ return false; } }
arpsoft Posted September 7, 2009 Posted September 7, 2009 A ludas a mysql_fetch_array. Definíciója szerint: array mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] ) alapesetben dupla tömböt ad vissza, asszociatív és indexelt elemekkel. Ezért látod duplán. Forrás
Kiskalóz Posted September 7, 2009 Posted September 7, 2009 Jogos... mysql_fetch_assoc -al hibátlan. köszönöm
Dreaman Posted September 17, 2009 Posted September 17, 2009 Sziasztok! Ezúttal egy kezdõ kérdéssel fordulok hozzátok. A célkitûzésem: adatbázisból lekért adatokból egy txt fájl létrehozása, ami a felhasználó böngészõjétõl függõen megjelenik egy ablakban, vagy letöltésre kínálkozik. Engem "mindössze" ezen fájl (?) generálásának menete érdekelne, az adatok "beleírása" remélhetõen nem lesz gond. (Néhány példát már találtam, de mind abból indultak ki,hogy szerveroldalon tárolt txt-be írják az adatokat, majd esetleg kiírják a tartalmát, de nekem nem erre van szükségem.) Tehát én olyat szeretnék, hogy amíg a felhasználó nem kattint az adott linkre, addig ez a fájl nem létezik, hanem abban a pillanatban készül és kínálkozik fel letöltésre. Ha nagyon muszáj, ajaxos megoldás is jöhet.. Ha esetleg linket, vagy csak tippeket tudnátok adni, annak is nagyon örülnék. Remélem értitek mire gondoltam, elõre is köszönök minden segítséget!
Dreaman Posted September 19, 2009 Posted September 19, 2009 Köszönöm, de sajnos nem ilyen megoldásra gondoltam. Csak ismételni tudom magam, olyanra gondolok, hogy mondjuk egy gombnyomásra készüljön el egy "fájl", de annak ne legyen nyoma a szerveren, egyszerûen csak akkor generálja, írja bele a sorokat, majd küldje el a felhasználó felé. Tehát az a megoldás, hogy létrehozzuk a szokásos fopen paranccsal, belepakoljuk a változókat, stb. nem jó. "Mivel ez dinamikus mûvelet" (?), ezért gondoltam, hogy lehet ehhez ajax-ra lesz szükségem, de talán még így is php topikba tartozik inkább... sajnos nem tudom szakszerûen és pontosabban kifejezni magam, de ha tudnám, valószínû segítségre sem lenne szükségem. Szóval továbbra is nagyon hálás lennék mindennemû segítségért. Köszönöm!
payskin Posted September 20, 2009 Posted September 20, 2009 Ez egy picit "kibelezett" részlet a webáruházunk egyik programjából, ami az admin felületen kijelölt rendelésekből CSV fájlt generál. Az elején a tényleges kódot kihagytam, egyrészt biztonsági okokból, másrészt csak megzavarna, mert a bolt saját adatbázis-kezelővel rendelkezik. A lényeg, hogy a megyek sorban a rendeléseken (while...) az egyes mezőket (mindenféle ellenőrzés és egyéb mókák után) egy $o tömbbe pakolom, a feldolgozás végén pedig összerakom őket egy sorba ;-vel elválasztva (implode), és az egészet hozzácsapom a $csv-hez, ez lesz a fájl tartalma. Amikor kész, akkor kidobom a böngészőnek a csv tartalmát, de úgy, ÉS EZ A LÉNYEG, hogy előtte a headerben nem HTML fájlt, hanem alkalmazást állítok be. Ettől a böngésző letöltésre kínálja fel a csv-t, mintha bármely másik weboldalon próbálnál letölteni egy állományt. Egy fontos szabály van: HEADER kiküldése előtt semmi nem kerülhet a kimenetre (képernyőre/weboldalba). Erre figyelj oda, egy kicsit komplikálja a gombnyomásra letöltés dolgot (a gombnyomás után újra kell tölteni a PHP fájlt). Illetve nézd meg a header leírását a php doksiban, ott is van elég sok példa. <?php define ("CRLF", "\r\n"); if (isset($_REQUEST['oid'])) { $oid = (int)$_REQUEST['oid']; // LEKÉRDEZÉS // EBBE GYŰJTJÜK A LEENDŐ FÁJL TARTALMÁT $csv = ''; // A LEKÉRDEZETT ADATOK FELDOLGOZÁSA while ... { $o = array(); // CÍMZETT CÉGNÉV $o['A'] = ... // CÍMZETT NEVE $o['B'] = ... . . . // ÖSSZERAKOM A TÖMBÖT EGY SORBA $csv .= implode(';', $o) . CRLF; } // KIDOBJUK A CSV-T A BÖNGÉSZŐNEK header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=SPR_diszpo.csv"); header("Pragma: no-cache"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); echo $csv; } else { // HIBAÜZENET VAGY VALAMI } ?>
Dreaman Posted September 22, 2009 Posted September 22, 2009 Ez az, erre gondoltam! Nagyon szépen köszönöm!
Dreaman Posted October 1, 2009 Posted October 1, 2009 Üdv ismét! A kód kész, működik is...csak egy apró gondom van: a készített txt-t jegyzettömbbel megnyitva elvesznek a sortörések (kis kockák lesznek helyette). Ugyanez mondjuk Total Commander beépített nézőkével tökéletes. Az alábbi módon próbáltam : $txt = "Lementett fájl első sora\nAztán a második\n\nÉs így tovább..."; Mi a titok nyitja? Szerk.: közben magam is megtaláltam a megoldást. Hátha valakinek ilyen gondja lesz, beírom ide is: If you are writing data to a txt file on a windows system and need a line break. use \r\n . This will write hex OD OA. i.e. $batch_data= "some data... \r\n"; fwrite($fbatch,$batch_data); The is the equivalent of opening a txt file in notepad pressing enter and the end of the line and saving it. Forrás: http://hu.php.net/fwrite Magyarul \r\n-t kell használni... Üdv mindenkinek!
payskin Posted October 2, 2009 Posted October 2, 2009 Igen, sajnos a Jegyzettömb akkora kretén, hogy 20 év alatt sem sikerült elsajátítania a sima \n végződésű sorok helyes megjelenítését. Más kérdés, hogy helyes-e egyáltalán az a megjelenítés, ahol a Line Feedre (\n) a következő sor elejéről folytatódik a szöveg? Szerintem nem.
arpsoft Posted October 2, 2009 Posted October 2, 2009 Bizony nem, mivel alapvetően nyomtató karakterek és ott a \n a papírt vitte egy sorral feljebb, míg a fej helyben maradt, a \r pedig visszavitte a fejet a papír elejére, míg a papír nem mozdult.
payskin Posted October 3, 2009 Posted October 3, 2009 (off) Gondolom a *nix-es emberkék helytakarékossági okokból vezették be, hogy elég csak a LF. Az igaz, hogy a Macintoshokon meg csak CR van a sorok végén? Csak azért, hogy különbözzenek? Mert ennek aztán végképp semmi értelme...
headcoach Posted October 5, 2009 Posted October 5, 2009 Sziasztok! Van egy ilyenem: <html> <body> <form action="" method="post"> Sorok szama: <input type="text" name="sorok_szama"> <input type="submit" value="elküld"> </form> <?php $szam = $_POST["sorok_szama"]; echo $szam; ?> </body> </html> Nos ez itt egy részlet, és az a lényeg, hogy sokszor úgy kell kitöltenem, hogy a Sorok szama mezõbe be kell írnom egy számsort. pl.:26-tól 132-ig, és innen nincs szükségem körülbelül tíz adatra. Ezt szeretném gépiesíteni, hogy idõt spóroljak meg. Gondolom kellene valamilyen ismétlõdõ pl.: for ciklus, ez eddig nem gond. Mondjuk egy ciklusba berakom a kívánt éréket egy változónak. Ez meg van, és utána kezdõdik a gond, hogyan tudom ezt a változó értéket bevinni a sorok szama mezõbe, és elküldeni... Kipróbáltam egy java scriptet, ahol a form-nal adtam egy id="test" értéket, és így próbáltam a klikk-kelést kikerülni, de nem ment. <script type="text/javascript"> document.getElementById("test").submit(); </script> Várom tippeket, elõre is köszönöm. hC SZERKESZTVE: A küldést sikerült megoldani így: <script language="JavaScript" type="text/javascript"> document.test.submit(); </script> Vicces túlkombináltam, és persze a form-ban nem az id értéket, hanem a name="test" -et kellett megadni a helyes mûködéshez. Ám azt még mindig nem tudom hogyan adjam át az inputba az értéket. Arra gondoltam hogy a value="<?php És ide irom be, de a különbözõ kapcsos zárójelek miatt nem nagyon megy...?>" Várom a tippeket. hC SZERKESZTVE: Bocs mindenkitõl a zaklatásért. Sikerült végül. Mindegy. Lényeg a for ciklus aktuális értékét beraktam egy változóba, és ezt simán be az inputba így: value="echo $valtozo". Ekkor nem volt gond a zárójelekkel. Még azt kell megoldani, hogy egymás alá listázzon és jó helyre menjen vissza a ciklus elejére, de ez már részletkérdés... Azért thx hC
payskin Posted October 6, 2009 Posted October 6, 2009 Egyetlen szót nem értettem az egészbõl, de az tuti biztos, hogy a <script> tagnek NINCS language attribútuma! Sürgõsen elfelejteni!
Dreaman Posted October 10, 2009 Posted October 10, 2009 ... Az megvan, hogy ha a switch-case szerkezetben nem raksz breaket a case feltétel1 végére, akkor a végrehajtás automatikusan folytatódik a case feltétel2-n, akkor is, ha a switchben levő változó értéke nem felel meg feltétel2-nek? Sziasztok! Ilyen gondba kerültem én is. Nincs valami épkézláb mód arra a problémára, hogy swich-csel végignyálazni egy rakás (több, mint 40) feltételt, és ha a feltétel igaz, akkor hajtson végre valamit (de csak akkor)? Tehát az összes ágat végig kellene vizsgálni (tehát break; kilőve), és ha valamely ág-ra teljesül a feltétel, akkor se rohanjon végig ész nélkül a többi ágon, és futassa a parancsokat, még ha nem is teljesül rá a swich értéke.. Van erre valami okos trükk? Vagy marad a jól bevált if módszer? Előre is köszi!
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