Toon posts:

[PHP/MySQL] Insert --> Update

Pagina: 1
Acties:
  • 146 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zit/zat met hezelfde problem als de topicstarter van deze post:
[rml][ MySQL][/rml]

Ik loop al twee dagen te zoeken en te proberen 8)7 , totdat ik bij zijn post kwam :)
Ik heb uit deze post zeer nuttige informatie kunnen halen...

Ik heb mijn eigen variabelen in de insertcode van de in de post beschreven manier gestopt en dat werkte:
code:
1
2
3
4
5
6
7
<?
$query = " 
   INSERT INTO 
     cijferlijst (cijfer1,vak) 
   VALUES ('".addslashes ($_POST[cijferinvoer])." ', 
        '".addslashes ($_POST[vakkeuze])."')" or die( "Unable to update database");
?>


Nu wil ik er eigenlijk een update code van maken ... :)
Ik heb al een paar varianten probeerd maar het lukt maar niet ... wie zou mij een kleine duw in de juiste richting willen geven ...

Hij zou zoiets als dit moeten worden ...
code:
1
2
3
<?
$query="UPDATE cijferlijst WHERE vak='$vakkeuze1' SET $cijfer1='$cijferinvoer1'" or die( "Unable to update database");
?>


Iemand een idee?


Voor de duidelijkheid de variabelen worden vanuit een form naar update2.php gestuurd, zoiets als dit:
code:
1
2
3
<form name="form" method="post" action="update2.php">
<input type="text" name="vakkeuze" value="<?=$_POST['vakkeuze']?>">
<input type="submit" name="submit" value="submit">


De gekregen variabelen heb ik vervolgens in $vakkeuze1, $cijfer1 and $cijferinvoer gestopt met deze code:
code:
1
if ( $_POST[cijfer]>0 ) { $cijfer1=$_POST[cijfer];

Ik heb beide varianten (of $vakkeuze1 of $_POST['vakkeuze']) al geprobeerd, maar niks is nog gelukt ... weet iemand meer?

En ja, ik ben moe ... vandaar de slechte opbouw van de post, sorry

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
Tip: echo alles wat maar te echo'en valt aan variabelen en ga vergelijken/ kijken wat er fout gaat...

Ook Knor is aangestoken met het ligfietsvirus!


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Over uw SQL:
Syntax van Update:

code:
1
2
3
UPDATE <tabelnaam>
SET {<kolom>=<waarde>}
WHERE {<kolom>=<waarde>}

<...> = door u in te vullen
{ } = 1 of meer keer herhalen

Dit is iig de syntax die jij zoekt :) Er zijn nog veel meer dingen mogelijk maar die laat ik even buiten beschouwing. Zoek daarvoor even bij de update syntax in de MySQL documentatie.

Over uw formulier script:
PHP:
1
2
3
<form name="form" method="post" action="update2.php">
<input type="text" name="vakkeuze" value="<?=$_POST['vakkeuze']?>">
<input type="submit" name="submit" value="submit">

Ik zie hier niet in hoe $_POST['vakkeuze'] een waarde kan bevatten, behalve als hij naar zichzelf submit, maar dat lijkt me niet in dit geval. Je $_POST['vakkeuze'] is denk ik hartstikke leeg en levert "" op

Over uw vulcode:
PHP:
1
if ( $_POST[cijfer]>0 ) { $cijfer1=$_POST[cijfer]; }

Je kijkt nu of hij groter is dan 0. Iemand kan dus door te kloten met HTTP headers ook een 11, 12, 78585 invoeren :) je moet dus echt controleren of hij ook niet hoger is dan 10. Tevens als je niet zeker weet of hij bestaat, kun je isset( ) gebruiken.

Waarom gebruik je niet overal gewoon $_POST eigenlijk? en wil je het in $cijfer1 zetten?

Verwijderd

je hoeft helemaal geen WHERE in je query te gebruiken, je moet iets doen als:
code:
1
2
3
4
<?
$query="UPDATE cijferlijst SET vak='$vakkeuze1', $cijfer1='$cijferinvoer1'";
mysql_query($query) or die( "Unable to update database");
?>

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Verwijderd schreef op 07 november 2002 @ 02:35:
je hoeft helemaal geen WHERE in je query te gebruiken, ...
Het hoeft niet nee, maar is wel handig tenzij je graag wilt dat alle rows in je tabel dezelfde waarden hebben 8)7

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

PHP:
1
2
3
4
$query = "    
   INSERT INTO cijferlijst (cijfer1,vak)    
   VALUES ('".addslashes ($_POST[cijferinvoer])." ', '".addslashes ($_POST[vakkeuze])."')" 
    or die( "Unable to update database");


Dat lijkt me nog al een kansloze constructie, je voert je query namelijk nergens uit... (hint: mysql_query)

Localhost, sweet localhost


Verwijderd

Topicstarter
Glimi: value="<?=$_POST['vakkeuze']?> bevat wel degelijk de waarde die ingevuld wordt ... dit heeft met een nieuwe versie te maken ... ik had hem eerst op de oude vertrouwde manier, totdat iemand mij daarop wees ... iig hij geeft de waarde goed door.

En idd, het is slim om te kijken om de ingevoerde waarde zich tussen 0 en 10 bevindt ...


kvdveer: het is een gedeelte uit een code ... de query staat er direct onder, maar omdat dat standaard is, heb ik deze weggelaten.


Ik ga direct even naar de tips kijken van o.a. Glimi ... jullie horen of het gelukt is :-)

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

PHP:
1
2
3
4
5
$query="
  UPDATE cijferlijst
  WHERE vak='$vakkeuze1'
  SET $cijfer1='$cijferinvoer1'" //DEZE REGEL
  or die( "Unable to update database");


Hier gaat iets fout bij de regel met het commentaar: Je geeft een integer ($cijfer1) (althans zo komt deze over, zie hier beneden) als kolomnaam van de tabel.
PHP:
1
2
3
4
if ( $_POST[cijfer]>0 )
{
  $cijfer1=$_POST[cijfer];
}

Lijkt me niet echt handig. Ik weet niet wat de kolomnaam is, maar ik had meer zoiets van:
PHP:
1
2
3
4
5
$query="
  UPDATE cijferlijst
  WHERE vak='$vakkeuze1'
  SET cijfer1='$cijfer1'" //dus geen $ voor variabele als naam cijfer1 is en dan ook varabele $cijfer 1 ipv cijferkeuze1, maar dat weet jij alleen beter ;)
  or die( "Unable to update database");


Suc6

Used to be Down Under... Foto gallery


Verwijderd

Topicstarter
Dat is een hele goede opmerking PrinsEdje80 ... door al m'n enthousiastme zat ik eigenlijk meer te slapen dan helder te zijn ... stom zeg ...

De tabel is voor alle duidelijkheid deze:
code:
1
2
3
4
5
6
7
8
9
10
CREATE TABLE cijferlijst (
  Kwartaal int(1) default NULL,
  vak varchar(5) default NULL,
  cijfer1 varchar(4) default NULL,
  cijfer2 varchar(4) default '-',
  cijfer3 varchar(4) default '-',
  cijfer4 varchar(4) default '-',
  Studiepunten char(2) default '-',
  Oordeel varchar(100) default 'Nog niet afgesloten'
)

Data o.a.:
code:
1
INSERT INTO cijferlijst VALUES (1, 'Bekn1', '-', '-', '-', '-', '-', 'Nog niet afgesloten');


Ik heb nu de integer omgezet naar of cijfer1 of cijfer2 of cijfer3 of cijfer4, afhankelijk van de keuze (kolom die men wil updaten):
code:
1
2
if ( $_POST[cijfer] == 1 ) { $cijfer="cijfer1"; }
if ( $_POST[cijfer] == 2 ) { $cijfer="cijfer2"; }

Dat werkt allemaal perfect ...

Ik heb deze updateregel gebruikt ... hij geeft geen fout(niet de regel achter die), maar date ook niks up ... :S
code:
1
2
3
4
5
6
7
8
<?
$query=" 
  UPDATE cijferlijst 
  WHERE vak='$vakkeuze1' 
  SET '$cijfer'='$cijferinvoer1'"
  or die( "Unable to update database");
    $results = mysql_query($query);
?>


Wanneer ik de variabelen $vakkeuze1, $cijfer en $cijferinvoer1 laat afdrukken, geeft hij de juiste variabelen weer onder alle onstandigheden ... zoals
Vakkeuze: Bekn1
Cijferinvoer: 8
Cijfer: cijfer4

Maar als ik ze in de update regel gebruik doen ze niks, hoe kan dat verholpen worden?

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Verwijderd schreef op 07 November 2002 @ 11:07:

Maar als ik ze in de update regel gebruik doen ze niks, hoe kan dat verholpen worden?
En hier is de opmerking van ludohelder van toepassing: je moet de query wel uitvoeren...

Used to be Down Under... Foto gallery


Verwijderd

Topicstarter
De query wordt wel degelijk uitgevoerd, dacht ik zo:
PHP:
1
2
3
4
5
6
7
8
//Execute query

$query=" 
  UPDATE cijferlijst 
  WHERE vak='$vakkeuze1' 
  SET $cijfer1='$cijferinvoer1'" 
  or die( "Unable to update database");
  $results = mysql_query($query);  // deze regel

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Klopt, maar dan zit er iets anders fout, nl.:
PHP:
1
2
3
4
5
$query="
  UPDATE cijferlijst
  WHERE vak='$vakkeuze1'
  SET $cijfer1='$cijferinvoer1'";
  $results = mysql_query($query) or die( "Unable to update database");

En volgens de SQL-school van de w3schools (http://www.w3schools.com/sql/sql_update.asp) moet EERST de SET en dan pas het WHERE-gedeelte... Misschien dat daar de fout ligt.

Used to be Down Under... Foto gallery


Verwijderd

Topicstarter
Hmmz ... dacht ik ook, maar had hem aan de hand van de post van glimmi veranderd ...
Door eerst set en dan pas where uit te voeren doe die gewoon helemaal niks ...
Nu ik weer WHERE weer vóór SET heb staan, zoals aan het begin van deze post, doet die wel iets ...

Nu krijgen we tenminste een error :(
"Unable to update the database"

De fout ligt bijna zeker weten in het schrijven van de variabelen in de update code ...
Ik ben er een jaar tussenuit geweest en sinds ik de nieuwste versie van php heb geïnstalleerd (PHP Version 4.2.2), moet ik werken met $_POST en andere select en insert regels dan ik gewend was ...
De variabelen zijn elke keer goed, maar het probleem ligt bij het stoppen van de variabelen in de insert, select, update line. Nu ben ik er bij insert en select uit, maar bij de update line nog niet ...

Ik heb eerst geprobeerd om steeds 1 variabele erin te stoppen en de rest 'vast' te zetten.
Zoiets als dit dus:
PHP:
1
2
3
4
$query=" 
  UPDATE cijferlijst 
  WHERE vak= '". $vakkeuze1 . "' 
  SET cijfer1=8";


of deze:
PHP:
1
2
3
4
5
$query=" 
  UPDATE cijferlijst 
  WHERE vak= '".addslashes ($_POST[vakkeuze1])." ' 
  SET cijfer1=8"; 
  $results = mysql_query($query) or die( "Unable to update database");


en deze:
PHP:
1
2
3
4
5
$query=" 
  UPDATE cijferlijst 
  WHERE vak= '". vakkeuze1 . "' 
  SET cijfer1=8"; 
  $results = mysql_query($query) or die( "Unable to update database");


Daarna besloot ik om geen variabelen meer in de update line te gebruiken, maar alleen 'vaste' waarden:
PHP:
1
2
3
4
5
$query=" 
  UPDATE cijferlijst 
  WHERE vak= \'Bekn1\' 
  SET cijfer1=8"; 
  $results = mysql_query($query) or die( "Unable to update database");

Deze werkte niet...toen heb ik SET en WHERE omgedraaid"

PHP:
1
2
3
  //Execute query
    $query = 'UPDATE cijferlijst set cijfer1=9 where vak=\'Proj1\'';
    $results = mysql_query($query) or die( "Unable to update database");


Deze doet 't :-)
Maar wanneer ik weet variabelen ga toevoegen, doet die het weer niet :?

Wie weet hoe je variabelen met versie 4.2.2 goed in de update line moet stoppen :?

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Misschien:
PHP:
1
2
3
4
5
$vakkeuze1 = $_POST['vakkeuze1'];
$query=" 
  UPDATE cijferlijst 
  SET cijfer1='8'
  WHERE vak= '". $vakkeuze1 . "';


OF gebruik:!!!
PHP:
1
2
3
$_POST['vakkeuze1']; //je moet single quotes gebruiken
//ipv
$_POST[vakkeuze1]; //let op quotes weg!!

[ Voor 0% gewijzigd door PrinsEdje80 op 07-11-2002 12:06 . Reden: foutje in je php-code ondekt ;) ]

Used to be Down Under... Foto gallery


Verwijderd

Topicstarter
Oké >:) !

Deze code doet 't
PHP:
1
2
3
4
5
6
  //Execute query
    $query=" 
  UPDATE cijferlijst 
  SET cijfer1= '". $cijferinvoer1 . "' 
  WHERE vak= '". $vakkeuze1 . "'";
    $results = mysql_query($query) or die( "Unable to update database");


Nu alleen cijfer1 zien te vervangen door een variabele ...
code:
1
'". $cijfer . "'

werkt nie :p

Ach, ik ga nog even verder prutsen en post het resultaat hier weer :)
maar eerst even werken :)


enne toch eerst SET en dan pas WHERE :P

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 07 november 2002 @ 10:07:
Glimi: value="<?=$_POST['vakkeuze']?> bevat wel degelijk de waarde die ingevuld wordt ... dit heeft met een nieuwe versie te maken ... ik had hem eerst op de oude vertrouwde manier, totdat iemand mij daarop wees ... iig hij geeft de waarde goed door.
Ja ik weet dat $_POST werkt, maar je gaat een variabele posten met dezelfde naam. Dat betekend dat voor die pagina er al een variabele 'vakkeuze' gepost moet zijn. Dat zou dus imho alleen kunnen betekenen dat de boel naar zichzelf gepost wordt. En dan is update2.php een klote naam ;)

  • Expecho
  • Registratie: Januari 2001
  • Laatst online: 29-08 22:14
uhm , waarom gebruik jij een varchar type ipv een unsigned integer (MYSQL tinyint ofzo) om een getal op te slaan?

Verwijderd

Topicstarter
Expecho, omdat er in 5% van de gevallen nog een afkorting achter komt te staan.
Ja, ik weet dat ik er een nieuwe kolom voor zou kunnen maken, maar voor dit geval is het beter om er een varchar van te maken ...

Weet iemand hoe ik 'cijfer1' kan vervangen door een variabele in de update line? '$cijfer' werkt namelijk niet.
Een variabele vboor het invoeren van een 'value/waarde' lukt wel, zoals hierboven is beschreven.
Een variabele voor een kolomnaam lukt niet echt :?

enne glimmi je hebt gelijk, ga hem gelijk ff verbeteren :)

  • Expecho
  • Registratie: Januari 2001
  • Laatst online: 29-08 22:14
je moet de variabele dan tussen dubbel quote's zetten..

dus $query="UPDATE cijferlijst SET cijfer1= ' $cijferinvoer1' WHERE vak= '$vakkeuze1 '";

Verwijderd

Topicstarter
Uiteindelijke code:

$query="
UPDATE cijferlijst
SET ".$cijfer."= '". $cijferinvoer1 . "'
WHERE vak= '". $vakkeuze1 . "'";
$results = mysql_query($query) or die( "Unable to update database");

Iedereen bedankt voor zijn inzet :)
Pagina: 1