[PHP/MySQL] Variabele in querie werkt niet

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ik heb de volgende query:

$query = "SELECT * FROM topics WHERE id=". $id ." ";

Deze werkt wel, alleen hij houdt zich niet aan de variabele. Hij pakt steeds de eerste record uit de topics database. Terwijl wanneer ik echo "$query" doe dit er komt te staan:

SELECT * FROM topics WHERE id=24

Dan zou je toch zeggen dat hij de record pakt waar id = 24 ??

Wat klopt er nou niet, heb al wat rond gekeken op tweakers. Hierdoor al een aantal dingen geprobeert, maar het werkt nog niet!

  • G F0rce 1
  • Registratie: Juli 2003
  • Laatst online: 04-03-2015
code:
1
$query = "SELECT * FROM topics WHERE id=' ". $id ." ' ";


of anders,

code:
1
$query = "SELECT * FROM topics WHERE id=$id"


Lijkt me makelijker :) .

[ Voor 73% gewijzigd door G F0rce 1 op 26-02-2004 14:43 ]

I feel absolutely clean inside, and there is nothing but pure euphoria. - Alexander Shulgin


  • Cartman!
  • Registratie: April 2000
  • Niet online
en als je bijvoorbeeld met SSH inlogd op je server en dan de query uitvoert? is ie dan wel goed?

Of heb je elders in je script de variabele $id op 24 gezet zodat die altijd hetzelfde is?

Verwijderd

Topicstarter
Ze werken beide niet. Hij pakt nog steeds de eerste van de tabel topics. Kan het misschien zijn dat de where statement niet werkt en hij alsnog alle records van de tabel inlaad??

  • Cartman!
  • Registratie: April 2000
  • Niet online
weet je zeker dat je wel een veld id hebt in je tabel dan :?

Verwijderd

Topicstarter
id titel auteur inhoud
23 Rustige betogingen bij Vredespaleis klaas Circa 1500 pro-Israëli's en ongeveer zeshonderd st...
24 Nederland laat EU-geld liggen klaas Staatssecretaris Nicolaï (Europese Zaken) roept zi...

Dit is ff een test tabel, maar zoals je ziet staat die er wel in

  • 418O2
  • Registratie: November 2001
  • Laatst online: 14:41
PHP:
1
2
$sql = "SELECT * FROM topics WHERE id = '$id'";
$result = mysql_query( $sql ) OR DIE ("SQL ERROR : ".mysql_error());

[ Voor 15% gewijzigd door 418O2 op 26-02-2004 14:55 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Kun je niet een stukje omliggende code laten zien? Met name het uitvoeren van de query en het ophalen van de gegevens uit de resultset?

'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.


  • Cartman!
  • Registratie: April 2000
  • Niet online
die single quotes hoeven er niet omheen, tis een integer....
en voor t geval t de topicstarter nietopvalt de $slq moet uiteraard $sql zijn in regel 2 van mn bovenbuurman :)

  • 418O2
  • Registratie: November 2001
  • Laatst online: 14:41
g00fy schreef op 26 februari 2004 @ 14:50:
en voor t geval t de topicstarter nietopvalt de $slq moet uiteraard $sql zijn in regel 2 van mn bovenbuurman :)
O-)

Verwijderd

Topicstarter
Ik heb de sqlerror functie er in gedaan. Deze geeft aan dat de query leeg is. Maar wanneer ik de gegevens aanhaal komen ze wel tevoorschijn. Alleen zijn dit de gegevens van de allereerste record.

Dit is de volledige code

<?
$id=$_GET['id'];

require('functions.php');

$squery = "SELECT * FROM topics WHERE id = $id";
echo "$query";
$result = mysql_query( $query ) OR DIE ("SQL ERROR : ".mysql_error());

echo "$query";

mysql_close();

<body>
<table width="750" height="600" border="1" cellpadding="0" cellspacing="0">
<tr>
<td width="240" height="400" bgcolor="#3333FF"><? include('headlines.php') ?></td>
<td width="20" rowspan="2"> </td>
<td width="490" rowspan="2" bgcolor="#0099FF">
<?

$id2=mysql_result($result,"","id");
$titel=mysql_result($result,"","titel");
$auteur=mysql_result($result,"","auteur");
$inhoud=mysql_result($result,"","inhoud");
?>

<table width="400" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#666666"><? echo "$titel" ?> <? echo "$auteur" ?></td>
</tr>
<tr>
<td bgcolor="#00CCFF"><? echo "$inhoud" ?></td>
</tr>
<tr>
<td height="21" bgcolor="#666666"> </td>
</tr>
</table>


</td>
</tr>
<tr>
<td width="240" height="200" bgcolor="#0033FF"> </td>
</tr>
</table>
</body>
</html>

  • 418O2
  • Registratie: November 2001
  • Laatst online: 14:41
gebruik de [code]
PHP:
1
tags

PHP:
1
2
3
$squery = "SELECT * FROM topics WHERE id = $id";
echo "$query";
$result = mysql_query( $query ) OR DIE ("SQL ERROR : ".mysql_error());


er staat squery ipv query

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

G F0rce 1 schreef op 26 februari 2004 @ 14:42:
code:
1
$query = "SELECT * FROM topics WHERE id=' ". $id ." ' ";


of anders,

code:
1
$query = "SELECT * FROM topics WHERE id=$id"


Lijkt me makelijker :) .
Persoonlijk vind ik beide voorbeelden die jij geeft lelijker dan wat de TS gebruikt.

Je eerste voorbeeld is slecht aangezien je een getal tussen ' gaat zetten. Een getal is een getal en geen string (TS zou echter dit van tevoren wel even moeten controleren vanwege sql-injection attacks ;) ).

Je tweede voorbeeld is meer persoonlijk. Er is echter geen enkel verschil met de regel die de TS gebruikt. Ikzelf geef juist meer de voorkeur aan de notatie van de TS omdat deze duidelijk laat zien wat constante text is en wat een variabele.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

PHP:
1
2
3
$id=$_GET['id'];
//....
$squery = "SELECT * FROM topics WHERE id = $id";

Als ik dit stukje zie denk ik.....*auuuww, sql injection* :)
Lees de PHP-Tiplist van drm aub ff door.
NMe84 schreef op 26 februari 2004 @ 15:03:
offtopic:
Nooit zomaar een invoervar die je van een gebruiker krijgt in je query zetten, deze moet je eerst escapen. Anders krijg je dat mensen gemakkelijk je query kunnen aanpassen door de url te veranderen.
Persoonlijk zou ik het zo doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$id = addslashes( $_GET["id"] );

if( $id == "" || !is_numeric( $id ) ) 
{
     //Geef foutmelding, id is niet geldig
}
else
{
    $sql = "SELECT * FROM topics WHERE id=".$id;
    $record = mysql_query( $sql ) OR die( "Foutje: ".mysql_error() );
    
    if( $record["id"] != "" )
    {
         //Voer de rest van je script uit,
         //nu weet je zeker dat het record bestaat.
    }
}

[ Voor 78% gewijzigd door Verwijderd op 26-02-2004 15:11 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

offtopic:
Nooit zomaar een invoervar die je van een gebruiker krijgt in je query zetten, deze moet je eerst escapen. Anders krijg je dat mensen gemakkelijk je query kunnen aanpassen door de url te veranderen.

'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.


  • Cartman!
  • Registratie: April 2000
  • Niet online
PHP:
1
2
3
$squery = "SELECT * FROM topics WHERE id = $id"; 
echo "$query";
$result = mysql_query( $query ) OR DIE ("SQL ERROR : ".mysql_error());


verander t es naar :

PHP:
1
2
3
$query = "SELECT * FROM topics WHERE id = $id"; 
echo "$query";
$result = mysql_query( $query ) OR DIE ("SQL ERROR : ".mysql_error());

  • 418O2
  • Registratie: November 2001
  • Laatst online: 14:41
als je geen ' voor je vars zet, dan laattie nullen voor je getal weg, althans, dat is mijn ervaring

  • Cartman!
  • Registratie: April 2000
  • Niet online
PHP:
1
2
3
4
5
6
7
8
9
10
$id = $_GET['id'];

$query = "SELECT * FROM topics WHERE id = $id";
$result = mysql_query($query) or die(mysql_error ());
$record = mysql_fetch_assoc($result);
    
$id2 = $result['id'];
$titel = $result['titel'];
$auteur = $result['auteur'];
$inhoud = $result['inhoud'];


zo doe ik t trouwens altijd, vind ik t makkelijkst werken....

en nee, ik heb ff geen rekening gehouden met injection en stripslashes ed. dat mag de topicstarter zelf nog ff opzoeken imo :)

[ Voor 35% gewijzigd door Cartman! op 26-02-2004 15:16 ]

Pagina: 1