[php] script werkt half

Pagina: 1
Acties:
  • 69 views sinds 30-01-2008

  • hugohugohugo
  • Registratie: September 2006
  • Laatst online: 04-11 16:26
hoi hoi..

ik ben ondertussen al redelijk lang bezig om een script te schrijven maar het wil niet echt werken..
hopelijk kunnen jullie mij verhelpen..

mijn scrript:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
$db = mysql_connect("localhost","root","****")
or die ("Kan niet verbinden: ".mysqlerror());

mysql_select_db("sportinstuif",$db);
$sql ="SELECT * FROM inschrijvingen";
$resultaat = mysql_query($sql);


if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
   

    // query samenstellen
    $query="UPDATE inschrijvingen SET 
            Patchkast = '". $_POST["Patchkast"] ."', 
            Patchbay = '". $_POST["Patchbay"] . "', 
            Nr = '". $_POST["Nr"] ."', 
            Lokaal = '". $_POST["Lokaal"] ."', 
            Plaats = '". $_POST["Plaats"] . "',
            Kabelnr = '". $_POST["Kabelnr"] . "',
            Notitie = '". $_POST["Notitie"] . "',
            inschrijvingen_id =" .$_POST["id"];     

    $result = mysql_query($query) or die (mysql_error());
    
    if ($result){
        echo '<p>Gegevens zijn succesvol Bijgewerkt</p>';
        echo "<p>Je wordt binnen 3 seconden door verwezen naar de tabel</p>"; 
        echo "<meta http-equiv='refresh' content='3;url=patchpaneel_bewerk.php'>";   
        echo "<p>Als je niet kan wachten klik dan";
        echo "<a href=\"patchpaneel_bewerk.php\"> hier</a></p>"; 
        }
        

    
}else{
    // pagina heeft zichzelf nog niet aangeroepen, 
    // formulier tonen om gegevens te bewerken
    $query = "SELECT * FROM inschrijvingen WHERE inschrijvingen_id=" .$_GET['id'];  
        $result = mysql_query($sql) or die ("FOUT: ".mysqlerror());


?>
<html>
<head>
        <title>IT</title>
</head>
<body>
<p>Wijzig Gegevens</p>

<?php
// gegevens ophalen en toekennen aan tijdelijke variabelen
while ($rij = mysql_fetch_array($result)){
    $Patchkast = $rij['Patchkast']; 
    $Patchbay = $rij['Patchbay'];
    $Nr = $rij['Nr'];
    $Lokaal = $rij['Lokaal'] ;
    $Plaats = $rij['Plaats']; 
    $Kabelnr = $rij["Kabelnr"]; 
    $Notitie = $rij["Notitie"];
}?>

<table border=1 align=center>
 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" />
            <input type="hidden" name="bevestiging" value="1">
            <input type="hidden" name="id" value="<?php echo($_GET["id"]);?>">

<tr align = center>
<td> Patchkast <input type="text" size="8" name="Patchkast" value="<?php echo $Patchkast; ?>" /></td>
<td> Patchbay <input type="text" size="8" name="Patchbay" value="<?php echo $Patchbay; ?>" /></td>
<td> Nr <input type="text" size="6" name="Nr" value="<?php echo $Nr; ?>" /></td>
<td> Lokaal <input type="text" size="10" name="Lokaal" value="<?php echo $Lokaal; ?>" /></td>
<td> Plaaats<input type="text" size="8" name="Plaats" value="<?php echo $Plaats; ?>" /></td>
<td> Kabelnr<input type="text" size="8" name="Kabelnr"value="<?php echo $Kabelnr; ?>" /></td>
<td> Notitie <input type="text" size="8" name="Notitie" value="<?php echo $Notitie; ?>" /></td>
</table>
<br>
<input type="Submit" value="Wijzigingen opslaan">
<input type="Button" value="Terug" onclick="javascript:history.back();">
</form>




<?php
}
?>
</body>
</html>


ik heb een tabel met een aantal regels. Moment dat ik bij 1 regel bewerken aan klikt gaat die altijd de laatste regel bewerken.. en als ik dan klik op Wijzigingen opslaan krijg ik deze foutmelding:
Duplicate entry 'sdf' for key 2

maar op het moment dat ik maar 1 regel heb werkt het script wel.

Hier is me opbouw van me mysql:
--
-- Tabel structuur voor tabel `inschrijvingen`
--

CREATE TABLE `inschrijvingen` (
`inschrijvingen_id` int(11) NOT NULL auto_increment,
`Patchkast` varchar(10) NOT NULL default '',
`Patchbay` varchar(10) NOT NULL default '',
`Nr` varchar(10) NOT NULL default '',
`Lokaal` varchar(20) NOT NULL default '',
`Plaats` varchar(50) NOT NULL default '',
`Kabelnr` varchar(20) NOT NULL default '',
`Notitie` varchar(100) NOT NULL default '',
PRIMARY KEY (`inschrijvingen_id`),
UNIQUE KEY `Lokaal` (`Lokaal`),
UNIQUE KEY `Patchkast` (`Patchkast`),
UNIQUE KEY `Patchbay` (`Patchbay`),
UNIQUE KEY `Plaats` (`Plaats`),
UNIQUE KEY `Kabelnr` (`Kabelnr`),
UNIQUE KEY `Notitie` (`Notitie`),
UNIQUE KEY `Nr` (`Nr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

hopelijk kan iemand me verhelpen en zeggen wat ik fout doe!

  • b19a
  • Registratie: September 2002
  • Niet online
Je zet alles onder dezelfde variabelenaam. Je zou je velden als volgt moeten noemen:
code:
1
2
<input name="Patchkast[$id]" />
<input name="PatchBy[$id]" />

waarbij je $id natuurlijk wel vervangt ;)

Trouwens, dit is allemaal te lezen in de handleiding

[ Voor 22% gewijzigd door b19a op 03-04-2007 08:59 ]


  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 01-12 12:14
kijk is naar de UPDATE query, als je de mysql handleiding erbij pakt zie je gelijk wat er fout gaat

Verwijderd

Dit gaat nooit werken met al die UNIQUE columns, nu kun je geen inschrijvingen hebben uit dezelfde plaats.

[edit]
Zou wel werken als dit echt de bedoeling is natuurlijk.

[ Voor 27% gewijzigd door Verwijderd op 03-04-2007 09:07 ]


  • MichelvW
  • Registratie: Februari 2004
  • Laatst online: 18-01-2024
Je mist een WHERE bij je update nu update je ALLE rows.

Verder begrijp ik de volgorde in je script ook niet helemaal. De bijwerk output (refresh meta e.d.) komt nu voor je hele
<html>
.....
</html>

Dat gaat denk ik niet in alle browsers goed
.

@DutchTSE
* Dom, ik kijk over de if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) heen.
Blijft dan wel dat het niet netjes is om de <html> en <body> tags over te slaan.

[ Voor 104% gewijzigd door MichelvW op 03-04-2007 09:20 ]


  • DutchTSE
  • Registratie: Februari 2003
  • Niet online
Ik mis een WHERE clausule in je update query :)

edit: zoals hierboven zegt ;)

@ Michel:
Dat 1e deel wordt alleen aangeroepen als er een POST plaats vind, ik zie niet direct in waarom het fout zijn gaan in sommige browsers?

[ Voor 73% gewijzigd door DutchTSE op 03-04-2007 09:07 ]


  • hugohugohugo
  • Registratie: September 2006
  • Laatst online: 04-11 16:26
@ Blackspot
ik heb die UNIQUE toch nodig?! ik verwijs er toch naar dat het uniek moet zijn?! of zit ik echt helemaal fout?

@wolf87
ik zla eens gaan kijken.. is het echt zo erg :S

Verwijderd

hugohugohugo schreef op dinsdag 03 april 2007 @ 09:04:
@ Blackspot
ik heb die UNIQUE toch nodig?! ik verwijs er toch naar dat het uniek moet zijn?! of zit ik echt helemaal fout?
Je mag dan geen gelijke waardes hebben in de database, dus tweemaal de plaatstnaam "Roermond" gaat niet werken elke waarde moet dan uniek zijn. Als dit de bedoeling is dan ben ik weer helemaal stil :+

[ Voor 7% gewijzigd door Verwijderd op 03-04-2007 09:07 ]


  • hugohugohugo
  • Registratie: September 2006
  • Laatst online: 04-11 16:26
@blackspot
hoe zorg ik er dan voor dat ik niet twee maal de zelfde waardes krijg in me mysql..

  • DutchTSE
  • Registratie: Februari 2003
  • Niet online
Verwijderd schreef op dinsdag 03 april 2007 @ 09:07:
[...]

Je mag dan geen gelijke waardes hebben in de database, dus tweemaal de plaatstnaam "Roermond" gaat niet werken elke waarde moet dan uniek zijn. Als dit de bedoeling is dan ben ik weer helemaal stil :+
Lijkt me niet toch? Je inschrijving_id is diegene die uniek moet zijn, de rest niet

(of een combinatie van plaats, adres, familienaam en voorletter (en zelfs dat kan nog fout gaan ;))
hugohugohugo schreef op dinsdag 03 april 2007 @ 09:08:
@blackspot
hoe zorg ik er dan voor dat ik niet twee maal de zelfde waardes krijg in me mysql..
Dat is niet erg, er even vanuit gaande dat er meer dan 1 iemand uit Amsterdam zich mag inschrijven.
Je zet inschrijving_id op unique + auto_increment, dan kun je bij de INSERT quert inschrijving_id leeglaten, die wordt automatisch verhoogd, bij de UPDATE query:

UPDATE blabla WHERE inschrijving_id = $_POST["id"];

[ Voor 33% gewijzigd door DutchTSE op 03-04-2007 09:12 ]


  • Pyrus
  • Registratie: November 2001
  • Laatst online: 00:10

Pyrus

Hardknock life

unique betekent dat alle waarden in die kolom uniek moeten zijn. Dat je dus maar 1 keer 'lokaal 1' in kunt vullen in die tabel, ook al zouden er meer rows moeten zijn om de situatie in lokaal 1 te beschrijven.
Wat jij wil is dat een rij uniek is denk ik, daarvoor moet je de kolommen pakken waarmee je een rij kunt identificeren en van die kolommen de primary key maken (maar niet op unique zetten!)

LinkedIn


Verwijderd

UNIQUE KEY zorgt er toch voor dat je niet tweemaal dezelfde waarde in de database kunt zetten. Dus als je al een row gebruikt met de plaatsnaam "Blaat" en deze nog een keer wil inserten dan krijg je deze error "Duplicate entry 'Blaat' for key 2".

[edit]
Hou ook rekening met SQL injection als je script werkt en hij publiek word.

[ Voor 28% gewijzigd door Verwijderd op 03-04-2007 09:15 ]


  • Pyrus
  • Registratie: November 2001
  • Laatst online: 00:10

Pyrus

Hardknock life

Verwijderd schreef op dinsdag 03 april 2007 @ 09:13:
UNIQUE KEY zorgt er toch voor dat je niet tweemaal dezelfde waarde in de database kunt zetten. Dus als je al een row gebruikt met de plaatsnaam "Blaat" en deze nog een keer wil inserten dan krijg je deze error "Duplicate entry 'Blaat' for key 2".

[edit]
Hou ook rekening met SQL injection als je script werkt en hij publiek word.
Ja en root gebruiken om in te loggen is ook niet heel handig. Als je dan gehackt wordt ofzo ben je gelijk heel erg de sjaak, in tegen stelling tot wanneer je een speciale gebruiker gebruikt, dan ben je maar een beetje de sjaak.

LinkedIn


  • hugohugohugo
  • Registratie: September 2006
  • Laatst online: 04-11 16:26
@pytus
Ik ben het eerst aan het maken.. als ik straks het ga publiceren op internet maar ik wel een andere gebruiker ana bedankt voor de tip!
Dat is niet erg, er even vanuit gaande dat er meer dan 1 iemand uit Amsterdam zich mag inschrijven.
Je zet inschrijving_id op unique + auto_increment, dan kun je bij de INSERT quert inschrijving_id leeglaten, die wordt automatisch verhoogd, bij de UPDATE query:

UPDATE blabla WHERE inschrijving_id = $_POST["id"];
krijg ik niet voor elkaar:
Parse error: syntax error, unexpected T_VARIABLE in c:\program files\e-novative\WAMP\www\it\test5.php on line 43

Verwijderd

dat zou ook moeten zijn:

PHP:
1
$sql = "UPDATE inschrijvingen SET blabla WHERE inschrijving_id=".$_POST["id"];

Of bedoelde je dat niet ?

Het is trouwens niet echt safe om dit zo te doen. Nu kan ik in het formulier de "id" waarde veranderen om rijen te wissen of aan te passen.

[ Voor 50% gewijzigd door Verwijderd op 03-04-2007 09:35 ]


  • hugohugohugo
  • Registratie: September 2006
  • Laatst online: 04-11 16:26
dat werk niet..
en heb ik das al me unieken velden weg gehaald en met inschrijvind_id uniek gemaakt en is dus ook PRIMARY.

ik zie dat phpadmin het volgende uitroepteken meld:
PRIMARY en INDEX sleutels behoren niet beide ingesteld te zijn voor de kolom `inschrijvingen_id`

[ Voor 38% gewijzigd door hugohugohugo op 03-04-2007 09:34 ]


Verwijderd

Wat moet er precies uniek zijn en wat niet ?

Kunnen gebruikers meerdere malen dezelfde plaatsnaam, lokaal of notitie opgeven ?

Bepaal voor jezelf wat echt uniek moet zijn en wat niet.

[edit]
de primary key hoef je niet unique te maken omdat deze dat automatisch al is

[ Voor 18% gewijzigd door Verwijderd op 03-04-2007 09:43 ]


  • hugohugohugo
  • Registratie: September 2006
  • Laatst online: 04-11 16:26
Er moge wel de zelfde namen invullen en notities ect.

Maar ik dacht dat ik persee unieken velden nodig had om te bewerken maar dat ik dus niet zo...

[edit]
moment dat ik dus niet meer uniek heb werkt het script ook niet meer bij 1 regel krijg ik weeer deze fout:
Duplicate entry '9' for key 1 .. :S

[ Voor 34% gewijzigd door hugohugohugo op 03-04-2007 09:48 ]


Verwijderd

Zou je aub je nieuwe script en table willen posten tussen [ php ] tags. Ik heb namelijk geen idee wat jij ziet.

  • hugohugohugo
  • Registratie: September 2006
  • Laatst online: 04-11 16:26
ik heb gen nieuw script..

want
<?php
$sql = "UPDATE inschrijvingen SET blabla WHERE inschrijving_id=".$_POST["id"];
?>

die werkt niet.. dus heb ik dat weer terug veranderd. dus het is het zelfde als helemaal boven aan..

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 01-12 12:14
wat krijg je te zien als output van je script?

en post even de structuur van je table (hoe je die veranderd hebt)

en controleer je code is rond de regels 39 / 40

hierdoor komt het dat je altijd de laatste regel wil bewerken

[ Voor 33% gewijzigd door Wolf87 op 03-04-2007 10:04 ]


Verwijderd

Moet dit zijn:
PHP:
1
2
3
4
5
6
7
8
9
10
    // query samenstellen
    $query="UPDATE inschrijvingen SET 
            Patchkast = '". $_POST["Patchkast"] ."', 
            Patchbay = '". $_POST["Patchbay"] . "', 
            Nr = '". $_POST["Nr"] ."', 
            Lokaal = '". $_POST["Lokaal"] ."', 
            Plaats = '". $_POST["Plaats"] . "',
            Kabelnr = '". $_POST["Kabelnr"] . "',
            Notitie = '". $_POST["Notitie"] . "'
            WHERE inschrijvingen_id =" .$_POST["id"];

Maar dit is allemaal wel heel erg tutorial matriaal.

Tevens kun je INSERT INTO gebruiken om nieuwe rijen toe te voegen.

  • hugohugohugo
  • Registratie: September 2006
  • Laatst online: 04-11 16:26
@blackspot
Bedankt ik had je fout begrepen dus bendankt voor je voorbeeld!
Dat het nogals tutorial matriaal is heb je helemaal gelijk in. ben namelijk nog een beginner en moet ergens beginnen toch :)

@wolf87
ik zal eens gaan kijken wat daar fout aan is want hij gaat nog wel elkekeer naar de laatste regel.
bedankt!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Kom op, hoe een update-statement werkt is écht wel te vinden. Dat nog los van het feit dat je posts als hugohugohugo in "[php] script werkt half" zelf moet kunnen oplossen; syntaxfouten zijn altijd tik- of denkfouten.

Lees gewoon eens de handleiding door en dan voornamelijk de pagina's die gaan over de dingen die je daadwerkelijk gebruikt, want dit is allemaal perfect gedocumenteerd. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.