Wat ik graag zou willen bereiken: Op mijn site kan de admin entries verwijderen uit het gastenboek. Nu zou ik graag hebben dat als zo'n entry verwijderd wordt, het ip ervan wordt opgeslagen in een tabel. Ik heb dus een tabel 'tblGastenboek' en een tabel 'tblBanned'.
Deze query wordt uitgevoerd indien de admin op de delete-link klikt:
Ik zou echter in dit bestand ook nog willen toevoegen dat hij het IP (kolom heet ook zo) uit tblGastenboek in tblBanned (kolom IP) toevoegt.
zoiets dus:
$sql = "SELECT IP FROM tblGastenboek WHERE GastenboekID=" . $_GET['id'] . ";";
$sql = "INSERT INTO tblBanned SET IP='ip ophalen uit vorige sql';";
$sql = "DELETE FROM tblGastenboek WHERE GastenboekID = " . $_GET['id'] . ";";
Zou iemand dit kunnen klaarspelen?
Mijn 2e vraag: is het mogelijk om in je .htaccess de ip-adressen uit de database op te roepen die geblokkeerd moeten worden? of kan je geen php implementeren in je htaccess? iemand raad?
Ik heb in mijn gastenboek nu een extra admin-link 'ban'. met deze link wordt het gastenboekID meegestuurd naar dit script:
<?php
ob_start();
require_once("config/rights.php");
if($_SESSION['level'] == 1) {
$sql = "SELECT IP FROM tblGastenboek WHERE GastenboekID = " . $_GET['id'] . ";";
$result = mysql_query($sql) or die(mysql_error());
$ip = mysql_fetch_array($result);
$sql2 = "INSERT INTO tblBanned SET IP='$ip';";
if(mysql_query($sql2, $link)) {
header("location: gastenboek.php");
} else {
echo mysql_error($link);
}
ob_end_flush();
?>
<?php } ?>
Ik krijg echter in mijn database ipv het IP, gewoon 'array'. Ziet iemand de fout? En hoe kan ik dit beter doen, want de code ziet er helemaal niet uit vind ik :) Maar mijn php-kennis is echter te beperkt om dit beter te scripten. maar ik ben bereid bij te leren van jullie :')
Moderator edit:
Bumpen:
Twee of meer keer achter elkaar in een topic posten heet bumpen.
Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de knop om je tekst aan te passen.
Ik krijg echter in mijn database ipv het IP, gewoon 'array'.
De INSERT-query:
<?
$sql2 = "INSERT INTO tblBanned SET IP='$ip';";
?>
En waar komt $ip vandaan?
<?
$ip = mysql_fetch_array($result);
?>
Tja, wanneer jij de complete array $ip in de query opneemt, dan is het niet zo gek dat je 'array' in de database krijgt...
$ip['IP'] zal een stuk beter werken dan $ip.
Offtopic: Gebruik geen hoofdletters voor tabel- en/of kolomnamen in de database. Dat gaat vroeg of laat fout.
Ik wel best een voorzetje geven, de $ip die niet goed is, maar jij mag gaan uitzoeken hoe het dan wél inelkaar steekt. Ik heb namelijk geen flauw idee wat er bij jou op het beeldscherm staat!
<?
print_r($ip);
?>
Wat levert dit op? Hiermee echo je de array $ip en krijg je exact te zien wat er nu in deze array staat. Vervolgens pak je het juiste element uit deze array en die stop je in de query. Niks moeilijks aan, maar je moet het wel gestructureerd aanpakken.
Dus een array met slechts 1 key, namelijk key 0
<?
$sql2 = "INSERT INTO tblBanned SET IP='$ip[IP]';";
?>
De array $ip met de key IP (die verkeerd is genoteerd, quotes ontbreken).
Dat zijn dus verschillende dingen.
Wanneer je een probleem hebt, moet je dat gestructureerd gaan oplossen. Even overstappen op een andere fetch-functie gaat je echt niet helpen, dat zorgt voor nog meer verwarring, niet doen dus. Maak voor al jouw scripts 1 keuze voor de fetch-functie en ga niet voor de ene query een fetch_assoc gebruiken en voor de andere een fetch_row. Dit gaat gegarandeerd verkeerd.
Ps. De INSERT-query lijkt ook nergens op, dit is geen SQL-standaard. Nu is een standaard niet verplicht, maar voorkomt wel een hoop ellende.
Heb er zelf nooit mee gewerkt, geef dus geen enkele garantie ;)
Is er geen andere manier om dit te doen? server staat nu op php5 (volgens priorweb (=host) toch, en het script werkt nog steeds niet. Ik krijg steeds een internal server error.
[quote='pgFrank schreef op 14.08.2007 16:05']Zie PHP_INFO of PDO wel beschikbaar is (moet worden geactiveerd). Vraag anders de provider even, die weet het ook wel.
phpinfo:
PDO support enabled
PDO drivers mysql
Het script zou dus moeten werken, maar doet het dus niet :/[/quote]