Hirdetés
Aktív témák
-
fordfairlane
veterán
válasz
fordfairlane
#1482
üzenetére
Csak sikerült elrontanom. A kommenteket kiszedtem, hogy rövidebb legyen.
<?
if($_SERVER["REQUEST_METHOD"] == "POST") {
if(!$_POST["nev"]) {
$error["nev"] = "A név üres";
} else {
$res = mysql_query('SELECT COUNT(*) FROM felhasznalok WHERE nev="'.mysql_escape_string($_POST["nev"]).'"');
if($res && mysql_num_rows($res)) {
list($no) = mysql_fetch_row($res);
if($no) $error["nev"] = "Ez a felhasználónév már foglalt!";
}
}
if(!$error) {
$query = 'INSERT INTO felhasznalok SET ';
$query .= 'nev="'.mysql_escape_string($_POST["nev"].'"';
mysql_query($query);
header("Location:".$_SERVER["SCRIPT_NAME"]."?ok=1");
exit;
}
}
if($_GET["ok"]) {
include("fejlec.php");
?><p>Minden oké</p><?
include("lablec.php");
exit;
}
else {
include("fejlec.php");
?>
<form method="post">
<input type="text" name="nev" value="<?=htmlspecialchars($_POST["nev"])?>" /> <?=$error["nev"]?><br />
<input type="submit" value="Regisztráció" />
</form>
<?
include("lablec.php");
?>A fájl elejéről hiányzik az adatbázishoz kapcsolódás(mysql_connect), azt lehet az első if($_SERVER[]...) után is, mert csak abban a blokkban vannak adatbázis műveletek.
-
fordfairlane
veterán
Mutatok egy egymezős skeleton modellt, én így csinálnám:
<?
if($_SERVER["REQUEST_METHOD"] == "POST") {
if(!$_POST["nev"]) {
$error["nev"] = "A név üres";
} else {
$res = mysql_query('SELECT COUNT(*) FROM felhasznalok WHERE nev="'.mysql_escape_string($_POST["nev"]).'"');
if($res && mysql_num_rows($res)) {
list($no) = mysql_fetch_row($res);
if($no) $error["nev"] = "Ez a felhasználónév már foglalt!";
}
}
// további ellenőrzések
if(!$error) {
$query = 'INSERT INTO felhasznalok SET ';
$query .= 'nev="'.mysql_escape_string($_POST["nev"].'"';
// további mezők queryhez fűzése
mysql_query($query);
header("Location:".$_SERVER["SCRIPT_NAME"]."?ok=1");
exit;
// ez az átirányítás azért kell, hogyha az oké üzenetre refresht nyom,
// ne kapjon hibaüzenetet, miszerint ez a felhasználónév már foglalt.
// felhasználók lassú reagálású oldalnál hajlamosak refreshelni
}
} elseif($_GET["ok"]) {
include("fejlec.php");
?><p>Minden oké</p><?
include("lablec.php");
} else {
include("fejlec.php");
?>
<form method="post">
<input type="text" name="nev" value="<?=htmlspecialchars($_POST["nev"])?>" /> <?=$error["nev"]?><br />
<input type="submit" value="Regisztráció" />
</form>
<?
include("lablec.php");
}
?>Remélem nem maradt ki semmi, nem próbáltam ki. 19 mezőnél persze nem biztos, hogy célszerű így ömlesztve, de a vezérlési szerkezetet ebben a formában szoktam csinálni. Így egy oldalban benne van:
1. form kirakása, hiba esetén a mező tartalma megmarad, és a mező mellett megjelenik a hibaüzenet.
2. Ha minden oké, kirakja az oké szöveget, meg ami kell.
3. refresh esetén nem produkál mást, mint első betöltődésnél, ez a sikeres submit után okozhat problémát, a felhasználó megzavarodhat a nem várt üzenetektől.Fejlécet és láblécet külön fájlból szedi be, ez ízlés szerint változtatható (include("fejlec.php") és include("lablec.php"));
-
fordfairlane
veterán
Ezek szerint ajax+post nem is működhet egyszerre?
Működhet, de az nem világos, hogy miért az ajaxot akarod használni a felhasználónév ellenőrzésére? Nem mondom, hogy olyan bonyolult lenne, de nem is egyszerű dolog, különösen neked nem, hiszen most kezdtél el foglalkozni a PHP-vel. Ahhoz, hogy bánni tudj az ilyen összetettebb dolgokkal, sok tapasztalat kell, jobban át kell látnod, hogyan zajlik a böngésző - szerver interakció, és nem csak szerve-, hanem kliensoldali programozásra is szükséged lesz.
Szerintem első körben a form - submit után hajtsd végre a felhasználónév foglaltságának ellenőrzését, és ha foglalt, jelenítsd meg a formot a begépelt adatokkal, és a hiba üzenettel. Erre amúgy is szükséged lesz, hiszen lehet más probléma is a felvitt adatokkal, pl. nem töltött ki kötelezően kitöltendő mezőket stb... Ez egy klasszikus form - validálás feladat, ha kell, segítek a részletekben, de a haladó technikát (AJAX) inkább csak akkor ajánlom, ha már ezek az alapvető dolgok rutinszerűen mennek.
-
fordfairlane
veterán
válasz
Medcomp
#1452
üzenetére
Az adattáblák módosítását az adatbáziskezelővel kell csinálni, ez független dolog a PHP-tól. Ha mysql-t használsz, akkor erre több lehetőség is van, vagy használod a mysql konzolt vagy valami adatbáziskezelő frontendet. Sqlyog, phpmyadmin stb, stb... Mivel nem írtál semmi konkrét dolgot, ezért nehéz konkrétan válaszolni is, hogy neked ebben a helyzetben pontosan hol és mit kell átírnod. Nem tudni például, hogy miféle program az, amibe bele kell nyúlni. Egy összetett programban, amit valaki más készített, ha megváltoztatsz egy programrészt, nem várt problémákat szülhet.
Mysql konzolban adattábla módosítására az ALTER TABLE sql paranccsal lehetséges. Az pedig , hogy a PHP-ban hol az a lekérdezés, ami listáz, azt csak te tudod megkeresni.
Vagy esetleg tudnál valami linket adni, ahol utánnanézhetnék?
mysql help, php help, php tutorialok, stb, stb...
-
fordfairlane
veterán
Ez a sor szerintem mindenképp hibás:
$eredmeny = mysql_query( "SELECT * FROM fotabla WHERE felhnev = $sz ");
Kell valami $sz köré, ha a felhnev oszlop szöveg (varchar, text) típusú:
$eredmeny = mysql_query( "SELECT * FROM fotabla WHERE felhnev = '$sz' ");
vagy
$eredmeny = mysql_query( 'SELECT * FROM fotabla WHERE felhnev = "'.$sz.'"');
Az más téma, hogy van-e olyan felhnev érték, amire a query találatot ad. Nálad nem az a gond, hogy nincs találat, hanem hogy hibás a query.
-
fordfairlane
veterán
Az előtte levő lekérdezés valami oknál fogva nem ad ereményt, így $eredmeny változó nem mysql result set típusú lesz. Lehet, hogy $sz változó üres, így a query string nem lesz helyes szintaktikailag. Illetve most nézem, bizonyára felhasználónév lesz benne. Akkor ez így nem jó, a queryben idézőjelek közé kell kerüljön a string.
-
fordfairlane
veterán
Ezzel mindent lehet, új táblát létrehozni, meglévőt átvariálni, tartalmat szerkeszteni, keresni benne stb... de minimális relációs adatbázis ismeret, pl. MS Access nem árt hozzá. Kifejezetten Excel stílusú grides szerkesztőt nem ismerek. Én a SQLyogot használom [link], de ez nem webes, hanem telepíthető Win32 alkalmazás, és ez sem olyan, mint egy Excel.
-
fordfairlane
veterán
Ilyenre gondoltál? Phpmyadmin
-
fordfairlane
veterán
-
fordfairlane
veterán
CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date);Ez egy mysql query, nem php parancs, ennek megfelelően kell kezelni:
mysql_query("CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date);"); -
fordfairlane
veterán
Ezt a könyvet többen is dicsérték, én nem olvastam:
Aktív témák
- GL.iNet Flint 2 (GL-MT6000) router
- HiFi műszaki szemmel - sztereó hangrendszerek
- Xbox Series X|S
- Kutya topik
- Abarth, Alfa Romeo, Fiat, Lancia topik
- Bemutatkozott a Poco X7 és X7 Pro
- Gumi és felni topik
- exHWSW - Értünk mindenhez IS
- Az AI miatt drágulnak a mobilok is
- Kompakt vízhűtés
- További aktív témák...
- DELL VOSTRO 3490 (Core i5--10210U / 16GB / 256GB / 14"FHD / HUN BILL/ Win11) 27% ÁFA
- Xiaomi Redmi Note 13 8/256GB fekete garanciával
- Xiaomi 15T Pro 12/512gb - Makulátlan, Euronics számla, garancia, akár beszámítással
- iPhone 15 Pro Max Spacegray 100% akkumulátorral!
- ÚJ 32GB DDR4 3200AA Laptop memória
- LÉZEREZÉS! külföldi billentyűzet magyarra kb. 20-30p alatt!
- BESZÁMÍTÁS! ASRock B550M R7 5700X 32GB DDR4 1TB SSD RTX 4070 Super 12GB GameMax Aero Mini ECO 650W
- HIBÁTLAN iPhone 13 mini 128GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3050, 100% Akkumulátor
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max/
- Bomba ár! Dell Vostro 3550 - i3-2310M I 4GB I 250GB I DVDRW I 15,6" HD I HDMI I Cam I Garancia!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest

Lekérdezés és adattábla módosítása.

