Avatar billede prop46 Nybegynder
17. januar 2008 - 20:07 Der er 23 kommentarer og
1 løsning

problemer med implode() måske

Jeg bruger nedestående kode, så jeg kan vælge om en række 'kurser' skal vises på hjemmeside eller ej. $vis kommer fra en checkbox.

Mit problem er, at koden virker udemærket hvis der er flere $vis... dvs hvis der er flere rækker/kurser der er selected. Hvis $vis er tom, eller kun indeholder én række får jeg adskillinge fejlmedlingen  at $vis ikke er defineret og på implode().

Er der min hjælp at hente? Spørge endeligt hvis spørgsmålet ikke er klart formuleret.

<input type="checkbox" name="vis[]" value="<?php echo $id; ?>" <?php if ($vis == 'ja') echo 'checked' ?>>

if(isset($_POST['gem_vis'])) {
$vis = $_POST['vis'];
$id_ja = implode(", ", $vis);
aabn_forbindelse_og_vaelgdb();
$sql = "SELECT `id` FROM kurser WHERE vis = 'ja'";
$result = mysql_query($sql) or die(mysql_error());

while ($data = mysql_fetch_array($result)) {
$db_vis[] = $data['id'];
}
$diff = array_diff($db_vis, $vis);
$id_nej = implode(", ", $diff);
   
if(!empty($id_ja)) {
$send_vis = "UPDATE kurser SET vis='ja' WHERE `id` in ($id_ja)";
mysql_query($send_vis);
}
 
if(!empty($id_nej)) {
$send_vis = "UPDATE kurser SET vis='nej' WHERE `id` in ($id_nej)";
mysql_query($send_vis);
}
luk_forbindelse();
}
Avatar billede erikjacobsen Ekspert
17. januar 2008 - 20:11 #1
Du bliver jo nødt til at spørge om det er et array, inden du kan sige implode. Måske


$vis = $_POST['vis'];
if (isarray($vis)) {
  $id_ja = implode(", ", $vis);
} else {
  $id_ja = "-1":
}

Det med "-1" er for at have en syntaktisk lovlig værdi i SQL-sætningen, og at det lige er minus een er fordi du måske ikke har lovlige værdier, der er negative - et sødt lille hack, ik'?
Avatar billede prop46 Nybegynder
17. januar 2008 - 20:19 #2
enormt sødt :0) Hvordan ser function isarray() ud?
Avatar billede zurekk Nybegynder
17. januar 2008 - 20:21 #3
Erik -> Piver PHP ikke hvis man angiver en variabel med en tom Post, Get, Request whatever?

Og så hedder funktion is_array :D
Avatar billede erikjacobsen Ekspert
17. januar 2008 - 20:22 #4
Ja, den hedder is_array - det er et dumt tastatur jeg har ;)
Avatar billede prop46 Nybegynder
17. januar 2008 - 20:26 #5
Og yes... giv skylden til den sagesløse tastatur :0) Men den brokker sig stadig når der ikke er noget i $vis :

Notice: Undefined index: vis
Warning: array_diff() [function.array-diff]: Argument #2 is not an array
Warning: implode() [function.implode]: Bad arguments
Avatar billede erikjacobsen Ekspert
17. januar 2008 - 20:31 #6
Jah, men så er det fordi de dumme øjne ikke kan læse. Jeg troede at
isset($_POST['gem_vis']) var isset($_POST['vis'])  - selvfølgelig altid spørge med isset. Så kan det være du kan droppe is_array.
Avatar billede prop46 Nybegynder
17. januar 2008 - 20:34 #7
Er vi enige om at min kode starter sådan her

if(isset($_POST['gem_vis'])) {
  $vis = $_POST['vis'];
  if (isset($vis)) {
    $id_ja = implode(", ", $vis);
  } else {
    $id_ja = "-1";
  }

og så fortsætter som pastet ovenfor? FOr så får jeg stadig den samme fejl.... dumme øjne eller ej :0)
Avatar billede erikjacobsen Ekspert
17. januar 2008 - 20:35 #8
Du bruger $vis flere steder som om det var et array, så een if-sætning kan vel ikke gøre det.
Avatar billede prop46 Nybegynder
17. januar 2008 - 20:42 #9
Jeg er blank... blank som en skærm hvor stikket er trukket ud...
Avatar billede prop46 Nybegynder
17. januar 2008 - 20:55 #10
Nu jeg prøver at tænke over det så forstår jeg egt ikke 'dit søde hack' :0)For så vil min if(!empty($id_ja)) jo ikke virke vel?
Avatar billede erikjacobsen Ekspert
17. januar 2008 - 21:10 #11
Det er korrekt - den havde jeg ikke lige set. Man skal normalt aldrig nogensinde bruge funktionen empty - det kan give sjove og uventede resultater.

Lav
    $id_ja = "-1";
om til
    $id_ja = "";

og
  if(!empty($id_ja)) {
om til
  if ($id_ja<>"") {
Avatar billede prop46 Nybegynder
19. januar 2008 - 18:36 #12
Nå tilbage ved skærmen... og jeg kan ikke få det p..s til at virke. Kan du ikke hjælpe mig videre?
Avatar billede prop46 Nybegynder
19. januar 2008 - 18:45 #13
jeg har nu følgende... men den brokker sig når der ikke er nogen select der er afmærket..... Det forstår jeg jo egt. godt at den gør, men jeg ved ikke lige hvad jeg skal gøre ved det :0(

if(isset($_POST['gem_vis'])) {
$vis = $_POST['vis'];
if (isset($vis)) {
  $id_ja = implode(", ", $vis);
} else {
  $id_ja = "-1";
}

aabn_forbindelse_og_vaelgdb();

$sql = "SELECT `id` FROM anbefal WHERE vis = 'ja'";
$result = mysql_query($sql) or die(mysql_error());

while ($data = mysql_fetch_array($result)) {
  $db_vis[] = $data['id'];
}

if (isset($vis)) {
  $diff = array_diff($db_vis, $vis);
  $id_nej = implode(", ", $diff);
} else {
  $id_nej = "-1";
}

if ($id_ja<>"") {
  $send_vis = "UPDATE anbefal SET vis='ja' WHERE `id` in ($id_ja)";
  mysql_query($send_vis);
}

if ($id_nej<>"") {
  $send_vis = "UPDATE anbefal SET vis='nej' WHERE `id` in ($id_nej)";
  mysql_query($send_vis);
}

luk_forbindelse();
}
Avatar billede erikjacobsen Ekspert
19. januar 2008 - 22:41 #14
Der står hvad du skal gøre (som jeg tror virker): 17/01-2008 21:10:33
Avatar billede prop46 Nybegynder
20. januar 2008 - 16:49 #15
Men svaret 17/01-2008 21:10:33 dutter ikke. Når jeg forsøger IKKE at vise nogen af rækkerne, dvs afmarkerer alle <select> får jeg fejlen 'Notice: Undefined index: vis' med følgende kode:

if(isset($_POST['gem_vis'])) {
$vis = $_POST['vis'];
if(isset($vis)){
$id_ja = implode(", ", $vis);
}else{
$id_ja = "";
}

aabn_forbindelse_og_vaelgdb();
$sql = "SELECT `id` FROM anbefal WHERE vis = 'ja' AND slags='$valgt_slags'";
$result = mysql_query($sql) or die(mysql_error());

while ($data = mysql_fetch_array($result)) {
$db_vis[] = $data['id'];
}

if(isset($vis)){
$diff = array_diff($db_vis, $vis);
$id_nej = implode(", ", $diff);
}else {
$id_nej = "";
}

if($id_ja<>""){
$send_vis = "UPDATE anbefal SET vis='ja' WHERE `id` in ($id_ja)";
mysql_query($send_vis);
}

if($id_nej<>""){
$send_vis = "UPDATE anbefal SET vis='nej' WHERE `id` in ($id_nej)";
mysql_query($send_vis);
}
luk_forbindelse();
}
Avatar billede erikjacobsen Ekspert
20. januar 2008 - 17:10 #16
Du har heller ingen isset($_POST['vis']) som vi snakkede om for en 3-4 dage siden.
Avatar billede prop46 Nybegynder
20. januar 2008 - 17:37 #17
Jeg ved ikke nu som for 3-4 dage siden hvor den pokkers isset($_POST['vis']) skal stå, og jeg er ikek tankelæser. Vil du hjælpe mig eller vil du ikke hjælpe?
Avatar billede erikjacobsen Ekspert
20. januar 2008 - 19:25 #18
Muligvis:

if( isset($_POST['gem_vis'])) {
  if( isset($_POST['vis'])) {
    $vis=$_POST['vis'];
  } else {
    $vis=Array();
  }
  $id_ja = implode(",", $vis);

  aabn_forbindelse_og_vaelgdb();
  $sql = "SELECT `id` FROM anbefal WHERE vis = 'ja' AND slags='$valgt_slags'";
  $result = mysql_query($sql) or die(mysql_error());

  $db_vis=Array();
  while ($data = mysql_fetch_array($result)) {
    $db_vis[] = $data['id'];
  }

  if ($id_ja!="") {
    $diff = array_diff($db_vis, $vis);
    $id_nej = implode(",", $diff);
  } else {
    $id_nej = "";
  }

  if ($id_ja!="") {
    $send_vis = "UPDATE anbefal SET vis='ja' WHERE `id` in ($id_ja)";
    mysql_query($send_vis);
  }

  if ($id_nej!="") {
    $send_vis = "UPDATE anbefal SET vis='nej' WHERE `id` in ($id_nej)";
    mysql_query($send_vis);
  }

  luk_forbindelse();
}
Avatar billede prop46 Nybegynder
20. januar 2008 - 20:12 #19
Ingen fejlmedd. men hvis alle <select> er 'tomme' gemmer den ikke noget.
Avatar billede erikjacobsen Ekspert
20. januar 2008 - 20:18 #20
Det er jo sådan set hvad du be'r den om. Hvad skal der ske hvis de allesammen er tomme?
Avatar billede prop46 Nybegynder
20. januar 2008 - 20:21 #21
Nåh :0) Ja så skal den gemme dem alle som tomme... altså skrive nej i dem alle sammen.
Avatar billede prop46 Nybegynder
20. januar 2008 - 20:29 #22
og det problem kunne jeg så selv løse ved at flytte lidt runt på else i if( isset($_POST['vis'])) og tilføje en mysql_query.

Tak for hjælpen og læg lige et svar :0)
Avatar billede erikjacobsen Ekspert
20. januar 2008 - 20:31 #23
Ok, det lyder godt det virker - til sidst. Jeg kan godt se det er uoverskueligt når der bare bliver strøet "guldkorn" rundt, men uden synderlig sammenhæng.

Men jeg samler slet ikke på point, tak.
Avatar billede prop46 Nybegynder
20. januar 2008 - 20:32 #24
okay... jamen så fortsat god aften og ikke-point-jagt :0)
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