pošiljanje podatkov v mysql težava
2 naročnika
2 naročnika
Pozdravljeni strokovnjaki,
sem začetnik v php in že cel dan mi ne uspe vnesti podatkov v mysql tabelo. Problem je, da nikakor ne moram dobiti podatkov (rime,rpriimek..itd) v mysql bazo. Kodo pišem v dreamweaverju kateri mi ne javi nobene napake. Pregledam sem tudi veliko število drugih registracijskih skript, ki so napisane na tak način kot moja, zato sklepam, da je težava v phpmyadmin my sql bazi.
Torej brskalnik mi napiše napako: Tukaj naprej ne gre. (vrstica 24)
Ali je koda napisana pravilno ?
robrazec.php
<form name="obrazecreg" action="rmysql.php" method="POST">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Prosim, vpišite podatke:<hr />
Ime:<input type="text" name="rime" size="40px"/></br>
Priimek:<input type="text" name="rpriimek" size="40px"/></br>
Ulica:<input type="text" name="rulica" size="40px"/></br>
Kraj:<input type="text" name="rkraj" size="40px"/></br>
Email:<input type="text" name="remail" size="40px"/><hr/>
Uporabniškoime:<input type="text" name="ruime" size="40px"/></br>
Geslo:<input type="password" name="rgeslo1" size="40px" maxlength="15"/></br>
Ponovite geslo:*<input type="password" name="rgeslo2" size="40px" maxlength="15"/></br>
<input type="submit" name="rposlji" value="Naslednji korak" />
</form>
rmysql.php
<?php
sessionstart();
$ime = $POST['rime'];
$priimek = $POST['rpriimek'];
$ulica = $POST['rulica'];
$kraj = $POST['rkraj'];
$email = $POST['remail'];
$uporabniskoime = $POST['ruime'];
$geslo = $POST['rgeslo1'];
$mysqlhostname = "127.0.0.1";
$mysqluser = "root";
$mysqlpassword = "";
$mysqldatabase = "test";
$mysql_table='member';
$db=mysqlconnect($mysqlhostname, $mysqluser, $mysqlpassword) or die("Could not connect database");
mysqlselectdb($mysql_database, $db) or die("Could not select database");
$sql = mysqlquery("INSERT INTO $mysqltable(ime , priimek , ulica , kraj , email , uporabniskoime , geslo)VALUES($ime , $priimek , $ulica , $kraj , $email , $uporabniskoime , $geslo ") or die ("tukaj naprej ne gre");
$result = mysqlquery($sql);
mysqlclose();
header("location: pobrazec.php");
?>
4 odgovori
Naj še omenim da če ukaz na 21 vrstici --> or die ("tukaj naprej ne gre"); <-- pobrišem, me preusmeri na pobrazec.php, vendar mi kljub temu ne vnese podatkov v tabelo member.
$sql = mysql_query("INSERT INTO $mysql_table(ime , priimek , ulica , kraj , email , uporabniskoime , geslo)VALUES($ime , $priimek , $ulica , $kraj , $email , $uporabniskoime , $geslo ") or die ("tukaj naprej ne gre");
manjka ti cel kup navednic... ze pri spisku db fieldov
$sql = mysql_query("INSERT INTO $mysql_table(`ime` , `priimek` , `ulica` , `kraj` , `email` , `uporabniskoime` , `geslo`)VALUES($ime , $priimek , $ulica , $kraj , $email , $uporabniskoime , $geslo ") or die ("tukaj naprej ne gre");
potem pa se pri spisku vrednosti....
$ime je dejansko vrednos stringa.... ko pa delas SQL mora biti string med navednicami...
torej v teoriji bi lahko tut tko naredil
$sql = mysql_query("INSERT INTO $mysql_table(`ime` , `priimek` , `ulica` , `kraj` , `email` , `uporabniskoime` , `geslo`)VALUES('$ime' , '$priimek' , '$ulica' , '$kraj' , '$email' , '$uporabniskoime' , '$geslo' ") or die ("tukaj naprej ne gre");
ampak to ni pravilno oz. nikako ne dobra praksa
torej najlacje in najbolj brerljivo bo nekako tako
$query = "INSERT INTO $mysql_table(`ime` , `priimek` , `ulica` , `kraj` , `email` , `uporabniskoime` , `geslo`) ";
$query .= "VALUES(";
$query .= "'".mysql_real_escape_string($ime)."'";
$query .= "'".mysql_real_escape_string($priimek)."'";
$query .= "'".mysql_real_escape_string($ulica)."'";
$query .= "'".mysql_real_escape_string($kraj)."'";
$query .= "'".mysql_real_escape_string($email)."'";
$query .= "'".mysql_real_escape_string($uporabniskoime)."'";
$query .= "'".mysql_real_escape_string($geslo)."'";
query .= ")";
$sql = mysql_query($query) or die ("tukaj naprej ne gre");
vsak podatek je pametno prej vsaj minimalno sanirat... da preprecimo tisto osnovne sql injekcije.... ampak koda je zdalec od tega, da bi bila prakticna ali lepa.... ampak za zacetek je zadosti, da vec, kaj je trebanarest....
zgornjega dela pa nisem niti gledal ce je vse ok al ne
pa se to sem pozabil povedat.... mysql knjiznica je deprecated.... nauci se uporabljat objektno razlicico mysqli
Uh najlepša hvala za odgovor. kaj pa pomenij toliko stringov (poševen,odebeljen,podčrtan text)?
$query = "INSERT INTO $mysqltable(ime
, priimek
, ulica
, kraj
, email
, uporabniskoime
, geslo
) ";
$query .= "VALUES(";
$query .="'".mysqlrealescapestring($ime)."'";
$query .=**"'".mysqlrealescapestring($priimek)."'";
$query .= "'".mysqlrealescapestring($ulica)."'";
$query .="'".mysqlrealescapestring($kraj)."'";
$query .= "'".mysqlrealescapestring($email)."'";
$query .= "'".mysqlrealescapestring($uporabniskoime)."'";
$query .="'".mysqlrealescapestring($geslo)."'";
query .= ")";
$sql = mysql_query($query) or die ("tukaj naprej ne gre");
Na žalost skripta še vedno ne deluje (sem popravil). Ali obstaja kakšna možnost, da je za to kriv xampp ?
Imam še eno vprašanje:
Zadnjič se mi je zgodilo, da čeprav sem ustvaril novo database v phpmyadmin jo fukncija mysql_connect ni našla ter umrla. Ko sem zamenjal ime baze, ki je bila ustvarjena že prej mi je spet delovala. Poizkusil sem z več bazami in vse na novo ustvarjene niso delovale. Nisem se zmotil pri črkovanju ali kaj podobnega. Tudi sedaj imam problem, da z novo ustvarjeno bazo ne morem komunicirati (kakor da je nebi bilo), zato vse kar se učim ustvarjam v bazi test. Kaj bi bilo lahko narobe ? Tudi tabela member je ustvarjena na novo. Mogoče moram kakor koli potrditi obstoj ali kaj podobnega, da mi jo localhost zazna.
tako na pamet ti ne morem nic svetovat
$db=mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
mysql_select_db($mysql_database, $db) or die("Could not select database");
ce ti tukaj ne vrze napake "Could not connect...." ali "Could not select ....".... potem ni problem v povezavi z bazo....
Uh najlepša hvala za odgovor. kaj pa pomenij toliko stringov (poševen,odebeljen,podčrtan text)?
to je samo tvoj editor, ki ti formatira kodo.... string je pa samo edent, ki se lepi skupaj... ozirma jih je vec, ker so po spremenljivkah....
pac zaradi bolj berljive in jasne kode sem naredil tako... lahko pa zadevo obrnes karkor ti bolj odgovarja