Avatar billede cmau Nybegynder
27. juli 2005 - 10:56 Der er 46 kommentarer og
1 løsning

Hvorfor kommer alle de valgte ikke med, selvom der er makeret fle

Hejsa

Jeg har den her select, hvor man kan vælge flere ved at holde Ctrl i bund samtidig med at man trykker, men et eller andet sted sker der en fejl og de bliver ikke smide i databasen som: a,b,c,d,g,o den smider kun a ind.

Min kode er meget lang og jeg håber i kan finde lidt rundt i den.

Det skal siges at de felter som skal gøre sådan er:
personality
interests
clothing_style
music_style
film_style
food_style

Ingen af dem gør det.

Koden:

http://babegalleri.dk/test/change_informations.phps
Avatar billede mrgumble Nybegynder
27. juli 2005 - 11:06 #1
Prøv at skrive den del af koden, som behandler dataerne fra din select.
Avatar billede cmau Nybegynder
27. juli 2005 - 11:08 #2
Det skulle være den her, men jeg kan se at der må være smuttet noget i rodet:

foreach($subjects as $v) {
if(!empty($_POST[$v])) {
if(!in_array($_POST[$v], ${$v})) {
$error[] = "Du kan ikke vælge noget som ikke findes i feltet '$v'!";
}
}
}
Avatar billede jaw Nybegynder
27. juli 2005 - 11:11 #3
Når du bruger multiple selects får du jo samme variabelnavn flere gange. Altså sådan set:

$personality = "a";
$personality = "b";
$personality = "c";

Jeg har aldrig selv brugt det, så ved ikke heeeelt hvordan man løser det. Men umiddelbart vil jeg mene, at du skal navngive din select så den hedder name='personality[]' f.eks.

Så vil du kunne hente dem med:
$_POST['personality'][0]
$_POST['personality'][1]
$_POST['personality'][2]
Avatar billede cmau Nybegynder
27. juli 2005 - 11:16 #4
$_POST['personality'] skal så når den bliver modtaget som multiple smide alt indholdet så [0] kommer først [0],[1],[5] (Hvis nu man ikek ahr valgt [2] [3] og [4]).

Det er en langrække som den skal smide i databasen.
Avatar billede jaw Nybegynder
27. juli 2005 - 11:17 #5
Den her ser ud til at have hjulpet andre før:

$multiple_select_size = sizeof($multiple_select);
for ($i=0; $i<$multiple_select_size; $i++) {
  $message .= $multiple_select[$i].",";
}
Avatar billede cmau Nybegynder
27. juli 2005 - 11:27 #6
Kan den så godt komme igennem:

foreach($subjects as $v) {
if(!empty($_POST[$v])) {
if(!in_array($_POST[$v], ${$v})) {
$error[] = "Du kan ikke vælge noget som ikke findes i feltet '$v'!";
}
}
}

Og blive tjekket rigtigt?
Avatar billede jaw Nybegynder
27. juli 2005 - 11:29 #7
Har det virket før, eller er det fordi du pludselig har skiftet fra alm. dropdown til multiple?
Avatar billede cmau Nybegynder
27. juli 2005 - 11:33 #8
Jeg tror det var efter jeg valgte at det hele skulle tjekkes igennem denne:

$subjects = array("address", "sexuality", "partner_status", "search", "eye_colour", "hair_colour", "build", "smoking", "alcohol", "personality", "interests", "clothing_style", "music_style", "film_style", "food_style");

foreach($subjects as $v) {
if(!empty($_POST[$v])) {
if(!in_array($_POST[$v], ${$v})) {
$error[] = "Du kan ikke vælge noget som ikke findes i feltet '$v'!";
}
}
}
Avatar billede jaw Nybegynder
27. juli 2005 - 11:36 #9
Jep, det der mindes jeg selv at have lavet til dig :) Men dengang var det da ikke planen med et multiple dropdown, vel?! Jeg skal lave nogen eksempler med multiple dropdowns for jeg har aldrig brugt det, og det har jeg ikke lige tid til pt. desværre...
Avatar billede cmau Nybegynder
27. juli 2005 - 11:37 #10
Jo det var planen med multiple dropdown, det kan være jeg glemte at nævne det.
Avatar billede cmau Nybegynder
27. juli 2005 - 12:17 #11
Finder du ud af noget?
Avatar billede cmau Nybegynder
29. juli 2005 - 11:13 #12
Help :S
Avatar billede cmau Nybegynder
30. juli 2005 - 16:55 #13
Finder du ud af noget jaw?.. Jeg har virkelig brug for det her, for at komme videre :S
Avatar billede coderdk Praktikant
02. august 2005 - 14:53 #14
Kan ikke se noget af din kode, men det bruges sådan:
html:

<select multiple="multiple" name="hej[]" rows="3">
<option value="v1">v1</option>
<option value="v2">v2</option>
<option value="v3">v3</option>
</select>

modtagende php:

if ( !empty( $_POST['hej'] ) )
{
  foreach ( $_POST['hej'] as $v )
  {
      echo "Fik $v<br>";
  }
}
Avatar billede cmau Nybegynder
02. august 2005 - 22:09 #15
http://babegalleri.dk/change_informations.phps

Så må det vel være [] jeg mangler i navnet?
Avatar billede coderdk Praktikant
02. august 2005 - 22:16 #16
Yeps
Avatar billede cmau Nybegynder
02. august 2005 - 22:25 #17
Ej nu ved jeg simpelthen ikke hvad jeg har klokket i :S Nu bliver username ikke modtaget, så den tjekker ikke dataen :S
Avatar billede cmau Nybegynder
02. august 2005 - 22:27 #18
http://babegalleri.dk/change_informations.phps - kan du se noget? Ved godt der er meget kode, men :S
Avatar billede coderdk Praktikant
03. august 2005 - 01:59 #19
Hmm dunno, fordi det er disabled?
Avatar billede cmau Nybegynder
03. august 2005 - 11:41 #20
det bliver jo fjernet igen i javascriptet.
Avatar billede coderdk Praktikant
03. august 2005 - 12:45 #21
Hmm ok, umiddelbart kan jeg ikke lige se det ved at hurtig-skimme koden - Hvordan ser siden ud når den er kørt? Måske er der en javascript fejl eller lign?
Avatar billede cmau Nybegynder
03. august 2005 - 18:21 #22
www.babegalleri.dk/test login med coderdk og asdasd så gå ind i ret informationer og prøv. Der skal stå noget med grønt når det er rettet rigtigt
Avatar billede coderdk Praktikant
03. august 2005 - 18:32 #23
Jeg får javascript fejl ved submit:

Error: f.description has no properties
Source File: http://www.babegalleri.dk/test/main.php?page=change_informations
Line: 329
Avatar billede cmau Nybegynder
03. august 2005 - 18:42 #24
Hvorfår jeg ikke javascript fejl vist? :S Betyder at description er tom?
Avatar billede coderdk Praktikant
03. august 2005 - 18:53 #25
Den hedder jo principient description[] nu kan jeg se ;P Er det ikke en fejl?
Avatar billede cmau Nybegynder
03. august 2005 - 19:44 #26
Så nu kom vi over det, men så kommer en anden fejl:

Du kan ikke vælge noget som ikke findes i feltet 'personality'!
Du kan ikke vælge noget som ikke findes i feltet 'interests'!
Du kan ikke vælge noget som ikke findes i feltet 'clothing_style'!
Du kan ikke vælge noget som ikke findes i feltet 'music_style'!
Du kan ikke vælge noget som ikke findes i feltet 'film_style'!
Du kan ikke vælge noget som ikke findes i feltet 'food_style'!

Det er denne kode:

foreach($subjects as $v) {
if(!empty($_POST[$v])) {
if(!in_array($_POST[$v], ${$v})) {
$error[] = "Du kan ikke vælge noget som ikke findes i feltet '$v'!";
}
}
}

Som tjekker om man har valgt en af dem i selecten, som er:

$personality = array("a", "b", "v", "d", "e");
$interests = array("a", "b", "v", "d", "e");
$clothing_style = array("a", "b", "v", "d", "e");
$music_style = array("a", "b", "v", "d", "e");
$film_style = array("a", "b", "v", "d", "e");
$food_style = array("a", "b", "v", "d", "e");

Men der må åbenbart være fejl i :S
Avatar billede coderdk Praktikant
03. august 2005 - 20:00 #27
Hmm ja, nogle af dem er da i hvert tilfælde arrays, så prøv at lave den foreach om til:

    foreach( $subjects as $v )
    {
        if ( !empty( $_POST[$v] ) )
        {
            if ( is_array( $_POST[$v] ) )
            {
                foreach ( $_POST[$v] as $val )
                {
                    if ( !in_array( $val, ${$v} ) )
                    {
                        $error[] = "Du kan ikke vælge noget som ikke findes i feltet '$v'!";
                        break;
                    }
                }
            }
            else
            {
                if ( !in_array( $_POST[$v], ${$v} ) )
                {
                    $error[] = "Du kan ikke vælge noget som ikke findes i feltet '$v'!";
                }
            }
        }
    }
Avatar billede cmau Nybegynder
03. august 2005 - 20:21 #28
break; stopper den ikke det hele? som exit;?
Avatar billede coderdk Praktikant
03. august 2005 - 20:23 #29
Nope, den bryder ud af det inderste loop.
Avatar billede coderdk Praktikant
03. august 2005 - 20:23 #30
Avatar billede cmau Nybegynder
03. august 2005 - 20:29 #31
Det som kommer med POST er bare Array, det er det eneste der bliver gemt i databasen nu :S
Avatar billede coderdk Praktikant
03. august 2005 - 20:36 #32
Ja, det er klart, du har ikke ændret din query:

mysql_query("UPDATE users SET mail='$_POST[mail]', contact='$_POST[contact]', name='$_POST[name]', birth_day='$_POST[birth_day]', birth_month='$_POST[birth_month]', birth_year='$_POST[birth_year]', address='$_POST[address]', sexuality='$_POST[sexuality]', partner_status='$_POST[partner_status]', search='$_POST[search]', occupation='$_POST[occupation]', height='$_POST[height]', weight='$_POST[weight]', eye_colour='$_POST[eye_colour]', hair_colour='$_POST[hair_colour]', build='$_POST[build]', smoking='$_POST[smoking]', alcohol='$_POST[alcohol]', personality='$_POST[personality]', interests='$_POST[interests]', clothing_style='$_POST[clothing_style]', music_style='$_POST[music_style]', film_style='$_POST[film_style]', food_style='$_POST[food_style]', description='$_POST[description]' WHERE id = '$_SESSION[userid]'") or die(mysql_error());

F.eks. $_POST['personality'] indeholder jo et array.
Avatar billede cmau Nybegynder
03. august 2005 - 20:38 #33
hmm.. hvordan skal jeg da ændre den? Fjerne POST[] ?
Avatar billede coderdk Praktikant
03. august 2005 - 20:42 #34
Øhm, nej - Eller det ved jeg ikke hvordan du vil løse - Din database er designet til at man kan vælge én ting i personality, men nu har du ændret det så man kan vælge flere ting. Gør man det "rigtigt" opretter man så en ny tabel hvor man opbevarer brugerens valg af personality...
Den dårlige løsning er at lave feltet større og gøre sådan:

$personality = implode( ',', $_POST['personality'] );

Hvorved du får en kommasepareret liste - Det er bare ikke så håndterligt når man skal søge osv.

Mit bud er at lave databasedesignet om ;)
Avatar billede cmau Nybegynder
03. august 2005 - 20:44 #35
Jeg vil gerne bruge implode metoden her i starten, da jeg ikke har i sinde at lave en søge side endnu og hvis jeg gør vil den ikke blive så kompliceret at de kan søge personlighed.
Avatar billede cmau Nybegynder
03. august 2005 - 20:56 #36
Så du ved ikke hvordan jeg kan klare at få den til at smide det rigtigt ind?
Avatar billede coderdk Praktikant
03. august 2005 - 21:01 #37
Jo, brug:

$personality = implode( ',', $_POST['personality'] );

og erstat $_POST['personality'] med $personality i din UPDATE-sætning - Gør samme for de andre felter der er blevet ændret på samme måde :)
Avatar billede cmau Nybegynder
03. august 2005 - 22:41 #38
Nu bliver det rettet, men prøv at login, så er det man har valgt ikke seleced når man ser der nede, det skulle den gerne også når der kommer igen med post, så er de heller ikke selected;

http://babegalleri.dk/change_informations.phps -
Avatar billede cmau Nybegynder
06. august 2005 - 10:56 #39
Coderdk?
Avatar billede coderdk Praktikant
06. august 2005 - 12:27 #40
Du er nødt til at prøve at lære at debugge bedre - Find ud af hvorfor de ikek bliver valgt, brug var_dump() og så videre til at se hvad de forskellige variable indeholder når tingene ikke virker. Mit gæt er stadig at der pga din ændring fra enkelt til array...
Du laver også nogle grimme forvirrende loops som: foreach ( $var as $var ) - Det er pænere at adskille dem som f.eks: foreach ( $personer as $person )
Avatar billede cmau Nybegynder
06. august 2005 - 18:00 #41
Kigger på det i morgen ^_^ Lige ved at score dejlig pige :D
Avatar billede cmau Nybegynder
14. august 2005 - 10:33 #42
"brug var_dump() "

Hvad mener du med det?
Avatar billede coderdk Praktikant
14. august 2005 - 17:56 #43
hvis du vil undersøge hvad der er i $_POST['personality'] f.eks. kan du lave en:

echo "<pre>"; var_dump( $_POST['personality'] ); echo "</pre>";
Avatar billede cmau Nybegynder
17. august 2005 - 13:53 #44
Tester lige når jeg får fri kl 20.30 i aften, fra arbejde
Avatar billede cmau Nybegynder
27. september 2005 - 22:16 #45
Nu er jeg tilbage igen. Undskyld..

Jeg har prøvet at smide var_dump på også fik jeg:

array(2) {
  [0]=>
  string(1) "b"
  [1]=>
  string(1) "v"
}


Nu får jeg så fejl i starten:

Warning: implode(): Bad arguments. in /mnt/raid/www/www/babegalleri/test/pages/change_informations.php on line 156

Warning: implode(): Bad arguments. in /mnt/raid/www/www/babegalleri/test/pages/change_informations.php on line 157

Warning: implode(): Bad arguments. in /mnt/raid/www/www/babegalleri/test/pages/change_informations.php on line 158

Warning: implode(): Bad arguments. in /mnt/raid/www/www/babegalleri/test/pages/change_informations.php on line 159

Warning: implode(): Bad arguments. in /mnt/raid/www/www/babegalleri/test/pages/change_informations.php on line 160


Det er disse linjer:

$personality_set = implode( ',', $_POST['personality'] );
$interests_set = implode( ',', $_POST['interests'] );
$clothing_style_set = implode( ',', $_POST['clothing_style'] );
$music_style_set = implode( ',', $_POST['music_style'] );
$film_style_set = implode( ',', $_POST['film_style'] );
$food_style_set = implode( ',', $_POST['food_style'] );
Avatar billede cmau Nybegynder
27. september 2005 - 22:17 #46
Avatar billede cmau Nybegynder
10. november 2005 - 22:42 #47
Dette finder vi vel heller ikke ud af..

Men tak fordi du prøvede.
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