2012-04-11 9 views
0
DONOR 
donor-nic----username-----status 
111----------ali----------available 
222---------usman--------notavailable 

anderenINSERT oder UPDATE IF-ELSE PHP MYSQL mit

DONATION 
donation_id------donor_nic-----date--- 
1----------------111----------2012/03/04 
2---------------111-----------2012/06/07 
3----------------111---------2012/07/08 
4----------------222---------2012/03/03 

jetzt will ich das Datum aktualisieren, wenn es bereits Exits entsprechenden donor_nic, wenn das Datum nicht nicht existiert i eingefügt werden soll, dass neues Datum,.

Ich benutze diese Abfrage alle Daten holen nach entsprechendem donor_nic

SELECT donor.donor_nic, donation.lastdonationdate 
FROM donor 
JOIN donation ON donor.donor_nic = donation.donor_nic 
WHERE username = 'ali' 
GROUP BY donation.lastdonationdate 

nun diese Abfrage in phpMyAdmin funktioniert .. aber wenn ich dies in meiner Seite verwenden .. es nicht Datum übereinstimmen .. i am passenden Datum wie diese

$sql= SELECT donor.donor_nic, donation.lastdonationdate 
    FROM donor 
    JOIN donation ON donor.donor_nic = donation.donor_nic 
    WHERE username = 'ali' 
    GROUP BY donation.lastdonationdate 

$res=mysql_query($sql, $con); 

if($res == $date) 
{ 
echo "update"; 
} 
else 
{ 
echo "insert"; 
} 

aber diese Sache hat nicht funktioniert .. kann ich in bedingten Fehler mache werden (if-else) statment .. plz mir helfen, was soll ich tun .. dank im Voraus

+0

"Hat nicht funktioniert" ist _never_ eine ausreichende Problembeschreibung. Haben Sie versucht, einen Debugger zu verwenden, um durch Ihren Code zu gehen? –

+0

nein .. ich bin neu in PHP .. ich weiß über "Debugger" .. meine Abfrage ordnungsgemäß läuft in phpmyadmin aber wenn ich meine Seite laufen immer "Update" zurück .. auch wenn ich neues Datum eingeben – maham

Antwort

1

Das Problem ist, dass Ihre $res Variable ein Resultset-Objekt und kein String oder Datumswert ist. Wo haben Sie auch $date definiert?

Wenn Sie ein individuelles Ergebnis aus der Abfrage zu erhalten, verwenden:

$res=mysql_result(mysql_query($sql, $con),0,1); 

Dies wird die zweite Spalte von der ersten Zeile Ihres Ergebnis zurückgeben, (das ist, was die ,0,1 auf dem als Argumente definieren mysql_result Funktion), die ich denke, ist das Datum, das Sie suchen.

Check die Dokumentation für mysql_result:

mysql_query gibt immer einen Array, nicht einen bestimmte Wert. Angenommen, Ihr $date Variabel ist im richtigen Format, sollte das obige funktionieren.

EDIT

Auch müssen Sie die Art und Weise Sie $SQL definieren ändern, setzen Sie Anführungszeichen um es, wie folgt aus:

$sql= "SELECT donor.donor_nic, donation.lastdonationdate 
    FROM donor 
    JOIN donation ON donor.donor_nic = donation.donor_nic 
    WHERE username = 'ali' 
    GROUP BY donation.lastdonationdate"; 
+0

$ sql = SELECT donor.donor_nic, Spende.lastdonationdate aus Spender JOIN Spende donor.donor_nic donation.donor_nic = WHERE username = 'ali' GROUP BY donation.lastdonationdate $ res = mysql_query ($ sql, $ con); if ($ res == $ date) { echo "update"; } sonst { echo "einfügen"; } – maham

+0

ich setzte $ res = mysql_result (mysql_query ($ sql, $ con), 0,1); aber es gibt wieder "update" sogar ich gebe neues Datum ,, und ich habe Variable Datum ... $ date = $ _REQUEST ['lastdonationdate']: :(( – maham

+0

Sie sollten Ihren Code debuggen, setzen Sie 'echo $ res.' - '. $ date; 'in der Zeile nach' $ res = mysql_result (mysql_query ($ sql, $ con), 0,1); 'und es zeigt die zwei Werte, die Sie vergleichen. Sie können auch sehen Sie, wenn Sie die richtigen Daten vom Server bekommen. –

0

Für die Lösung, die ich auf Variablen gesetzt haben - die nic zu testen erneut und das zu testende Datum wird oben im Skript festgelegt. Wurde bearbeitet, wo ich gebraucht habe, aber im Prinzip setzt das Skript auf Variablen (die Sie aktualisieren können, um über Formular oder was auch immer wieder abgerufen zu werden). Dann erstellt die erste MySQL-Abfrage, die ein Array der erforderlichen NIC und Datum zurückgibt. Eine Schleife innerhalb einer Schleife ist erforderlich, um die zurückgegebenen Werte zu erfassen. Die Werte (und Schlüssel) und gespeichert in eigenen Arrays, die wir dann mit unseren vordefinierten Variablen suchen, und Sie werden informiert, wenn das Einfügen/Update erfolgreich war. Offensichtlich erfordert Arbeit, aber erledigt die Arbeit erledigt.

$nic = "111"; 
$date2add = "14/12/13"; 

$sql="SELECT donor.donor-nic, donation.date 
FROM donor 
JOIN donation ON donor.donor-nic = donation.donor-nic 
WHERE username = 'ali' 
GROUP BY donation.date"; 

$res=mysqli_query($mysqli, $sql); 

//may need error checking here to verify that $res has data. 
$row = mysqli_fetch_array($res, MYSQLI_ASSOC); 

//initiate a loop to select values 
while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC)) { 
    //initiate a loop to store values into an array so that we can compare against later. 
foreach ($row as $keys => $val) { 
    echo "<br />$keys...$val<br />"; 
    $keysar[] = $keys; 
    $valsar[] = $val; 
} 
} 


//using values above we will search the $valsar (created in the above loop) for $date2add (the date req. to be searched against) 
if (in_array($date2add, $valsar) == $date2add) { 
$sql = "UPDATE donation SET date = '$date2add' WHERE nic='$nic'"; 
$res = mysqli_query($mysqli, $sql) or trigger_error("Query: $sql\n<br />MySQL Error: " . mysqli_error($mysqli)); 
if ($res) { 
    echo "Record updated correctly<br />"; 
} else { 
    echo "failed to update<br />"; 
} 
} else { 
    //these variables will have to set from somewhere if the script will insert correctly. 
$sql = 'INSERT INTO donation ("$donation_id", "$nic", "$date")'; 
$res = mysqli_query($mysqli, $sql); 
if (mysqli_affected_rows($mysqli) == 1) { 
    echo "it inserted correctly<br />"; 
} else { 
    echo "failed to insert<br />"; 
} 
}