08. marts 2006 - 17:10
Der er
34 kommentarer og 1 løsning
Session & MySQL problem.
Hey eksperter. Ved jeg har haft dette spørgsmål før, men det døde. sidder med et mega problem i et oprettelse script. 1. brugeren har en flerdelt bruger form. efte hvad form (sendt med post) ryger bruger ind på dette script. -------------------- <?php session_start(); if($_POST['regID'] == md5("page1")) { $_SESSION['CPRNummer'] = $_POST['talCpr_part1'].$_POST['talCpr_part2']; $_SESSION['postnrby'] = $_POST['talPostnr'] . " " . $_POST['udfyldtCity']; $_SESSION['myNewDate'] = $_POST['myDate']. "/".$_POST['myMonth']." - ".$_POST['myYear']; foreach ($_POST as $key => $value) { if($key == "talCpr_part1" || $key == "talCpr_part2" || $key == "talPostnr" || $key == "udfyldtCity" || $key == "myDate" || $key == "myMonth" || $key == "myYear") { continue; } $_SESSION[$key] = $value; } header("Location: cv_part_2.php"); exit; } elseif($_POST['regID'] == md5("page2")) { if(isset($_POST["licence_type"])) { $_SESSION['licence_type'] = implode(", ", $_POST["licence_type"]); } foreach ($_POST as $key => $value) { if($key == "licence_type") { continue; } $_SESSION[$key] = $value; } header("Location: cv_part_3.php"); exit; } elseif($_POST['regID'] == md5("page3")) { foreach ($_POST as $key => $value) { $_SESSION[$key] = $value; } header("Location: cv_part_4.php"); exit; } else { header("Location: cv.php"); exit; } ?> --------------------------------- 2. Når brugeren er færdig, ryger det hele så igennem et script der skal smide det i databasen. Af en eller anden årsag, sætter den 3 commaer for meget i min sql. :( ------------------------- <?php session_start(); //$CPRNummer = $_SESSION['talCpr_part1'].$_SESSION['talCpr_part2']; //$post_by = $_SESSION['talPostnr'] . " " . $_SESSION['udfyldtCity']; //$myNewDate = $_SESSION['myDate']. "/".$_SESSION['myMonth']." - ".$_SESSION['myYear']; //unset($_SESSION['talCpr_part1'], $_SESSION['talCpr_part2'], $_SESSION['talPostnr'], $_SESSION['udfyldtCity'], $_SESSION['myDate'], $_SESSION['myMonth'], $_SESSION['myYear'], $_SESSION['regID']); unset($_SESSION['regID']); //$_SESSION['CPRNummer'] = $CPRNummer; //$_SESSION['postnrby'] = $post_by; //$_SESSION['myNewDate'] = $myNewDate; $arr_keys=array('CPRNummer'=>'cprnr','udfyldtFornavn'=>'fornavn','udfyldtEfternavn'=>'efternavn','udfyldtAdresse'=>'adresse','postnrby'=>'postnr_by','Telefon'=>'telefon','Mobil'=>'mobil','mailEpost'=>'email','drivers_licence'=>'kørekort','licence_type'=>'kørekort_type','disp_car'=>'bil','current_situation'=>'job_situation','wanted_worktype'=>'arbejdstid','wanted_workhours'=>'job_ønske','payment'=>'løn_fast','myNewDate'=>'rådighed','in_union'=>'akasse','union_details'=>'ja_akasse','resignment'=>'opsigelse','smoker'=>'ryger','repsheet'=>'straffeattest','bureaue'=>'bureauer','bureaues_details'=>'ja_bureauer','comments'=>'bemærkninger'); $sql_key=""; $sql_val=""; foreach ($_SESSION as $key => $value) { $sql_key .= $arr_keys[$key].','; $sql_val .= "'$value',"; } $sql_val=substr($sql_val,0,strlen($sql_val) -1); $sql_key=substr($sql_key,0,strlen($sql_key) -1); require("includes/config.inc.php"); require("includes/functions.inc.php"); connect($mysql_host, $mysql_user, $mysql_pass, $mysql_user); $sql = "insert into sv_users1(". $sql_key . ") values(" . $sql_val . ")"; echo $sql; //mysql_query($sql); exit; $siteID = 4; include("includes/header.inc.php"); ?> <script type="text/javascript"> function togInput(frm,val){ antalFelter=17 for(i=1;i<=antalFelter;i++) frm.elements['licence_type'+i].style.display=(val)?'inline':'none'; } </script> <br> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td valign="top"> <table cellpadding="0" cellspacing="0" border="0" align="center" class="reg_table"> <tr> <td class="reg_title"> CV tilmelding til Scan-Vikar Trin 4 / 4<br> </td> </tr> <tr> <td class="reg_content"> <br style="font-size: 5px"> Wohooooooooooo!! You're done!<br> <br style="font-size: 5px"> </td> </tr> </table> </td> <td> <img src="gfx/cv_img123.jpg" border="0" alt=""> </td> </tr> </table> <?php include("includes/footer.inc.php"); ?> ------------------------ Der kan der se problemet? For jeg er ærligt på bar bund. :( - BlackScorpion.
Annonceindlæg fra Kommando
08. marts 2006 - 19:32
#1
Smid dem ind i $_SESSION['form'] i stedet, altså så du f.eks. har $_SESSION['form']['CPRNummer'] osv, så kan du bare bygge SQL'en med foreach ( $_SESSION['form'] as $key => $val ) :)
08. marts 2006 - 19:36
#2
jamen ændrer det på at den smider 3 commaer for meget ind i min sql sætning ?
08. marts 2006 - 19:37
#3
for har jo allerede : foreach ($_SESSION as $key => $value) { $sql_key .= $arr_keys[$key].','; $sql_val .= "'$value',"; }
08. marts 2006 - 19:46
#4
foreach ($_SESSION as $key => $value) { $sql_key .= $arr_keys[$key].','; $sql_val .= "'$value',"; } kan laves som: $sql_key = implode( ',', array_keys( $_SESSION ) ); $sql_val = implode( ',', array_values( $_SESSION ) ); Så skulle kommaerne passe...
08. marts 2006 - 19:48
#5
dvs at dette: $sql_key=""; $sql_val=""; foreach ($_SESSION as $key => $value) { $sql_key .= $arr_keys[$key].','; $sql_val .= "'$value',"; } $sql_val=substr($sql_val,0,strlen($sql_val) -1); $sql_key=substr($sql_key,0,strlen($sql_key) -1); kan sikkert skiftes ud med: $sql_key = implode( ',', array_keys( $_SESSION ) ); $sql_val = implode( ',', array_values( $_SESSION ) ); ?
08. marts 2006 - 19:50
#6
Netop :)
08. marts 2006 - 19:52
#7
prøver...
08. marts 2006 - 20:00
#8
yups... så kommer næste problem... $sql_val skal omgives af '' ...
08. marts 2006 - 20:02
#9
$sql_val = implode( '\',\'', array_values( $_SESSION ) ); og $sql = "insert into sv_users1(". $sql_key . ") values('" . $sql_val . "')";
08. marts 2006 - 20:03
#10
næste problem er så at den ikke tjekker op mod mit array... for input felterne hedder ikke det samme som felterne i databasen, deraf array'et.
08. marts 2006 - 20:03
#11
$sql_val = implode( "','", array_values( $_SESSION ) ); vel?
08. marts 2006 - 20:04
#12
skal så lige huske det første og sidste ' i sql'en. ;)
08. marts 2006 - 20:08
#13
Ja, det havde jeg overset. Hvad med: $tmp = array_keys( $_SESSION ); $sql_key = array(); foreach( $tmp as $key ) { if ( array_key_exists( $key, $arr_keys ) ) { $sql_key[] = $arr_keys[$key]; } } $sql_key = implode( ',', $sql_key ); $sql_val = implode( "','", array_values( $_SESSION ) );
08. marts 2006 - 20:09
#14
$sql = "insert into sv_users1(". $sql_key . ") values('" . $sql_val . "')"; Den har jo allerede en start og slut ' - så du skal ikke gøre andet ;)
08. marts 2006 - 20:13
#15
omproggede det hele lidt.. og det hjalp: $sql_key=""; $sql_val=""; foreach ($_SESSION as $key => $value) { $sql_key .= $arr_keys[$key].','; $sql_val .= "'$value',"; } require("includes/config.inc.php"); require("includes/functions.inc.php"); connect($mysql_host, $mysql_user, $mysql_pass, $mysql_user); $sql_key .= "created"; $sql_val .= "'".time()."'"; $sql = "insert into sv_users1(". $sql_key . ") values(" . $sql_val . ")"; glemte created, altså hvornår brugeren er oprettet. desuden, får jeg et problem, hvis feltet ikke er sat... kan se nu at jeg har flere ,,, hvor der mangler keys og values.
08. marts 2006 - 20:15
#16
tænkte på, i cv_next_part.php (første stump kode, hvor den smider det hele i sessions) kan jeg ikke bygge noget array snask, som den tjekker op mod, og hvis der mangler nogle felter (altså de er ikke sat, men findes i array'et) så sætter den det automatisk ?
08. marts 2006 - 20:16
#17
men igen, i sidste del, hvor den tjekker op mod arrayet, burde den da ikke sætte keys, altså comma'er hvis variablen ikke er sat ?
08. marts 2006 - 20:19
#18
Sådan her ser min sql ud: SQL: insert into sv_users1(cprnr,postnr_by,rådighed,fornavn,efternavn,adresse,telefon,mobil,email,kørekort,bil,job_situation,arbejdstid,job_ønske,løn_fast,,,,akasse,ja_akasse,opsigelse,ryger,straffeattest,bureauer,ja_bureauer,bemærkninger,created) values('**********','*******','1/4 - 2006','*****','*****','*******','','********','*******@*****.com','no','no','working','fulltime','day','19000','1','4','2006','no','','','yes','yes','no','','','1141844959')
08. marts 2006 - 20:22
#19
Prøv foreach ($_SESSION as $key => $value) { $tmp = $arr_keys[$key]; if ( $tmp != '' ) { $sql_key .= $tmp.','; $sql_val .= "'$value',"; } }
08. marts 2006 - 20:28
#20
lol har den næsten... nu er der bare for mange values i forhold til keys. :D kan jeg ikke gøre sådan her ? unset($_POST['myDate'], $_POST['myMonth'],$_POST['myYear']);
08. marts 2006 - 20:30
#21
med min sidste kodestump, burde du altid have lige så mange keys som values...
08. marts 2006 - 20:37
#22
hvor er det ALT ALT for sejt. :D hvis du har tid har jeg et spørgsmål mere.. altså til et andet script ?
08. marts 2006 - 20:41
#23
Du kan da prøve :)
08. marts 2006 - 20:44
#24
okey :D brugeren er oprettet... logger ind... ser sine data'er... ændrer i dem whatever.. og trykker gem. alle felterne hedder hvad de hedder i databasen. en nem kort og hurtig måde at lave et script, der lige gemmer det for dem og sender dem tilbage til forrige side ? Nogle af felterne er dog tomme.
08. marts 2006 - 21:00
#25
Hvad med noget i stil med: $tmp = array(); foreach ( $_POST as $key => $val ) { if ( $val != '' && $key != 'brugerid' ) { $tmp[] = $key . " = '" . mysql_escape_string( $val ) . "'"; } } $sql = "UPDATE brugere SET " . implode( ',', $tmp ) . " WHERE brugerid = " . $_POST['brugerid']; // Fyr query af header( 'location: ' . $_SERVER['HTTP_REFERER'] ); exit;
08. marts 2006 - 21:01
#26
Fjollet, hvis brugeren er logget ind, og du har hans brugerid i $_SESSION['brugerid'] så: $tmp = array(); foreach ( $_POST as $key => $val ) { if ( $val != '' ) { $tmp[] = $key . " = '" . mysql_escape_string( $val ) . "'"; } } $sql = "UPDATE brugere SET " . implode( ',', $tmp ) . " WHERE brugerid = " . $_SESSION['brugerid']; // Fyr query af header( 'location: ' . $_SERVER['HTTP_REFERER'] ); exit; Bedre end før :P
08. marts 2006 - 21:03
#27
prøver. :D
08. marts 2006 - 21:07
#28
hmmm måske det ville være en ide med en mysql_query($sql); ?? :P
08. marts 2006 - 21:10
#29
ej hvor grimt.. sidder og kan ikke få det til at virke... kunne måske være en ide at oprette forbindelse til databasen ?? kan godt mærke jeg er ved at være træt.
08. marts 2006 - 21:14
#30
lol :) ja jeg har bare skrevet "Fyr query af" da folk jo ofte bruger en form for databaseabstraktion :)
08. marts 2006 - 21:15
#31
hmmm hvis jeg nu f.eks. har et telefon nummer stående, og jeg sletter det.. så opdatere den det ikke i databasen, da den ikke tæller det felt med, nogen vej uden om det ?
08. marts 2006 - 21:38
#32
Fjern if'en: $tmp = array(); foreach ( $_POST as $key => $val ) { $tmp[] = $key . " = '" . mysql_escape_string( $val ) . "'"; }
08. marts 2006 - 21:45
#33
god damn! smid et svar, du har fortjent hver en brøkdel af de point. :D
08. marts 2006 - 21:46
#34
Ok :)
08. marts 2006 - 21:50
#35
jeg takker mange gange.. du har lige knækket en hovedpine jeg har haft i over en måned nu. :D A Job Well Done.
Vi tilbyder markedets bedste kurser inden for webudvikling