Jump to content
GSForum - Segélyvonal

PHP kérdésem van


Recommended Posts

Posted

Nekem sem jut eszembe jobb megoldás.

Posted

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.

Posted

Így még talán elegánsabb is. ;) (Habár egyszerûbbnek nem egyszerûbb. :) )

  • 2 weeks later...
enjoys1ng1ng
Posted

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>

Posted

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

Á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
Posted

Milyen formátumban van a dátum változód?

enjoys1ng1ng
Posted

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!

  • 5 weeks later...
Posted

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)

Posted

Hogyan kerülnek a tömbbe az adatok?

Posted

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;
    }
    }        

Posted

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

Posted

Jogos...

 

mysql_fetch_assoc -al hibátlan.

 

köszönöm :)

 

  • 2 weeks later...
Posted

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!

Posted

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!

Posted

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
}
?>

Posted
:oké: Ez az, erre gondoltam! Nagyon szépen köszönöm! :)
  • 2 weeks later...
Posted

Ü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!

Posted

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.

Posted

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.

Posted

(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...

Posted

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> 

 

:D 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 8)

hC

Posted

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!

Posted
...

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!

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...