[PHP4 + MySQL3.23] Update met Where = error

Pagina: 1
Acties:

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
Ello ppl,

Ik ben sinds kort op stage, en ik heb hier de opdracht om een CD-ROM database te maken, die vanalles over de CD omschrijft en de plaats in het gebouw aanwijst.
Dit komt in het Intranet te staan voor als mensen een bepaalde CD zoeken.

Maar voordat ik dat ga doen moet ik eerst mijn PHP en SQL skillz wat opvoeren, aangezien ik sinds midden vorige week nog geen letter PHP kon coden :P
Ondertussen heb ik me wat lopen verdiepen in PHP, en ik heb met mijn mede-stagair de complete PHP manual uitgeprint (bad move :P veeeeeeel papier en de printer printte het ongesorteerd :P ).
Daarnaa hebben we een P3-1Ghz PC gepakt die vermeend was gestorven te zijn.
Die hebben we dus even weer leven in geblazen en we hebben er Win2Kpro, Apache 1.3.2, PHP 4.3.2, MySQL 3.23.57 en ActivePerl 5.8.0 op gezet.
dat loopt allemaal als een trein nu, en nu ben ik bezig aan van alles uitproberen in PHP en SQL.
Ik ben dus als testproject een adressenbestand aan het maken.
er zitten 4 delen in, 1 die de hele database laat zien, 1 die je laat zoeken in de database, 1 die je iets laat toevoegen, en 1 die je iets laat wijzigen.

Die laatste levert dus problemen op.
ik laat in een Form op een pagina 4 gegevens invullen.
naam, adres, postcode en plaats.
in de tabel zitten 5 velden per record: id, naam, straat (jah niet bij nagedacht tijdens het creeren van de tabel, zou adres moeten zijn), postcode en plaats.
het ID is de primaire sleutel en is ingesteld op auto-increment, zodat er altijd een nieuw nummer aangewezen wordt als ik een record erbij plaats.

Het wijzigen gaat zo: (zou zo moeten gaan)
Eerst krijg je een pagina met 1 invulveld en een knop "zoek"
je typt een nummer in van een record en drukt op de knop.
Je gaat door naar de volgende pagina en daar wordt aan de hand van het nummer dat je invulde het record weergegeven.
Er onder staat een nieuw Form. Het heeft 4 waardes (alles behalve ID).
Het ID laat ik via een hidden input verder mee sturen naar het volgende document.
Onder het Form staat een waarschuwing "weet je zeker dat je het record wil wijzigen?"en dan 2 knoppen, ja en nee.
als je op Ja klikt, ga je door naar de pagina die dus de eigenlijke bewerking uitvoert.
In dat document gaat het dus mis.

Eerst maakt PHP contact met de database en selecteert die de tabel. Dat gaat gewoon goed.
De variabelen van het Form van de pagina er voor worden in wat makkelijker herkenbare variabelen gestopt ($_POST['naam'] wordt in $var_naam gezet, enz enz)
Dan krijg je dit stukje code:
code:
1
2
3
4
$query = "UPDATE adressen SET naam = '$var_naam', straat = '$var_adres', postcode = '$var_pc', plaats = '$var_plaats' WHERE id = '$var_id')";
$result = mysql_query($query)
  or die($querystatus = "Error while executing query");
}

En daar krijg ik dus een error op terug.
Op school heb ik een beetje SQL gehad (in access) en ik kan er geen fout in ontdekken.
Zie ik nou iets over het hoofd? of kan dit gewoon niet in MySQL en moet ik een andere manier gebruiken?

greetz,

-FireWurX

edit: die error is dus wat ik in het stuk code heb staan.

[ Voor 4% gewijzigd door McKaamos op 28-08-2003 15:03 ]

Iemand een Tina2 in de aanbieding?


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
doe eens een echo van $query, dan weet je wat meer :)
en die mag je hier ook posten ;)

[ Voor 25% gewijzigd door Glimi op 28-08-2003 15:07 ]


Verwijderd

je hebt een haakje staan wat er niet hoort?
code:
1
[...] WHERE id = '$var_id')";

[ Voor 77% gewijzigd door Verwijderd op 28-08-2003 15:11 ]


  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
SF3, ik heb lopen kloten met code, ik had de originele code gecopieert en gecomment, dat haakje hoort daar idd niet, heb ik na de eerste test uit gehaald.
en Glimi, zal ik doen.

edit: nog ff ik ben sinds vanochtend bezig aan de code, en wat ik heb gepost is wat ik om 10 uur ongeveer had.
daarnaa heb ik alleen maar er aan lopen kloten.
ik heb volgens mij alles weer terug gezet naar hoe het toen was, maar ik krijg geen error meer.
editten doettie nogsteeds neit though......
de inhoud van $query:
code:
1
UPDATE adressen SET naam = '5', straat = '6', postcode = '7', plaats = '8' WHERE id = '$var_id'

lijkt alsof hij geen nummer neerzet waar ik wel een variabele neer zet.


edit2:
mogelijk iets niet goed in de code in de vorige pagina, want hij krijgt blijkbaar geen ID nummer door.

[ Voor 72% gewijzigd door McKaamos op 28-08-2003 15:28 ]

Iemand een Tina2 in de aanbieding?


  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 21-08 11:39
probeer eens dit?

de inhoud van $query:
code:
1
UPDATE ... WHERE id = '". $var_id ."'

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Geen quotes rond een numeriek veld zetten.

Echo eens je query, je zal zien dat hij er zo uit ziet:
code:
1
update adressen set naam ='blaat', straat = 'blaat' where id = '1'


Aangezien ID hoogstwaarschijnlijk numeriek is, mag je helemaal geen quotes rond die 1 zetten.

https://fgheysels.github.io/


  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
ik heb mijn query al ge-echo-t

code:
1
UPDATE adressen SET naam = '5', straat = '6', postcode = '7', plaats = '8' WHERE id = '$var_id'

dat IS de inhoud.
alles is ingevuld behalve de $var_id

ik heb even in "mysql.exe" gekeken, en daar staat dat ID een Integere waarde is.
in de zoekqueries enzo vraag ik die op met kwootjes er omheen, en het gaat altijd goed.
maar misschien heb je wel gelijk, wat moet ik er dan aan doen?
variabelen binnen een string waarde moeten volgens mij altijd met enkele kwootjes.

[ Voor 17% gewijzigd door McKaamos op 28-08-2003 15:44 ]

Iemand een Tina2 in de aanbieding?


  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
ik ben ondertussen ook aan het spelen met de code.
ik zal ff c/p-en wat van belang is.

changeform.php:
code:
1
2
  <FORM ACTION="change.php" METHOD="POST" TARGET="main">
   <INPUT TYPE="text" NAME="findid" SIZE="5" MAXLENGTH="11">


change.php:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  <?php
   $var_id = $_POST['findid'];
  ?>
/*
oninteressante Select query die de bij de Id passende record op het scherm zet
*/
   <FORM ACTION="change2.php" METHOD="POST">
   <TABLE>
   <TR><TD>Naam:</TD><TD><INPUT TYPE="text" NAME="name" MAXLENGTH="255" SIZE="20"></TD></TR>
   <TR><TD>Adres:</TD><TD><INPUT TYPE="text" NAME="adres" MAXLENGTH="255" SIZE="20"></TD></TR>
   <TR><TD>Postcode:</TD><TD><INPUT TYPE="text" NAME="postcode" MAXLENGTH="6" SIZE="20"></TD></TR>
   <TR><TD>Plaats:</TD><TD><INPUT TYPE="text" NAME="plaats" MAXLENGTH="255" SIZE="20"></TD></TR>
   </TABLE>
   <FONT COLOR="red"><B>Weet u zeker dat u deze data in de database wil veranderen?</B></FONT><BR>
   <INPUT TYPE="hidden" NAME="idnr" VALUE="$var_id">
   <INPUT TYPE="submit" VALUE=" Ja "> <INPUT TYPE="reset" VALUE="Nee"><BR>
   </FORM>


change2.php:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  <?php
   $var_naam = $_POST['name'];
   $var_adres = $_POST['adres'];
   $var_pc = $_POST['postcode'];
   $var_plaats = $_POST['plaats'];
   $var_id = $_POST['idnr'];
  ?>
/*
oninteressante code
*/
    <?php
       $testtotal = $test1 + $test2 + $test3 + $test4 + $test5;
       if ($testtotal == "0") {print "Correct ingevuld<BR>";
       $query = "UPDATE adressen SET naam = '$var_naam', straat = '$var_adres', postcode = '$var_pc', plaats = '$var_plaats' WHERE id = '$var_id'";
       $result = mysql_query($query)
       or die(print "Error while executing query");
       }
      else {print "Incorrect ingevuld";}
    ?>


nu ik er zo naar kijk... klopt er iets niet in change.php
kan je wel een PHP variabele gebruiken binnen een HTML tag?
code:
1
<INPUT TYPE="hidden" NAME="idnr" VALUE="$var_id">

ik ga dit ff teste met een echo of print....

[ Voor 28% gewijzigd door McKaamos op 28-08-2003 15:52 ]

Iemand een Tina2 in de aanbieding?


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

FireWurX schreef op 28 August 2003 @ 15:42:
ik heb mijn query al ge-echo-t

code:
1
UPDATE adressen SET naam = '5', straat = '6', postcode = '7', plaats = '8' WHERE id = '$var_id'

dat IS de inhoud.
alles is ingevuld behalve de $var_id

ik heb even in "mysql.exe" gekeken, en daar staat dat ID een Integere waarde is.
in de zoekqueries enzo vraag ik die op met kwootjes er omheen, en het gaat altijd goed.
maar misschien heb je wel gelijk, wat moet ik er dan aan doen?
variabelen binnen een string waarde moeten volgens mij altijd met enkele kwootjes.
Je zou ook gewoon kunnen luisteren naar whoami en die enkele quotes weghalen, en dat testen om te kijken of het wel werkt?
code:
1
UPDATE adressen SET naam = '5', straat = '6', postcode = '7', plaats = '8' WHERE id = $var_id

Zo dus.... quotes rond een nummeriek veld in een query is NIET nodig (en bij elk ander database systeem zelfs verboden...).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Topicstarter
ok, het werkt al. het was dus wat ik als laatste aangaf.
heb er nu van gemaakt:
code:
1
<INPUT TYPE="submit" VALUE=" Ja "> <INPUT TYPE="reset" VALUE="Nee"><BR>

credits go to Glimi.
ik had zelf nooit gedacht aan het echo-en van de query....
door hem/haar heb ik gezien dat de $var_id variabele leeg bleef.

Creepy, ik zal wel ff gaan proberen zonder kwootjes.
als dat voor veel databases verboden is, wil ik het mezelf neit verkeerd aanleren....

edit: zonder kwootjes werkt idd ook :) thnx allemaal

edit2: zo, nog ff die non-kwootjes overal doorvoeren, een paar koppen koffie en om 16:30 weer naar huis :)

[ Voor 48% gewijzigd door McKaamos op 28-08-2003 16:09 ]

Iemand een Tina2 in de aanbieding?

Pagina: 1