Adott sor adataival való munkálatok
Udv!
Az adatbazis.php-ben van egy lista a konyvekrol és minden egyes konyv mellett egy gomb "visszahozás". Hogy lehetne kivitelezni azt, hogy az adatbazis.php-ban a gombra kattintva az abban a sorban levo értékeket berakja a kolcsonzes táblába?
A lenti kóddal annyi a gondom, hogy hibát ír ki erre a részre '$sor['cim']' ...). Valahogy úgy kéne megoldani, hogy jegyezze meg az adatbázis.php-ben a sorban tárolt értékeket mikozben átirányítódik a visszahozas.php-ra.
visszahozas.phpKoszi szépen elore is
■ Az adatbazis.php-ben van egy lista a konyvekrol és minden egyes konyv mellett egy gomb "visszahozás". Hogy lehetne kivitelezni azt, hogy az adatbazis.php-ban a gombra kattintva az abban a sorban levo értékeket berakja a kolcsonzes táblába?
A lenti kóddal annyi a gondom, hogy hibát ír ki erre a részre '$sor['cim']' ...). Valahogy úgy kéne megoldani, hogy jegyezze meg az adatbázis.php-ben a sorban tárolt értékeket mikozben átirányítódik a visszahozas.php-ra.
visszahozas.php
$parancs = ("SELECT * adatbazis") or die(mysql_error());
$eredmeny=mysql_query( $parancs, $kapcsolat ) or die (mysql_error());
mysql_query("DELETE FROM `munka`.`hozzaadas` WHERE `hozzaadas`.`iro` = '' AND `hozzaadas`.`cim` = '' AND `hozzaadas`.`kategoria` = '' AND `hozzaadas`.`polc` = 0 AND `hozzaadas`.`regal` = 0 AND `hozzaadas`.`tulaj` = ''");
while (@$sor = mysql_fetch_array( $eredmeny ) );
mysql_query("INSERT INTO kolcsonzes SET cim = '$sor['cim']',
iro= '$sor['iro']',
tulaj= '$sor['tulaj']',
kategoria = '$sor['kategoria']',
polc= '$sor['polc']',
kolcsonozheto= '$sor['regal']',
regal= '$sor['kolcsonozheto']'") or die(mysql_error());
header('Location: adatbazis.php');
Mivel a mellékelt kódból
Az említett sorra azért dob hibát, mert nem megfelelően hivatkozol a stringből a változóra. Vonatkozó olvasmány a PHP manualból.
De ezzel nem is lenne gondod jelen esetben, ha a jelenleg elfogadott (és támogatott) adatbázis-kezelési kiterjesztéseket és módszereket használnád (ha van rá lehetőséged). Mysql kiterjesztés helyett minimum mysqli és prepared statements, vagy a praktikusabb PDO.
+1
Mysqli vagy PDO. És csakis prepared statements.
Nos a kódban minden benne van
A hivatkozásom tokéletes, a hiba azért merult fel, mivel a beviteli mezos rész nem ezen a php-n van, hanem azon, ahonnan le akarom kéretni az adatokat...
Koszonom az építo jellegu tanácsot.
bamegakapa
Olyan helyzetben vagyok, hogy 2 hete kezdtem el php-val foglalkozni, úgyhogy nekem egyelore ehhez a munkához a mysql tokéletesen megfelel, de koszonom a figyelmeztetést. Komolyabb programhoz már szélesebb korben szeretnék dolgozni-
Pepita
A zárójel jól van ott ahol van.
Aposztrofhibáról szó sincs.
A 4. soron nem esik semmiylen változtatás, az hogy neked nem átlátható nem az én gondom. Nekem tokéletesen megfelel és tisztában vagyok a saját programrészeimmel.
Vitatkoznék. Mivel két hete
Persze a döntést te hozod meg - de még nyúlfarknyi projekthez sem érdemes mysql_ függvényeket használni, főleg ha most tanulod az egészet. Másoknál nehezebb a dolog, mert már berögzült, nehezebb váltani, de te még szerencsés helyzetben vagy, használd ki!
Ritka eset: +1
Viszont van egy-két olyan (pl. backup) szolgáltatása a mysql-nek, ami utódainak nincs. Ezzel együtt én is a mysqli-t vagy a pdo-t javaslom, de lehet, hogy berögződés miatt, az escape-elést nem bízom csak prepared statament-ekre.
Tanácsok
A változó hivatkozásod nem tökéletes, mert egy
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
"-hez hasonló hibát generál. De ha olvastad volna a PHP kézikönyv vonatkozó, linkelt részét, akkor nem kétkednél ebben.Ez a két mondat valahogy üti egymást:
Arról nem is beszélve, hogy a beszúrt kódban nem látok hivatkozást "beviteli mező"-re.
Amennyiben ez egy ténylegesen hosszú életű munka (bár kéthetes php próbálgatással remélhetőleg nem), és a későbbiekben frissítenek egy olyan php verzióra, ami már nem fogja támogatni a
mysql_*
kiterjesztést, akkor az ügyfél/felhasználó nem fogja olyan tökéletesen érezni magát.Hidd el -lásd bamegakapa megjegyzéseit-, csak magadnak spórolsz időt, ha minél előbb áttérsz a
mysqli
vagyPDO
használatára. Nem viccből mondjuk.Vajon a fél, egy vagy több évvel későbbi önmagad ugyanilyen tökéletesen át fogja látni? (Segítek; az általános tapasztalat az, hogy nem. Ezért célszerű minél olvashatóbb és átláthatóbb kódot írni. Arról nem is beszélve, hogy nem lehetsz benne biztos, hogy csak te fogod olvasni a kódodat. Például felteszel egy kérdést egy fórumban, és azért nem fog senki sem válaszolni, mert értelmezhetetlen a kódod, és jobb dolga is van a fórumozóknak, mint más össze-vissza kódját kibogozni. A legalapvetőbb tisztelet jele, hogy jól formázott kódot mellékelsz a kérdésedhez.)
Utolsó tanácsként megjegyezném, nem szégyen belátni, hogy tévedett az ember. ;) Vagy ahogy a szólás tartja:
Hát, ahogy gondolod
Az, hogy te kijelented: a kódod tökéletes - hát tudod az informatikában nem így mennek a dolgok. Esetleg politikai pálya?... :)
Egy biztos, míg ezen a rossz hozzáállásodon nem változtatsz, én nemigen segítek neked többet, de azt hiszem, más sem.
Hogy én is hozzak egy szólást:
Az első sorban
or die(mysql_error())
rész, mivel egyszerű string értéket adsz csak egy változónak.Az aposztrófhibát már tudod, ezen lehet segíteni úgy is, hogy "."-okkal összefűzött querystringet csinálsz, így jobban láthatóan bele tudod írni a jelenleg hiányzó escape-eléseket is.
A 4. sort is tördelhetnéd szebben, nem árt az olvasható kód, mikor hibát kell keresni.
Ha megfelelően automatizálod magadnak az escape-elést, akkor nem muszáj mysgli-t vagy pdo-t használni, de ez az automatizálás nem kis feladat, úgyhogy én is a driverváltás mellett vagyok.