19. maj 2004 - 17:29
Der er
55 kommentarer og 1 løsning
Gemmer ikke i mysql DB?
Hej jeg har et script der ser sådan her ud: <? mysql_connect("localhost", "host", "XXX") or die(mysql_error()); mysql_select_db(DB); if (isset($_POST['profil'])) { mysql_query("UPDATE profil set profil='$_POST[profil]' WHERE id=1"); echo "Firmaprofil Opdagteret"; } $query = mysql_query("SELECT * FROM profil WHERE id=1"); $row = mysql_fetch_array($query); ?> <form action="profil.php" method="post"> <div align="center"> <input type="hidden" name="id" value="<?php echo $_POST['id']; ?>"> <br> <table width="9%" border="0" cellpadding="0" cellspacing="0" height="164" class="tekst_normal"> <tr> <td width="41%" height="14" background="../images/cor1.jpg" class="tekst_fed"> Tekst på profil:</td> </tr> <tr> <td height="19" class="tekst_fed"><textarea name="tekst" rows="8" cols="30" class="box"><?php echo $row['profil']; ?></textarea> </td> </tr> </table> <input type="submit" value="Gem Ændringer" class="submit"> </div> </form> kan i se problemet? den henter fint teksten fra mysql db. men når jeg så ændre i det og vil trykke gem så sletter den alt og sætter ingen ting op overhovedet. Hjælp :(
Annonceindlæg fra Cognizant
jeg er ikke php-mand, men er denne linie ikke forkert: mysql_query("UPDATE profil set profil='$_POST[profil]' WHERE id=1"); mig bekendt, skal du afslutte, sætte variabel ind og fortsætte med strengen: mysql_query("UPDATE profil set profil='" $_POST[profil] "' WHERE id=1"); (ret den lige selv til... som sagt ikke php-mand )
læste lige op på det: mysql_query("UPDATE profil set profil='".$_POST[profil]."' WHERE id=1"); den skulle kunne klare det....
Hmm... hvorfor ik bare mysql_query("UPDATE profil set profil='$_POST[profil]' WHERE id=1"); Det virker da fint på den måde uden alle de ". :-)
det jo en streng du laver... du bliver jo nød til at fortælle serveren at $_POST[profil] ikke er en del af strengen.. derfor vil jeg de mene at man skal afslutte, koble variabel på, fortsætte med strengen... derfor ". variabel ." Hvis du nu i fx. asp laver disse: anders = "med" response.write "Hej & anders & dig" response.write "Hej " & anders & " dig" Vil outputtet være henholdsvis: hej & anders & dig hej med dig
Løsningen er her: ret mysql_query("UPDATE profil set profil='$_POST[profil]' WHERE id=1"); til mysql_query("UPDATE profil set profil='$_POST[profil]' WHERE id='$_POST[id]'");
and_>... sådan virker det nu engang i PHP ;-)
så blander jeg mig udenom ;) overlader det til phphovederne :p
Og så skal din <textarea name="tekst"..... selvfølgelig være <textarea name="profil"...
Brug aldrig brugerens input direkte i sql.
jeg skal lige høre hvad i mener i de sidste to kommentare hehe :)
<input type="hidden" name="id" value="<?php echo $_POST['id']; ?>"> den her ikke ?
Jo og så din <tekstarea> !!
Næh, jeg tænker på denne linje: mysql_query("UPDATE profil set profil='$_POST[profil]' WHERE id='$_POST[id]'"); Forstil dig at jeg taster følgende ind i min profil: ', admin='admin så kan din sql komme til at se sådan her ud, hvis du ikek er opmærksom på det: mysql_query("UPDATE profil set profil='', admin='admin' WHERE id='$_POST[id]'"); Nu har jeg pludselig nemt ved at ændre i samtlige kolonner i tabellen. Og det kan blive værre endnu. For at undgå det, bør du i det mindste være sikker på at escape specielle tegn (Fx '). du kan jo prøve at taste ' ind i din profil og se om det stadig virker. Får du en sql fejl (se koden senere) så har du et problem: mysql_query("UPDATE profil set profil='$_POST[profil]' WHERE id='$_POST[id]'"); or die(mysql_error()) ; For at løse det, skal du escape karakterene der kan give problemer. det kan gøres med. $profil = addslashes($_POST['profil']); $id = intval($_POST['id']); mysql_query("UPDATE profil set profil='$profil' WHERE id='$id'"); or die(mysql_error()) ;
okay .. men skal if (isset($_POST['profil'])) { stadig være der så ?
Det ser sådan herud nu: <? mysql_connect("localhost", "host", "xxxx") or die(mysql_error()); mysql_select_db(db); if (isset($_POST['profil'])) { $profil = addslashes($_POST['profil']); $id = intval($_POST['id']); mysql_query("UPDATE profil set profil='$profil' WHERE id='$id'"); or die(mysql_error()); echo "Firmaprofil opdagteret"; } $query = mysql_query("SELECT * FROM profil WHERE id=1"); $row = mysql_fetch_array($query); ?> <form action="profil.php" method="post"> <div align="center"> <input type="hidden" name="id" value="<?php echo $_POST['id']; ?>"> <br> <table width="9%" border="0" cellpadding="0" cellspacing="0" height="164" class="tekst_normal"> <tr> <td width="41%" height="14" background="../images/cor1.jpg" class="tekst_fed"> Tekst på profil:</td> </tr> <tr> <td height="19" class="tekst_fed"><textarea name="profil" rows="8" cols="30" class="box"><?php echo $row['profil']; ?></textarea> </td> </tr> </table> <input type="submit" value="Gem Ændringer" class="submit"> </div> </form> men den siger stadig fejl i: mysql_query("UPDATE profil set profil='$profil' WHERE id='$id'"); or die(mysql_error()); (Parse error: parse error in /customers/hedensted-betonvarefabrik.dk/hedensted-betonvarefabrik.dk/httpd.www/heden/adm/profil.php on line 103)
mysql_query("UPDATE profil set profil='$profil' WHERE id='$id'"); or die(mysql_error()); skal se sådan ud: mysql_query("UPDATE profil set profil='$profil' WHERE id='$id'") or die(mysql_error());
nu viser den i hvert fald ikke fejl.. men den smider endnu ikke noget op på db :(
jeps.. så fandt jeg fejlen.. kan i hjælpe med denne også: <? mysql_connect("localhost", "host", "xxx") or die(mysql_error()); mysql_select_db(db); if (isset($_POST['nr'])) { mysql_query("UPDATE priser set nr='$_POST[nr]', mal='$_POST[mal]', antal='$_POST[antl]', vare='$_POST[vare]', pr='$_POST[pr]', ekskl='$_POST[ekskl]', inkl='$_POST[inkl]' WHERE id ='$id'"); echo "Ændret"; } $query = mysql_query("SELECT * FROM priser WHERE id ='$id'"); $row = mysql_fetch_array($query); ?> <form action="priser.php" method="post"> <div align="center"> <input type="hidden" name="id" value="<?php echo $_POST['id']; ?>"> <br> <br> <table width="99%" height="14" border="0" cellpadding="0" cellspacing="0"> <tr class="tekst_normal"> <td width="8%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Nr.</div></td> <td width="10%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Mål cm:<font size="1"></font></div></td> <td width="14%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Antal pr. M<font size="1">2</font></div></td> <td width="21%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Varebeskrivelse:</div></td> <td width="16%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">pr.</div></td> <td width="14%" background="../images/cor1.jpg" class="tekst_fed">Pris ekskl. moms:</td> <td width="17%" background="../images/cor1.jpg" class="tekst_fed">Pris inkl. moms:</td> </tr> <?php $con = mysql_connect("localhost", "hedensted_beton", "birgitte") or die(mysql_error()); mysql_select_db("hedensted_beton", $con) or die (mysql_error()); $query = mysql_query("SELECT * FROM `priser` ORDER BY `id` LIMIT 0,100") or die (mysql_error()); $i = 0; while($vis = mysql_fetch_array($query)) { $i++; if($i%2 == 1) { $class = "prisbg1"; }else{ $class = "prisbg2"; } // HERUNDER KOMMER DINE TD's ?> <tr class="<?php echo $class; ?>"> <td class="<?php echo $class; ?>"><center> <input name="navn2" type="text" class="box" id="navn2" value="<?php echo $vis["nr"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn3" type="text" class="box" id="navn3" value="<?php echo $vis["mal"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn4" type="text" class="box" id="navn4" value="<?php echo $vis["antal"]; ?>"> </center></td> <td class"<?php echo $class; ?>"> <input name="navn5" type="text" class="box" id="navn5" value="<?php echo $vis["vare"]; ?>"></td> <td class="<?php echo $class; ?>"><center> <?php echo $vis["pr"]; ?> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn7" type="text" class="box" id="navn7" value="<?php echo $vis["ekskl"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn8" type="text" class="box" id="navn8" value="<?php echo $vis["inkl"]; ?>"> </center></td> </tr> <?php // SÅ AFSLUTTES TD's } ?> </table> <br> <input name="submit" type="submit" class="submit" value="Gem Ændringer"> </div> </form>
Hvad var fejlen på den anden lige ??? Måske noget med en $_POST['id'] der skulle have været en $row['id'] ?? :-)
nej det var mysql_query("UPDATE profil set profil='$profil' WHERE id='$id'"); or die(mysql_error()); WHERE id='$id'"); jeg lavede om til WHERE id=1");
hov kom til at poste kode til mysql hehe .. men den er ændret
Ja og det er så ik helt rigtigt når du har en <input type="hidden" name="id".. osv Den linie er jo ik til noget alligevel så Vedr. dit andet script For eksempel. (Kig lige det hele igennem igen....) <input name="navn2" type="text" class="box" id="navn2" value="<?php echo $vis["nr"]; ?>"> Når du sender ovenstående bliver det ikke sendt som $_POST['nr'] men istedet som $_POST['navn2'] fordi din <input name="navn2" angiver dette !!
okay .. hvad skal jeg så ændre denne id= til ??
bare til nr og antal osv ik ?
Nej du behøver egentlig ik det id felt ;-)
hehe okay .. jamen jeg prøver at slette det.. kan du ikke se om der er mere der skal ændres ? fordi det vil godt nok være surt at miste alle dataer igen som ved det andet :((
Du mister dem vel ikke... kan ikke umiddelbart se anden der er galt med det.. Prøv bare igen... det ser rimelig fint ud herfra !!
if (isset($_POST['nr'])) { er den rigtig ?
og denne <input type="hidden" name="id" value="<?php echo $_POST['id']; ?>"> :)
Ja der skal $_POST['id'] jo så være $row['id']
Og så ville jeg forresten så hust lige at fjerne den ene mysql connection medmindre det er 2 forskellige databaser du bruger... Og for guds skyld RET KODEN... Den står jo til fuld offentlighed herinde ;-)
jep jeg har ændret den hehe .. gjorde jeg med det samme.. har lavet en require i stedet så det ikke sker igen hehe !!.. den har skal rettes if (isset($_POST['nr'])) { til if (isset($_row['id'])) { ??
Okay..... prøv at kør skidtet og fortæl hvad den siger !!
det tager jeg som et ja hehe
okay .. mildt sagt så gør den ingen ting faktisk hehe .. kommer herken med fejl eller retter i db ;)
opdate af siden: <?php require "db.php"; ?> <?php if (isset($_POST['id'])) { mysql_query("UPDATE priser set nr='$_POST[nr]', mal='$_POST[mal]', antal='$_POST[antl]', vare='$_POST[vare]', pr='$_POST[pr]', ekskl='$_POST[ekskl]', inkl='$_POST[inkl]' WHERE id ='$id'"); echo "Ændret"; } $query = mysql_query("SELECT * FROM priser WHERE id ='$id'"); $row = mysql_fetch_array($query); ?> <form action="pris.php" method="post"> <div align="center"> <input type="hidden" name="id" value="<?php echo $_POST['id']; ?>"> <br> <br> <table width="99%" height="14" border="0" cellpadding="0" cellspacing="0"> <tr class="tekst_normal"> <td width="8%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Nr.</div></td> <td width="10%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Mål cm:<font size="1"></font></div></td> <td width="14%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Antal pr. M<font size="1">2</font></div></td> <td width="21%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Varebeskrivelse:</div></td> <td width="16%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">pr.</div></td> <td width="14%" background="../images/cor1.jpg" class="tekst_fed">Pris ekskl. moms:</td> <td width="17%" background="../images/cor1.jpg" class="tekst_fed">Pris inkl. moms:</td> </tr> <?php $query = mysql_query("SELECT * FROM `priser` ORDER BY `id` LIMIT 0,100") or die (mysql_error()); $i = 0; while($vis = mysql_fetch_array($query)) { $i++; if($i%2 == 1) { $class = "prisbg1"; }else{ $class = "prisbg2"; } // HERUNDER KOMMER DINE TD's ?> <tr class="<?php echo $class; ?>"> <td class="<?php echo $class; ?>"><center> <input name="navn2" type="text" value="<?php echo $vis["nr"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn3" type="text" value="<?php echo $vis["mal"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn4" type="text" value="<?php echo $vis["antal"]; ?>"> </center></td> <td class"<?php echo $class; ?>"> <input name="navn5" type="text" value="<?php echo $vis["vare"]; ?>"></td> <td class="<?php echo $class; ?>"><center> <?php echo $vis["pr"]; ?> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn7" type="text" value="<?php echo $vis["ekskl"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn8" type="text" value="<?php echo $vis["inkl"]; ?>"> </center></td> </tr> <?php // SÅ AFSLUTTES TD's } ?> </table> <br> <input name="submit" type="submit" class="submit" value="Gem Ændringer"> </div> </form>
Hvad skal den her stump kode (Hvad var planen ???) $query = mysql_query("SELECT * FROM priser WHERE id = '$id'"); $row = mysql_fetch_array($query);
hmm det ved jeg ikke .. skal jeg prøve at slette?
der skete ikke noget.. der var ingen plan med den .. tror bare jeg havde misforstået den :)
2sec .. måske ved jeg det nu
Damn det her er svært når ik man kan se hvad det er der sker på serveren.... Men så vidt jeg lige har fundet ud af er det en liste med produkter hvor du vil kunne rette alle produknernes pris osv... har jeg ret ???
hov .. var kommet på min brors bruger
ja det har du nemlig ret i .. jeg troede det var: <input name="navn5" type="text" value="<?php echo $vis["vare"]; ?>"></td> det var name="navn5" den var gal med og skulle hedde name="vare" .. men der skete heller ikke noget.. måske du ved det?
Det er fordi du ikke kan rette i en hel liste varer af gangen på den måde... så skal du rette en enkelt vare af gangen.... har lige lavet lidt om i scriptet: <?php ?> <?php if (isset($_POST['id'])) { mysql_query("UPDATE priser set nr='$_POST[nr]', mal='$_POST[mal]', antal='$_POST[antl]', vare='$_POST[vare]', pr='$_POST[pr]', ekskl='$_POST[ekskl]', inkl='$_POST[inkl]' WHERE id ='$_POST[id]'"); echo "Ændret"; } ?> <div align="center"> <br> <br> <table width="99%" height="14" border="0" cellpadding="0" cellspacing="0"> <tr class="tekst_normal"> <td width="8%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Nr.</div></td> <td width="10%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Mål cm:<font size="1"></font></div></td> <td width="14%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Antal pr. M<font size="1">2</font></div></td> <td width="21%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Varebeskrivelse:</div></td> <td width="16%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">pr.</div></td> <td width="14%" background="../images/cor1.jpg" class="tekst_fed">Pris ekskl. moms:</td> <td width="17%" background="../images/cor1.jpg" class="tekst_fed">Pris inkl. moms:</td> </tr> <?php $query = mysql_query("SELECT * FROM `priser` ORDER BY `id` LIMIT 0,100") or die (mysql_error()); $i = 0; while($vis = mysql_fetch_array($query)) { $i++; if($i%2 == 1) { $class = "prisbg1"; }else{ $class = "prisbg2"; } // HERUNDER KOMMER DINE TD's ?> <form action="pris.php" method="post"> <input type="hidden" name="id" value="<?php echo $vis['id']; ?>"> <tr class="<?php echo $class; ?>"> <td class="<?php echo $class; ?>"><center> <input name="navn2" type="text" value="<?php echo $vis["nr"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn3" type="text" value="<?php echo $vis["mal"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn4" type="text" value="<?php echo $vis["antal"]; ?>"> </center></td> <td class"<?php echo $class; ?>"> <input name="navn5" type="text" value="<?php echo $vis["vare"]; ?>"></td> <td class="<?php echo $class; ?>"><center> <?php echo $vis["pr"]; ?> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn7" type="text" value="<?php echo $vis["ekskl"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="navn8" type="text" value="<?php echo $vis["inkl"]; ?>"> </center></td><td><input name="submit" type="submit" class="submit" value="Gem Ændringer"> </form></td> </tr> <?php // SÅ AFSLUTTES TD's } ?> </table> <br> </div> Tror nok det virker efter hensigten :-)
før var det jo WHERE id ='$id'"); kan dette ikke ændres til andet?
Hov... Husk lige din database require "db.php";
Hvad vil du ændre det til ??... det er jo den eneste variabel der ved hvor du er ved at rette noget !!!
smart nok ide hehe .. og det viker os på en måde.. men nu fjerne den alt i felterne igen :(
Hvad mener du med at den fjerner alt ???
i det felt jeg vil rette noget i, der sletter den det bare helt inde i db. i stedet for at ændre det.
Det var jo fordi du stadig ikke havde fået rettet de Name="navn1"... osv osv.. Har lige rettet den og den ER afprøvet på min egen database: <?php require "db.php"; ?> <?php if (isset($_POST['id'])) { mysql_query("UPDATE priser set nr='$_POST[nr]', mal='$_POST[mal]', antal='$_POST[antl]', vare='$_POST[vare]', ekskl='$_POST[ekskl]', inkl='$_POST[inkl]' WHERE id ='$_POST[id]'"); echo "Ændret"; } ?> <div align="center"> <br> <br> <table width="99%" height="14" border="0" cellpadding="0" cellspacing="0"> <tr class="tekst_normal"> <td width="8%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Nr.</div></td> <td width="10%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Mål cm:<font size="1"></font></div></td> <td width="14%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Antal pr. M<font size="1">2</font></div></td> <td width="21%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">Varebeskrivelse:</div></td> <td width="16%" background="../images/cor1.jpg" class="tekst_fed"><div align="center">pr.</div></td> <td width="14%" background="../images/cor1.jpg" class="tekst_fed">Pris ekskl. moms:</td> <td width="17%" background="../images/cor1.jpg" class="tekst_fed">Pris inkl. moms:</td> </tr> <?php $query = mysql_query("SELECT * FROM `priser` ORDER BY `id` LIMIT 0,100") or die (mysql_error()); $i = 0; while($vis = mysql_fetch_array($query)) { $i++; if($i%2 == 1) { $class = "prisbg1"; }else{ $class = "prisbg2"; } // HERUNDER KOMMER DINE TD's ?> <form action="" method="post"> <input type="hidden" name="id" value="<?php echo $vis['id']; ?>"> <tr class="<?php echo $class; ?>"> <td class="<?php echo $class; ?>"><center> <input name="nr" type="text" value="<?php echo $vis["nr"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="mal" type="text" value="<?php echo $vis["mal"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="antl" type="text" value="<?php echo $vis["antal"]; ?>"> </center></td> <td class"<?php echo $class; ?>"> <input name="vare" type="text" value="<?php echo $vis["vare"]; ?>"></td> <td class="<?php echo $class; ?>"><center> <?php echo $vis["pr"]; ?> </center></td> <td class="<?php echo $class; ?>"><center> <input name="ekskl" type="text" value="<?php echo $vis["ekskl"]; ?>"> </center></td> <td class="<?php echo $class; ?>"><center> <input name="inkl" type="text" value="<?php echo $vis["inkl"]; ?>"> </center></td><td><input name="submit" type="submit" class="submit" value="Gem Ændringer"> </form></td> </tr> <?php // SÅ AFSLUTTES TD's } ?> </table> <br> </div>
det var godt nok underligt .. for jeg havde lige gjort det hehe.. men det virker nu !! tusind tak ;D
nu er du øvet.. har du tid til den sidste hehe !!! .. skal nok oprette en ny tråd med 150 points ? :)
Vi tilbyder markedets bedste kurser inden for webudvikling