Avatar billede LittleNerd Nybegynder
18. november 2014 - 13:46 Der er 6 kommentarer

update function

Hej,

Jeg har nogle problemer med denne her
update function, den gider ikke at update
når jeg beder den om det. :-)
Kan ikke lige se hvad der er galt.

<?php
function update($tabel, $form_data)
{
array_pop($form_data);
$indsend ="";
$kolone ="";
$indhold ="";

foreach ($form_data as $kolone => $indsend)
{
$indhold = $indhold . "$kolone = '".mysql_real_escape_string($indsend)."',";
}

$indhold = substr($indhold, '0', -1);
$update = "UPDATE $tabel SET $indhold WHERE id = $_POST[id]";
mysql_query($update);
}
if(isset($_POST['submit']))
{
update('overskrift','text', $_POST);
header("Location: update.php");
exit;
}

if ($_GET['update'] == true && !empty ($_GET['id']));
{
$query = "SELECT * FROM sites WHERE id=1";
result = mysql_query($query);           
while ($row = mysql_fetch_assoc($result))
{
?>

<form action="" method="POST">
<input name="id" type="hidden" id="id" value="<?php echo $row['id'];?>"/>

<h4>Ret:</h4>
<textarea id="crud_overskrift" name="text" >
<?php echo $row['overskrift'];?></textarea>

<textarea id="crud" name="text" >
<?php echo $row['text'];?></textarea>

<input id="crud_knap" type="submit" title="Klik for at gemme" name="login" value="Gem" />
</form>   

<?php
}
}
?>
Avatar billede michael_stim Ekspert
18. november 2014 - 14:21 #1
Tag din POST variabel med ind i funktionen som en ind-parameter.
Avatar billede olsensweb.dk Ekspert
18. november 2014 - 14:43 #2
tænkte i første omgang på scope regler, men du anvender super globale variabler i din function (dårlig skik)

if ($_GET['update'] == true && !empty ($_GET['id']));  <-- hvad laver det semicolon her ???
{
$query = "SELECT * FROM sites WHERE id=1";
$result = mysql_query($query); <-- du mangler $ foran result


hvorfor anvender du stadig det gamle mysql API ??, du har allerede nu fået en advarsel om at det er forældet og udgår, når nu laver din mysql_connect
http://php.net/mysql_connect
som der står anvend mysqli eller PDO
Avatar billede olsensweb.dk Ekspert
18. november 2014 - 14:57 #3
prøv at tælle antal parameter til functionen

3 parameter
update('overskrift', 'text', $_POST);

2 parameter
function update($tabel, $form_data) {
Avatar billede Slater Ekspert
18. november 2014 - 18:25 #4
Endnu engang er man lige nødt til at nævne, at det er pivåbent for injections. Du må aldrig nogensinde bruge variabler som brugere har mulighed for at manipulere direkte i SQL. De skal renses eller bruges som parametre i en prepared statement, ellers er det kun et spørgsmål om (kort) tid før alle dine data er væk.
Avatar billede tobrukDk Novice
18. november 2014 - 20:02 #5
Hej

Jeg vil anbefale dig at se dette indlæg med vores kære olebole som forklare dig omkring Mysqli; http://www.eksperten.dk/guide/1480

i stedet for at skrive SELECT * FROM..... så vil jeg sige hvilke nogle jeg skal have fat i fordi så spare du også på MB/Kbs mv,
Avatar billede olsensweb.dk Ekspert
21. november 2014 - 15:16 #6
hvilke af felterne tror du der kommer til databasen ??
<textarea id="crud_overskrift" name="text" ><?php echo $row['overskrift'];?></textarea>
<textarea id="crud" name="text" ><?php echo $row['text'];?></textarea>

bække felter hedder det sammen,så det vil være den sidst sendte, jeg tror den øverste skulle hedde overskrift

hvad hedder det felt du tester på her ??
if (isset($_POST['submit'])) {
du har ikke nogle felter med name submit
jeg vil forslå at teste på text eller overskrift
if (isset($_POST['overskrift'])) {


hvad tabel er det du skal opdaterer ??
update('overskrift','text', $_POST);
jeg tror ikke du har en tabel der hedder overskrift eller text
gætter på der skal stå sites
update('sites', $_POST);


jeg tror ikke det går godt at opdaterer din primære nøgle (id)

istedet for at bruge Prepared Statements til validering, som foreslået kunne du anvende gump
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

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