Avatar billede nemlig Professor
18. november 2008 - 19:33 Der er 16 kommentarer og
1 løsning

Fejl i kode, som skriver et array til MySQL

Jeg har i et andet spm. fået hjælp til nedenstående kode, som ikke virker 100%, idet posterne gemmes i MySQL, men felterne er tomme, bortset fra id (auto_increment):

Der listes nogle poster fra MySQL, og til venstre for hver post vises en checkbox. Når der trykkes på SUBMIT, skal de valgte poster indsættes i en anden tabel.

Kan nogen gennemskue fejlen:

$sql = "SELECT * FROM user WHERE menu_5 = 1";
$res = database($sql);
   
while($row = mysql_fetch_assoc($res))
{
            $my_data[] = array(
            'navn'             => $row['navn'],
            'emailadresse'     => $row['emailadresse']);
}

if(isset($_GET['update']) && $_GET['update']) {

foreach($_POST['selected'] as $val){
if (strlen($val)>0){
  $sql = "INSERT INTO `nytabel` SET
          `navn` = '".mysql_real_escape_string($my_data[$val]['navn'])."',
          `emailadresse` = '".mysql_real_escape_string($my_data[$val]['emailadresse'])."'";
    database($sql);
}}}

echo "
<form action='".$_SERVER['PHP_SELF']."?update=true' method=post>";
for($i = 0; $i < count($my_data); $i++){
?>
<input type="checkbox" value="'.$i.'" name="selected[]" />
<?php
echo $my_data[$i]['navn']." - ";
echo $my_data[$i]['emailadresse']."<br />";
}
echo "<input type='submit' value='Gem valgte'>";
echo "</form>";
Avatar billede showsource Seniormester
18. november 2008 - 19:39 #1
Du har jo ikke nogen værdi for checkbox, kun "selected[]"
Avatar billede showsource Seniormester
18. november 2008 - 19:40 #2
Og den her dutter heller ikke
" value="'.$i.'"
Avatar billede showsource Seniormester
18. november 2008 - 20:01 #3
Prøv:

<p>

<form method="post">
<?php
$i = 0;
foreach($my_data as $key => $value) {
$i++;
echo"<input type=\"checkbox\" name=\"valg[]\" value=\"".$i."\"> ";
echo"<input type=\"text\" name=\"navn_".$i."\" value=\"".$value["navn"]."\" readonly> ";
echo"<input type=\"text\" name=\"email_".$i."\" value=\"".$value["emailadresse"]."\" readonly><br />\r\n";
}

?>
<input type=submit>
</form>
</p>
<?php
if(isset($_POST["valg"])) {
    foreach($_POST["valg"] as $key) {
    $sql = "INSERT INTO `tabel`
            VALUES
            (NULL,'".mysql_real_escape_string($_POST["navn_".$key])."','".mysql_real_escape_string($_POST["email_".$key])."')";

    echo $sql."<br>";
    }
}
?>
Avatar billede nemlig Professor
18. november 2008 - 20:24 #4
Det ser ud til at fungere efter hensigten.
Lige et par uddybende spørgsmål til dit kodeforslag:

1. <form method="post"> Vil denne kode genindlæse siden på samme måde som <form action='".$_SERVER['PHP_SELF']."' method=post>";

2. Jeg ønsker som default, at alle checkbokse er markeret. Er det noget med parameteren "checked".

3. Og når jeg skal liste alle rækkerne fra array'et, er det så muligt at vise "navn" og "emailadresse" som almindelig tekst - altså ikke inputfelt, men tekst, som jeg kan formatere.

På forhånd tak for bidragene.
Send blot et svar.
Avatar billede showsource Seniormester
18. november 2008 - 20:34 #5
1. njahh, personligt vil jeg altid definere en action
2. du tilføjer blot " checked" for input før den afsluttende >.
3. Du laver et hiddenfelt i stedet for text, og en echo extra for at vise navn/email
Avatar billede showsource Seniormester
18. november 2008 - 20:35 #6
echo"<input type=\"checkbox\" name=\"valg[]\" value=\"".$i."\" checked> ";

Det virker, men der er vist et eller andet med måden det helt korrekt skal skrives på.
Avatar billede nemlig Professor
18. november 2008 - 20:52 #7
Tak for kommentarerne.
Jeg tror at man skriver: checked="checked"

Men du skal have tusind tak for dine gode bidrag og for den hurtig respons.
Send venligst et svar :)
Avatar billede showsource Seniormester
18. november 2008 - 21:01 #8
Ok.
Og du behøver vel ikke lave et array med navn/email.
De kan vel ligeså godt vises i din while ?
Avatar billede nemlig Professor
18. november 2008 - 21:16 #9
Jeg har 5 forskellige udtræk, som jeg har samlet i ét array
Jeg kan slet ikke gennemskue, at lave checkboksene uden array.
Hvis du mener, at det er mere simpelt uden array, håber jeg at du vil have ulejlighed med at vise hvordan.
Avatar billede showsource Seniormester
18. november 2008 - 21:51 #10
Så må du jo vise din tabel opbygning + den kode som laver dit array
Avatar billede showsource Seniormester
18. november 2008 - 21:51 #11
Og tak for point!
Avatar billede nemlig Professor
18. november 2008 - 21:58 #12
Jeg har 5 udtræk fra samme tabel, men med forskellige WHERE.
Jeg viser de 2 udtræk - de 3 andre er efter samme princip:

if($postlister[0] == 1) {
    $sql = "SELECT * FROM user WHERE menu_1 = 1";
    $res = database($sql);
   
$my_data = array();

while($row = mysql_fetch_assoc($res))
{
            $my_data[] = array(
            'navn'             => $row['navn'],
            'emailadresse'     => $row['emailadresse']);
}   
}       

if($postlister[1] == 1) {
    $sql = "SELECT * FROM user WHERE menu_2 = 1";
    $res = database($sql);
   
while($row = mysql_fetch_assoc($res))
{
            $my_data[] = array(
            'navn'             => $row['navn'],
            'emailadresse'     => $row['emailadresse']);
}   
}
Avatar billede showsource Seniormester
18. november 2008 - 22:11 #13
Hvad er $postlister[0] f.eks. ?
noget info om din tabel opbygning vil være ( er ) godt !
Avatar billede showsource Seniormester
18. november 2008 - 22:14 #14
Men umiddelbart ligner det at du kan lave et array ( hvis du skal bruge udtræk på forskellige steder ) med en indexkey som er $postlister

F.eks.

$my_data = array();

// SQL

// WHILE

$my_data[0][] = sql->info;

$my_data[1][] = sql->info;
Avatar billede nemlig Professor
18. november 2008 - 22:25 #15
Tabellen er en postliste-tabel, hvor en emailadresse kan tilknyttes op til 5 forskellige postlister.
Tabellen består af følgende felter:
id
navn
emailadresse
menu_1 (er sat til 1, hvis emailadressen er knyttet til postliste 1)
menu_2 (er sat til 1, hvis emailadressen er knyttet til postliste 2)
menu_3 (er sat til 1, hvis emailadressen er knyttet til postliste 3)
menu_4 (er sat til 1, hvis emailadressen er knyttet til postliste 4)
menu_5 (er sat til 1, hvis emailadressen er knyttet til postliste 5)

Så har jeg en inputformular, hvor man markerer, hvilke af de 5 postlister, der skal sendes en email til.
Her kan der markes for fx. postliste 1 og postliste 2.
Og hvis det er tilfældet, så henter jeg navn og emailadresser på disse lister:
if($postlister[1] == 1) {......
Avatar billede showsource Seniormester
18. november 2008 - 22:50 #16
hmm, jeg er for træt lige nu!
( og jeg vil hellere koncentrere mig om det techno som er mine højtalere lige nu! )

Men:
En tabel (emails) med en "indentifier", f.eks. "id autoincrement, primary" og navn og email

en anden tabel med mulige tilknytninger, igen med en tilsvarende "identifier" og tilknytningsnavn

en tredje tabel som indeholder et row med ref til email og ref til hvilken tilknytning


tabel "emails":
id, autoincrement, primary
navn varchar
email varchar

tabel "newsletters":
id, autoincrement, primary
refnavn varchar


tabel "sendto"

news_email int unsigned
newsletter int unsigned

Så kan "emails" f.eks. indeholde

1, nemlig, nemlig@nemlig.dk
2, showsource, showsource@showsource.dk


og "newsletters":
1, Nyt på exp.dk
2, Nyt fra nemlig.dk
3, Nyt fra showsource.dk

og tabel "sendto" kan så indeholde f.eks.

1, 1
1, 3
2, 2
2, 3

D.v.s
nemlig@nemlig.dk vil gerne ha' nyheder fra "Nyt på exp.dk" og "Nyt på showsource.dk"
og
showsource@showsource.dk vil gerne ha' nyheder fra "Nyt fra nemlig.dk" og "Nyt fra showsource.dk"


Men, jeg vil lige holde mig til techno'en!

Er på igen i morgen tidlig.
Avatar billede nemlig Professor
18. november 2008 - 23:23 #17
God fornøjelse med Techno'en.
Jeg har så at sige min kode færdig efter inspiration af dine forslag.
Det skal du have mange tak for.
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