Avatar billede torstein Novice
26. juni 2003 - 00:04 Der er 7 kommentarer og
2 løsninger

Foreach() problem

Hjælp søges til flg. script.

Der hentes id_create, som senere skal være reference til at updatere stregen. Id_bruger, som sorterer hvilke data som skal hentes, og sidst id_ovl, som bruges til at hente data fra en anden tabel.

Der skal gemmes en ny værdi ($sortering), som indsættes i selectboxen og har en værdi som er antallet af counts i de rækker som hentes i tabellen.

Min tabel ser således ud:

CREATE TABLE create_db (
  id_create tinyint(4) NOT NULL auto_increment,
  id_bruger tinyint(4) NOT NULL default '0',
  id_ovl tinyint(4) NOT NULL default '0',
  sortering tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (id_create)
) TYPE=MyISAM COMMENT='Træningsprogram DB til Øvl coach.dk';

Og scriptet ser således ud:

<form action="<? echo $php_self; ?>" method="GET">
<?
include ("sql.php");

// find alle øvelser hos en bruger...
$find = "SELECT * FROM create_db where id_bruger='1'" ;

$find_query = mysql_query($find);
$count = mysql_num_rows($find_query);

if($count)
{
while($antal = mysql_fetch_row($find_query))
{
echo "id_create: " . $antal[0] ." id_bruger: " . $antal[1] ." id_ovl: " . $antal[2] ;

// Finder kategorien ud fra id_ovl...

$kategori = mysql_query("SELECT * FROM ovelse_db WHERE id_ovl ='$antal[2]'") or die(mysql_error());
$navn2 = mysql_num_rows($kategori);
while ($r = mysql_fetch_array($kategori)) {?>
    <?print $r[ovl_navn];?> -
    <?=$r[kat];if ($r[subkat]){?>/<?=$r[subkat];}?> -
    <a href="index.php?slet=<?=$r[id_ovl];}?>&list=slet.php">Slet</A>
<select name="sortering">
        <option value="" SELECTED><?if ($antal[3]>0){echo $antal[3];} else {}?></option>
        <?for($n=1; $n < $count+1; $n++) {?>
        <option><?=$n;?></option><?}?>
        </select><br>
<?
}
}
?>
<br>
<input type="submit" name="send" Value="Send">
</form>
<?
if($_GET['send'] == "Send") {
foreach($_GET['count'] as $key => $value) {
$qry_update = "UPDATE create_db SET sortering='$value[3]'  WHERE id_create='$key'";
mysql_query($qry_update) or die(mysql_error());
echo " opdateret for nr. " . $key;
}
}
?>

Selve udtrækket fra databasen fungerer fint, men jeg kan ikke få data updated, så jeg er i tvivl hvad f.x. navnet på selectboxen skal være, foreach($_GET[hvad_der_skal_stå_her],og denne her:
UPDATE create_db SET sortering='$value[3]'  WHERE id_create='$key'";
Avatar billede torstein Novice
26. juni 2003 - 00:46 #1
Scriptet og fejlmeddelse (
Warning: Invalid argument supplied for foreach() in /home/web/gb1198/test/edit_prg2.php on line 39)
kan ses på

www.totte.dk/test/edit_prg2.php
Avatar billede Slettet bruger
26. juni 2003 - 01:35 #2
foreach($_GET['count'] as $key => $value) <----
$_GET['count'] er IKKE et array!
Avatar billede avminarm Juniormester
26. juni 2003 - 09:17 #3
din PHP_SELF - skal være $_SERVER['PHP_SELF']
Avatar billede torstein Novice
26. juni 2003 - 14:37 #4
Regin:

Jeg ved det, men hvad skal der står i stedet. Jeg kan ikke hitte ud af det, og jeg syntes efterhånden jeg har gættet nok....

Hvad skald er stå i setdet for 'count'??

Avminarm:

Jeg kører med flg. i min sql-fil:

$HTTP_GET_VARS = $_GET;
$HTTP_POST_VARS = $_POST;
$HTTP_FILES_VARS = $_FILES;
$HTTP_SERVER_VARS = $_SERVER;

extract($_GET);
extract($_POST);
extract($_FILES);
extract($_SERVER);

så det burde ikke være nødvendigt.
Avatar billede mgb Nybegynder
26. juni 2003 - 22:56 #5
Problemet er at du aldrig kommer til at se den anden $_GET[sortering] variable. Du kunne måske prøve noget ligende:
...
<select name="<?=$r[kat]?>">
<option value="<?=$n?>"><?=$n?></option>
...
Der efter kan du hente værdien ved $_GET[($r[kat])];

Hvis jeg er helt galt på den her så må du undskylde :) Og hvis det er totalt sort det jeg skriver kan jeg godt prøve at lave et lille php script.
Avatar billede torstein Novice
27. juni 2003 - 13:15 #6
Dette fungerer !! langt om længe.

MGB: jeg brugte din selectname, men satte den til min id_create, som den skal opdatere efter. Alle gange hvor jeg har sat noget ind efter $_GET er der gået ged i det. Nu har jeg fjernet det, så det kun er $_GET som står der. Det gør at den også sender sen=send afsted, hvilket er underordnet for mit vedkommende.

Sådan ser det ud nu:

$find = "SELECT * FROM create_db where id_bruger='13' order by sortering asc" ;

$find_query = mysql_query($find);
$count = mysql_num_rows($find_query);

if($count)
{
while($antal = mysql_fetch_row($find_query))
{
echo "id_create: " . $antal[0] ." id_bruger: " . $antal[1] ." id_ovl: " . $antal[2] ;

// Finder kategorien ud fra id_ovl...

$kategori = mysql_query("SELECT * FROM ovelse_db WHERE id_ovl ='$antal[2]'") or die(mysql_error());
$navn2 = mysql_num_rows($kategori);
while ($r = mysql_fetch_array($kategori)) {?>
    <?print $r[ovl_navn];?> -
    <?=$r[kat];if ($r[subkat]){?>/<?=$r[subkat];}?> -
    <a href="index.php?slet=<?=$r[id_ovl];?>&list=slet.php">Slet</A>
<select name="<?print $antal[0];}?>">
        <option value="" SELECTED><?if ($antal[3]>0){echo $antal[3];} else {}?></option>
        <?for($n=1; $n < $count+1; $n++) {?>
      <option value="<?=$n?>"><?=$n?></option><?}?>
        </select><br>
<?
}
}
?>
<br>
<input type="submit" name="send" Value="Send">
</form>
<?
if($_GET['send'] == "Send") {
foreach($_GET as $key => $value)  {
print "Id_create: $key Sortering: $value <br>
\n";
$qry_update = "UPDATE create_db SET sortering='$value'  WHERE id_create='$key'";
mysql_query($qry_update) or die(mysql_error());

}
}
?>
Avatar billede avminarm Juniormester
27. juni 2003 - 13:34 #7
men ingen points for at foreslå foreach (i tidl sprg) ??
Avatar billede torstein Novice
27. juni 2003 - 15:04 #8
Ja den var værre, det kan jeg ikke løbe fra....Jeg opretter et nyt under titlen point til avminarm.
Avatar billede avminarm Juniormester
30. juni 2003 - 08:58 #9
ok - takker - reference http://www.eksperten.dk/spm/369916
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