Avatar billede allandk Nybegynder
24. april 2007 - 22:11 Der er 22 kommentarer og
1 løsning

Hjælp ønskes til at finde fejl i update flere række ad gangen

Jeg har fundet dette script som virker fint på kildesiden, men ikke hos mig.

<?php
$host=""; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name=""; // Table name

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name ORDER BY id desc";
$result=mysql_query($sql);

$count=mysql_num_rows($result);
?>

<form name="form1" method="post" action="">

<?php
while($rows=mysql_fetch_array($result)){
?>
<? $id[]=$rows['id']; ?><? echo $rows['id']; ?></td>
<input name="name[]" type="text" id="name" value="<? echo $rows['name']; ?>">
<input name="path[]" type="text" id="path" value="<? echo $rows['path']; ?>">
<input name="size[]" type="text" id="size" value="<? echo $rows['size']; ?>">
<?php
}
?>

<input type="submit" name="Submit" value="Opdatér">

</form>

<?php
if($Submit){
for($i=0;$i<$count;$i++){
$sql1="UPDATE $tbl_name SET name='$name[$i]', path='$path[$i]', size='$size[$i]' WHERE id='$id[$i]'";
$result1=mysql_query($sql1);
}
}

if($result1){
header("location:admin.php?side=update_multiple");
}
mysql_close();
?>

Er der nogen, der kan se en fejl i ovenstående? Jeg har skrællet lidt overflødig html af og fjernet koderne i toppen.
Avatar billede dkfire Nybegynder
24. april 2007 - 23:28 #1
Hvaad får du af fejl ???
Avatar billede allandk Nybegynder
24. april 2007 - 23:44 #2
Ingen! Den opdaterer til gengæld heller ikke.
Avatar billede dkfire Nybegynder
25. april 2007 - 09:25 #3
to ting:
Din header(() vil aldrig komme til at virke, da du ikke kan kalde header efter du har sendt noget til browseren.

Prøv efter hver mysql_query() at sætte ord die(mysql_error()) så der bliver til:
mysql_query(...) or die(mysql_error());
Avatar billede dkfire Nybegynder
25. april 2007 - 09:26 #4
mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name") or die("cannot select DB");

manglede lige et par mellemrum.
Avatar billede dkfire Nybegynder
25. april 2007 - 09:29 #5
<? $id[]=$rows['id']; ?><? echo $rows['id']; ?></td>
Hvad skulle denne linie gøre ??
Avatar billede dkfire Nybegynder
25. april 2007 - 09:36 #6
Så vil jeg foreslå at du istedet for $Submit bruger $_POST['Submit'] og
$name[] til $_POST['name[]'], $path[] til $_POST['path[]'], $size[] til $_POST['size[]'] og $id[] til $_POST['id[]']
Avatar billede allandk Nybegynder
25. april 2007 - 11:36 #7
Det er da oplagt. Tak for klarsynet. Jeg retter nu, tester senere og vender tilbage med et svar.
Avatar billede allandk Nybegynder
25. april 2007 - 18:55 #8
Ny fejl:
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\..\update_multiple.php on line 64

Line 64:
$sql="UPDATE $tbl_name SET header=$_POST['header[]'], description=$_POST['description[]'] WHERE id='$_POST['id[]']";
Avatar billede dkfire Nybegynder
25. april 2007 - 19:23 #9
Det er da klart, du skal jo ligsom angive hvilket array element du vil have fat i.
Jeg skal bare en generel $_POST['header[]'].
Noget kunne være ala:

if($_POST['Submit']){
for($i=0;$i<$count;$i++){
$name = $_POST['name[$i]'];
$path = $_POST['path[$i]'];
$size = $_POST['size[$i]'];
$id = $_POST['id[$i]'];
$sql1="UPDATE $tbl_name SET name='$name', path='$path', size='$size' WHERE id='$id'";
$result1=mysql_query($sql1);
}
}
Avatar billede allandk Nybegynder
25. april 2007 - 23:57 #10
Den opdatere endnu ikke...
Avatar billede windcape Praktikant
26. april 2007 - 00:01 #11
prøv at outputte din SQL, og se hvad den rent faktisk forsøger at køre.
Avatar billede allandk Nybegynder
26. april 2007 - 00:03 #12
outputte din SQL = se, hvad den skriver af kode?
Avatar billede allandk Nybegynder
26. april 2007 - 00:23 #13
31<input name="name[]" type="text" id="name" value="drag80.gif">
<input name="path[]" type="text" id="path" value="drag80_20070423-231058.gif">
<input name="size[]" type="text" id="size" value="10637">
Avatar billede windcape Praktikant
26. april 2007 - 01:52 #14
$sql1="UPDATE $tbl_name SET name='$name[$i]', path='$path[$i]', size='$size[$i]' WHERE id='$id[$i]'";

die($sql1); ville vise hvad det rigtig SQL output er, og på det kan du så checke om der er fejl.
Avatar billede windcape Praktikant
26. april 2007 - 01:52 #15
derudover bruger du register globals, hvilket er *meget* dumt.
www.php.net/register_globals læs, og lær.. og fjern dem!
Avatar billede allandk Nybegynder
26. april 2007 - 02:52 #16
Betyder: $variable = isset($_GET["variable"]) ? $_GET["variable"] : "";

$variable = det den er sat til ELLERS ingenting?

Hvordan kan jeg omskrive min side længere uden? Jeg troede, at det var nok at følge dkfires råd.
Avatar billede windcape Praktikant
27. april 2007 - 00:28 #17
Det er altid nok at følge råd, man skal ALTID selv læse op. Så medmindre du gerne vil hackes, så kom igang.

www.php.net/security , http://phpsec.org/projects/guide/
Avatar billede allandk Nybegynder
27. april 2007 - 07:19 #18
Tak for råd; jeg læser...
Avatar billede allandk Nybegynder
01. maj 2007 - 09:29 #19
Jamen, så siger jeg tak for opsangen. Smider I et svar?
Avatar billede dkfire Nybegynder
01. maj 2007 - 09:43 #20
Fik du løst det ???
Avatar billede allandk Nybegynder
01. maj 2007 - 20:57 #21
Nej, jeg kan ikke overskue at kombinere så megen ny viden sammen, så nu er jeg startet på at læse om sikkerhed og variabler. Min update-funktion spiller overhovedet ikke, desværre...
Avatar billede allandk Nybegynder
06. december 2007 - 08:51 #22
Hej med jer, smider I lige et velfortjent svar?
Avatar billede allandk Nybegynder
18. maj 2013 - 19:48 #23
Ingen svar? Jeg lukker.
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
Computerworld tilbyder specialiserede kurser i database-management

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