Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

PHP probleem

Pagina: 1
Acties:
  • 318 views

  • Liseso
  • Registratie: Juni 2009
  • Laatst online: 24-03-2023
Hoi,

Ik ben nog niet zo heel lang bezig met php maar loop hier nu tegen een probleem aan.

Ik heb het volgende script gemaakt

<?php
include ('dbconnect.php');


$id = $_GET['id'];

$gry = "SELECT * FROM magazijn WHERE id ='.$id.'";
$row = mysql_fetch_assoc ($qry);


$barcode = $row['barcode'];


echo "$barcode";

$snr = $row['snr'];
$omschijving = $row['omschrijving'];
$aantal = $row['aantal'];
?>
<form action="wijzigen.php" method="post">
<input type="text" name="id" value = "<?php echo ($id); ?>" readonly />
<input type="text" name="barcode" value ="<?php echo ($barcode); ?>" />
<input type="text" name="snr" value = "<?php echo ($snr); ?>" />
<input type="text" name="snr" value = "<?php echo ($aantal); ?>" />
<input type="submit" name="wijzigen" value="Wijzigen" />
</form>

Alles in de dbconnect.php staat goed, aangezien hij wel een overzicht kan geven op een andere pagina, iemand enig idee waarom hij geen enkele waarde laat zijn uit de database en die in txtbox zet? de waarde die in $id zit word namelijk wel weergegeven. ook een echo van een bijv. barcode werkt niet. de variable id haalt hij overgens uit de adres balk.

Alvast bedankt voor jullie reactie!

Groet,

Liseso :)

Knowledge is power


  • SandaX
  • Registratie: November 2003
  • Laatst online: 08:55

SandaX

Nicht Ärgern nur wundern

Zonder het echt inhoudelijk te bekijken zie ik al een vrij essentieële fout in het volgende stukje:

code:
1
2
$gry = "SELECT * FROM magazijn WHERE id ='.$id.'";
$row = mysql_fetch_assoc ($qry);


Je gebruikt 'gry' vs 'qry'

  • spleethoven
  • Registratie: Oktober 2010
  • Laatst online: 24-01-2024
code:
1
$row = mysql_fetch_assoc (mysql_query($gry));

[ Voor 14% gewijzigd door spleethoven op 03-12-2010 14:39 ]


  • DeviaVir
  • Registratie: April 2009
  • Laatst online: 14-06-2023

DeviaVir

Sigma Octanus IV

$gry = "SELECT * FROM magazijn WHERE id ='.$id.'";
$row = mysql_fetch_assoc ($qry);

naar

$qry = MySQL_Query( "SELECT * FROM magazijn WHERE id ='.$id.'" )or die( MySQL_Error() );
$row = mysql_fetch_assoc ($qry);

  • keejoz
  • Registratie: November 2008
  • Laatst online: 26-10 07:33
Lees eerst eens dit door:
Wikipedia: SQL injection

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 29-11 15:58
Je moet eerst nog mysql_query doen. Vervolgens ga je mysql_fetch_assoc doen op de resultaten van die query ( correct me if I'm wrong, ik gebruik de mysql_* functies al heel lang niet meer maar dit is hoe ik het me herinner).

Overigens is een ID die iedereen kan veranderen (want je gebruikt GET) gebruiken in je query zonder eerst mysql_real_escape_string te gebruiken heel slecht. Zoek maar eens op SQL injection.

edit: sjonge, is iedereen me weer voor :P

Overigens zitten er nog wel meer foutjes in. Bij mysql_fetch_assoc() moet er geen spatie tussen de naam van de functie en de parentheses (()) staan. Daarnaast is het bij echo niet nodig om parentheses te gebruiken, je kunt gewoon direct "echo $id" doen (zonder aanhalingstekens).

[ Voor 28% gewijzigd door Avalaxy op 03-12-2010 14:43 ]


  • zwittrooper
  • Registratie: April 2009
  • Laatst online: 23:13
klopt. Je bent mysql_query vergeten in je tekst.
Ik zou ook gaan kijken hoe je injection kan voorkomen.
En natuurlijk mysql_real_escape_string gebruiken om te beginnen.

  • Barleone
  • Registratie: Maart 2009
  • Laatst online: 29-11 17:54
Aan bovenstaande heb ik dit toe te voegen:
Lees voor SQL uitleg dit: Programming FAQ - SQL
en als toevoeging geef ik je http://w3schools.com/sql/
Happy SQL-ing!

[ Voor 17% gewijzigd door Barleone op 03-12-2010 14:44 ]

Tweakers.net 6 nostalgie! - Wayback Machine
Have you tried turning it off and on again?


  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 23-10 07:43

Mike2k

Zone grote vuurbal jonge! BAM!

En als je tegen dit soort problemen aanloopt, gebruik dan een IDE...dat werkt echt een stuk beter...

Bijvoorbeeld: Netbeans zou je in dit geval een melding geven met: Unused local variable...

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 18-11-2024
De PHP documentatie raadplegend kun je zien dat mysql_fetch_assoc geen string als parameter accepteert, enkel een resource: http://nl2.php.net/manual/en/function.mysql-fetch-assoc.php

Jij geeft $qry als parameter door aan mysql_fetch_assoc, dat gaat niet werken. Je moet eerst een SQL query eerst daadwerkelijk uitvoeren alvorens je rijen uit het resultaat kunt gebruiken. Om een query uit te voeren gebruik je mysql_query (aangenomen dat je in dbconnect.php gebruik maakt van mysql_connect, en niet van mysqli_connect). De documentatie over mysql_query (http://nl2.php.net/manual/en/function.mysql-query.php) laat zien dat deze functie een resource teruggeeft, die dus weer door mysql_fetch_assoc te gebruiken is.

Als je dus:
code:
1
$row = mysql_fetch_assoc($qry);

Veranderd in:
code:
1
$row = mysql_fetch_assoc( mysql_query($qry) )


Zou je weer een stap verder moeten zijn. Let wel dat je op dit moment geen enkele fout afvangt in je code. Mocht er dus iets misgaan in de communicatie met je MySQL server, dan krijgt de gebruiker deze rauwe foutmelding ook te zien. Niet heel gebruiksvriendelijk!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 29-11 15:58
Tjoekbezoer schreef op vrijdag 03 december 2010 @ 14:46:
Mocht er dus iets misgaan in de communicatie met je MySQL server, dan krijgt de gebruiker deze rauwe foutmelding ook te zien. Niet heel gebruiksvriendelijk!
Niet te vergeten dat het ook gevaarlijk is. Het is niet handig als mensen direct de namen van tabellen en velden kunnen zien :)

  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 18-11-2024
Avalaxy schreef op vrijdag 03 december 2010 @ 14:48:
Niet te vergeten dat het ook gevaarlijk is. Het is niet handig als mensen direct de namen van tabellen en velden kunnen zien :)
Ook dat nog een keer inderdaad. Zeker in combinatie met het feit dat de waarde van $id ook ongecontroleerd in de query gevoegd, wat een serieus veiligheidsprobleem oplevert.

Ik raad de TS ook aan de link die keejoz geeft eens door te lezen. Niet zo relevant voor knutselprojectjes die je thuis draait, maar als je ooit van plan bent iets op internet te zetten zou ik er zeker een gebruik van maken alles wat je programmeert te controleren op een aantal eenvoudig te voorkomen veiligheidsproblemen.

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:25

MueR

Admin Devschuur® & Discord

is niet lief

Dan voeg ik aan alle bovenstaande kant-en-klaar oplossingen hetvolgende toe:

We zijn hier niet om je code te debuggen. Wanneer je code post willen we graag alleen relevante code, niet je complete script. Een beetje zelfredzaamheid helpt. In essentie is dit een scriptrequest, daar doen we niet aan. Lees ook de Quickstart nog even door.

[ Voor 8% gewijzigd door MueR op 03-12-2010 15:04 ]

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1

Dit topic is gesloten.