Avatar billede blackscorpion Nybegynder
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.
Avatar billede coderdk Praktikant
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 )

:)
Avatar billede blackscorpion Nybegynder
08. marts 2006 - 19:36 #2
jamen ændrer det på at den smider 3 commaer for meget ind i min sql sætning ?
Avatar billede blackscorpion Nybegynder
08. marts 2006 - 19:37 #3
for har jo allerede :

foreach ($_SESSION as $key => $value)
{
    $sql_key .= $arr_keys[$key].',';
    $sql_val .= "'$value',";
}
Avatar billede coderdk Praktikant
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...
Avatar billede blackscorpion Nybegynder
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 ) );

?
Avatar billede coderdk Praktikant
08. marts 2006 - 19:50 #6
Netop :)
Avatar billede blackscorpion Nybegynder
08. marts 2006 - 19:52 #7
prøver...
Avatar billede blackscorpion Nybegynder
08. marts 2006 - 20:00 #8
yups... så kommer næste problem...

$sql_val skal omgives af '' ...
Avatar billede blackscorpion Nybegynder
08. marts 2006 - 20:02 #9
$sql_val = implode( '\',\'', array_values( $_SESSION ) );
og
$sql = "insert into sv_users1(". $sql_key . ") values('" . $sql_val . "')";
Avatar billede blackscorpion Nybegynder
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.
Avatar billede coderdk Praktikant
08. marts 2006 - 20:03 #11
$sql_val = implode( "','", array_values( $_SESSION ) );

vel?
Avatar billede blackscorpion Nybegynder
08. marts 2006 - 20:04 #12
skal så lige huske det første og sidste ' i sql'en. ;)
Avatar billede coderdk Praktikant
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 ) );
Avatar billede coderdk Praktikant
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 ;)
Avatar billede blackscorpion Nybegynder
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.
Avatar billede blackscorpion Nybegynder
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 ?
Avatar billede blackscorpion Nybegynder
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 ?
Avatar billede blackscorpion Nybegynder
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')
Avatar billede coderdk Praktikant
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',";
    }
}
Avatar billede blackscorpion Nybegynder
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']);
Avatar billede coderdk Praktikant
08. marts 2006 - 20:30 #21
med min sidste kodestump, burde du altid have lige så mange keys som values...
Avatar billede blackscorpion Nybegynder
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 ?
Avatar billede coderdk Praktikant
08. marts 2006 - 20:41 #23
Du kan da prøve :)
Avatar billede blackscorpion Nybegynder
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.
Avatar billede coderdk Praktikant
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;
Avatar billede coderdk Praktikant
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
Avatar billede blackscorpion Nybegynder
08. marts 2006 - 21:03 #27
prøver. :D
Avatar billede blackscorpion Nybegynder
08. marts 2006 - 21:07 #28
hmmm måske det ville være en ide med en mysql_query($sql); ?? :P
Avatar billede blackscorpion Nybegynder
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.
Avatar billede coderdk Praktikant
08. marts 2006 - 21:14 #30
lol :) ja jeg har bare skrevet "Fyr query af" da folk jo ofte bruger en form for databaseabstraktion :)
Avatar billede blackscorpion Nybegynder
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 ?
Avatar billede coderdk Praktikant
08. marts 2006 - 21:38 #32
Fjern if'en:

$tmp = array();
foreach ( $_POST as $key => $val )
{
  $tmp[] = $key . " = '" . mysql_escape_string( $val ) . "'";
}
Avatar billede blackscorpion Nybegynder
08. marts 2006 - 21:45 #33
god damn!

smid et svar, du har fortjent hver en brøkdel af de point. :D
Avatar billede coderdk Praktikant
08. marts 2006 - 21:46 #34
Ok :)
Avatar billede blackscorpion Nybegynder
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.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester