inbox script help!

Status
Niet open voor verdere reacties.

hawkins

Gebruiker
Lid geworden
18 jun 2009
Berichten
57
Help!!

Ik heb hier een script om berichten te traceren maar hij werkt niet, hij zegt steets dat er geen berichten zijn terwijl er gewoon berichten in de database zitten voor die persoon.

mijn script:
PHP:
<?php
include("config.php");



$ip = ($_SERVER['REMOTE_ADDR']);
$result = "SELECT * FROM `users` WHERE `ip` = '".$ip."'";
$result1 = "SELECT to FROM `mail` WHERE `to` = '".$result."'";
$t = mysql_query($result) OR DIE (mysql_error());
$row = mysql_fetch_assoc($t);




if($row['username'] == $result1){
echo"Je hebt berichten in je inbox.";
}
elseif($row['username'] != $row1['username']){
echo"Er zijn geen berichten gevonden.";
}
?>

Weet iemand hoe dit script wel moet
 
Eh, je zet nu query 1 in query 2 en je voert alleen query 1 uit.. Daar zit het probleem.
 
@hawkins, als je m'n sig gelezen had, wist je dat ik vragen over de mail niet kan waarderen. Ik kijk hier dagelijks meermalen de fora door voor interessante topics en ik was je topic zeker wel tegengekomen.

Wat SvU zegt is inderdaad je fout, je zult de query eerst moeten uitvoeren, dan het juiste veld eruit halen (gebruikersnaam of id) en dat in de tweede query plakken.

Daarnaast kan dit ook niet:

PHP:
if($row['username'] == $result1){

Je kijkt of de gebruikersnaam gelijk is aan de string "SELECT to FROM `mail` WHERE {etc.} ".
 
Je kunt het ook met JOIN doen, maar dat gaat wellicht nu nog iets te ver.

Daarnaast is het mensen identificeren aan de hand van hun ip-adres ook ietwat bedenkelijk.
 
?

Hoe kan ik dan zorgen dat beide query's werken met elkaar?
 
We kunnen hier wel je hele script gaan uitschrijven, maar weet je hoe je normaal gesproken resultaten uit de database ophaalt? Hoe je deze fatsoenlijk naar een array fetcht? Hoe je strings aan elkaar koppelt? Als je die drie dingen weet, dan zie ik eigenlijk het probleem niet...
 
Ik heb nu :

PHP:
<?php
include("config.php");

if(isset($_POST['trace'])) {

 
$ip = ($_SERVER['REMOTE_ADDR']);
$result = "SELECT * FROM `users` WHERE `ip` = '".$ip."'";
$result1 = "SELECT * FROM `mail` WHERE `to` = '".$result."'";
$t = mysql_query($result) OR DIE (mysql_error());
$t1 = mysql_query($result1) OR DIE (mysql_error());
$row = mysql_fetch_assoc($t);
$row1 = mysql_fetch_assoc($t1);
 
 
 
if($row['username'] == $row1['to']){
echo"Je hebt berichten in je inbox.";
}
elseif($row['username'] != $row1['to']){
echo"Er zijn geen berichten gevonden.";
}
}
?>


dan krijg ik als error:


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MY IP'' at line 1
 
Je maakt nu nog steeds dezelfde fout als eerst. Je plakt gewoon de hele eerste query in de tweede. Je probeert dan de volgende query uit te voeren:

[SQL]
SELECT * FROM `mail` WHERE `to` = 'SELECT * FROM `users` WHERE `ip` = '{$ip}''"
[/SQL]

Ik zal een stappenplan voor je schrijven.

1. Je slaat het ip op in een variabele (check)
2. Je stelt een query samen waarmee je een uniek gegeven voor die gebruiker uit de DB haalt (check)
3. Je voert de query uit.
4. Je stelt een array samen met de resultaten.
5. Uit die array sla je het unieke gegeven op in een variabele.
6. Je bouwt een tweede query waarmee je de desbetreffende berichten uit de DB haalt en plaatst het unieke gegeven in de WHERE-clause
7. Je voert de query uit
8. Met mysql_num_rows kijk je of je resultaten terug hebt gekregen
9. Middels een WHILE-loop geef je de berichten weer.

En zoals SvU zegt, het is inderdaad niet heel erg verstandig om mensen aan de hand van hun IP te identificeren. Denk aan mensen waarvan het IP nog wel eens veranderd, mensen die op een andere PC werken, etc. Die zouden dan allemaal hun berichten niet kunnen lezen.
 
Laatst bewerkt:
Het lukt me nog steeds niet aangezien ik pas ben begonnen met php ik heb nu

PHP:
<?php
include("config.php");
 
if(isset($_POST['trace'])) {
 
 
$ip = ($_SERVER['REMOTE_ADDR']);
$result2 = "SELECT * FROM `mail` WHERE `to` = 'SELECT * FROM `users` WHERE `ip` = '{$ip}''";
$result1 = mysql_fetch_array($result2); 


while($row = mysql_num_rows($result1))


if($row['username'] == $row1['to']){
echo"Je hebt berichten in je inbox.";
}
elseif($row['username'] != $row1['to']){
echo"Er zijn geen berichten gevonden.";
}
else{
echo"Er is een fout opgetreden.";
}
}
?>

ik snap het nog niet met die arrays enzo..
 
Nou, aangezien ik denk dat we er zo niet uit komen, zal ik het script voor je schrijven en uitgebreid van commentaar voorzien ;)

PHP:
<?php
include( "config.php" );

// Kijken of een formulier vertuurd is doe je op deze manier
if( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' ) { 

// Je slaat het IP op.
$ip = $_SERVER[ 'REMOTE_ADDR' ];

// Je stelt een query op om een uniek veld op te halen van de gebruik aan de hand van het ip
$query = "SELECT * FROM `users` WHERE `ip` = '".$ip."'";

// Je voert de query uit en slaat het resultaat op:
$result = mysql_query ( $result );

// Haal de gegevens uit de resource en zet ze in een array. Er komt als het goed is maar 1 resultaat terug, dus je hoeft hier geen loop te gebruiken. 
$row = mysql_fetch_assoc ( $result );

// Je slaat het unieke kenmerk op (vervang hieronder veldnaam door de naam van het veld dat overeenkomt met 'to' in de volgende query
$ID = $row[ 'veldnaam' ];

// Nu schrijven we een query die de berichten ophaalt aan de hand van het unieke kenmerk
$query2 = "SELECT * FROM `mail` WHERE `to` = '" . $ID . "'";

// Voer ook deze query uit en sla het resultaat op
$result2 = mysql_query( $query2 );

// Kijk nu of er records gevonden zijn
if ( mysql_num_rows ( $result2 ) > 0 ) {
  while ( $bericht = mysql_fetch_assoc ( $result2 ) ) {
    // doe hier met je berichten wat je wilt.
  }
} else {
  echo 'Er zijn geen berichten gevonden.';
}

Trouwens, als je net met PHP begonnen bent, is dit misschien wel een tikkeltje te hoog gegrepen. Ik begrijp het wel, ik begon ook gelijk met iets vrij ingewikkelds (liep op niets uit), maar het is makkelijk om het in (kleine) stapjes te doen, dan meteen een mail systeem te maken.
 
Laatst bewerkt:
Bedankt, hij werkt nu!

Je had alleen 1 ding fout

Je had:
PHP:
$result = mysql_query ($result);
Het moet zijn:
PHP:
$result = mysql_query ($query);

Maar voor de rest is het goed en de mensen identificeren via ip kan gewoon ik heb namelijk als er wordt ingelogd dat het ip wordt vernieuwd in de database.
 
Klopt, dat was mijn fout.

Dan nog is het onhandig, want als mensen inloggen heb je als het goed is al een gebruikersnaam of ID dat je kunt gebruiken. Het IP hiervoor gebruiken (ook al wordt het vernieuwd) is volkomen zinloos.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan