ugrás a tartalomhoz

mySQL insert form probléma

walko · 2008. Jún. 7. (Szo), 19.09
Üdv mindenkinek!

Abban szeretném a segítségetek kérni, hogy készítek egy from-t phpben, ami egy mySQL adabázishoz ad hozzá értékeket, amelyeket a felhasználó visz be.
Az adatbázis kapcsolat csodálatosan létrejön, a kód azt írja hogy sikeres a rögzítés, mégsem találom a bevitt adatokat az adatbázisban.
A kódrészelet, ami bevitelt végezné:

$tipus = $_POST["tipus"];
$modell = $_POST["modell"];
$evjarat = $_POST["evjarat"];
mysql_query("INSERT INTO 'autok' (tipus, modell, evjarat) VALUES ('$tipus', '$modell', '$evjarat')");
echo "Sikeres rögzítés!";
Válaszaitokat előre is köszönöm.
 
1

Több info

tolmi · 2008. Jún. 7. (Szo), 20.24
Ennél azért több infora van szükség ahhoz hogy segíteni tudjon valaki.
Kellene a tábla definíciója, hogy van-e valamilyen kényszer (constraint) az autok táblán legalább.

Az hogy sikeres rögzítés mindíg ki fogja írni, még akkor is ha nem is sikerült (kivéve persze ha a PHP úgy van beállítva, hogy kezelje végzetes hibaként a sikertelen adatbázisműveletet). Semmilyen ellenőrzést nem csinálsz! Próbáld talán így:

if (!($res = mysql_query("....."))) {
  $hiba_szoveg = mysql_error($res);
}
else {
  echo "Sikeres rögzítés!";
}
Másrészt nem tudok elmenni a mellett szótlanul, hogy SEMMI ellenőrzést és szanitizálást nem csinálsz a $_POST tömb elemeire! Nagyon súlyos és mellesleg jól dokumentált hibát követsz el (ld. SQL injection)! Ilyet, ha nem akarsz magaddal NAGYON kiszúrni, sose csinálj!
2

aposztrof

Protezis · 2008. Jún. 7. (Szo), 20.26
Az 'autok' helyett legyen siman autok, vagy `autok` (alt gr + 7)
3

még nem

walko · 2008. Jún. 7. (Szo), 20.47
Köszönöm a válaszokat, kipróbáltam mindkét módszert amit javasoltál, nem javult a helyzet. Tudom hibával teli, de most tanulom a programozást és szeretném úgy felépíteni, apró lépésenként, hogy lássam mi mit csinál. Olvastam az említett hibáról, természetesen később javítani is fogom.
Tábla definícióban semmi különleges, a tipus és modell tinytext az évjárta pedig int. Vagy ha másra gondoltál, akkor bocsi kezdő vagyok és nem értettem a kérdést.
4

nézd végig hol akadsz el

cSuwwi · 2008. Jún. 7. (Szo), 21.19
Nézd végig hol akadsz el.
Maga az sql kérés formailag helyes.

Nézd meg echo-zással hogy a _POST-ból kapsz-e eredményeket.
Mivel az sql jó, próbáld azt kiechozni, mysql_query helyett egy echot írsz oda, és azt a sort másold be egy sql konzolba vagy a phpmyadmin sql ablakába, akkor ha hiba van, egyből látni fogod.

Kiírja sikeres rögzítést mindenképp, mert az sql parancsnak nincs visszatérési értéke, és nincs lekezelve.
Inkább így próbáld:
$sql = mysql_query("...");
if (!$sql) { echo "Sikertelen"; } else { echo "Sikeres"; }
5

huh

walko · 2008. Jún. 7. (Szo), 21.40
Köszönöm a választ. Úgy tettem ahogy javasoltad.
Echoval kiirattam a POST átvett értékeit, azok helyesek.
Echoval kiirattam a rögzítést, bemásoltam sql konzolba és nem írt ki hibaüzenetet, de nem is adta hozzá az adatot. Kipróbáltam mindhárom módszerrel (autok 'autok' `autok`) úgy sem sikerült.
Az baj lehet, hogy Navicat-t használok sql megjelenítésre?
6

Próbáld meg mással is

tolmi · 2008. Jún. 7. (Szo), 23.29
Próbálkozz más adatbázis menedzselővel, mondjuk phpmyadminnal. Az biztosan kiírja neked, hogy miért nem sikerül az insert, ha ott próbálod meg végrehajtani. (Valami SQL fül kell neked)

A Navicat-ben tuti, hogy jó helyen keresed a hibaüzenetet? Nem fog feldobni neked semmilyen ablakot/üzenetet ha hibás az SQL-ed, ne is számíts rá (AFAIK). Ellenben van erre DB output ablak.
7

phpmyadmi

walko · 2008. Jún. 8. (V), 21.58
Szinte egész nap próbálkoztam, de nem jutottam semmire. Nézegettem a neten, ennek így ahogy van mennie kellene. Aztán próbáltam konzolból kiadni a parancsot és gyanús lett, hogy nem reagál semmit a szerver. Megnéztem a mysql manual-t is és a legelső parancsra (SELECT VERSION(), CURRENT_DATE;)is csak visszaadja a konzolt és nem ír ki semmmit. Ha végén hagytam a pontosvesszőt, akkor rögtön reklamált, hogy hiba, de kimenetet nem adott mást.
Mi lehet a hiba? Reinstall? Tudom ez már kicsit off, mégis kérném a segítségeteket.
Köszönöm.
8

siker

walko · 2008. Jún. 9. (H), 08.31
Köszönöm az építő javaslatokat!
Végülis rájöttem, 2 hibát vétettem és ezért nem ment, hiába javítottam az egyiket!
SQL konzolban írtam be:

INSERT INTO autok (tipus, modell, evjarat) VALUES('$tipus', '$modell', '$evjarat');
Így már ment. A két hiba: pontosvessző a végéről és a tábla nevet nem kell idézőjelek közé tenni.
Köszönöm még egyszer! És bocsánat ha túl kezdő vagyok ;)
9

Megmondtam

Protezis · 2008. Jún. 9. (H), 10.26
A pontosvesszo pedig nem kell, ha mysql_query()-vel adsz at query stringet.
10

OFF- inject..

Szekeres Gergő · 2008. Jún. 9. (H), 11.09
tipus = $_POST["tipus"];
$modell = $_POST["modell"];
$evjarat = $_POST["evjarat"];

1. a fenti kódnak nincs semmi haszna.
2. nézz utána az escapelésnek és a bemeneti adatok védelmének.
3. a sikeres rögzítést akkor írd ki ha valóban sikeres volt a rögzítés, különben elég megtévesztő :)
4. a táblaneveket ` (ctrl+7) jelek közé szokás rakni, mint a mezőneveket. a ' jel a bemeneti string adatok segédjele.