Waarom werkt het onderstaande stukje code niet:
Ik wil graag dat als iemand een url opgeeft die al bestaat er in de db word gekeken op welk id die url dan staat.PHP Code:
if($url == mysql_result(mysql_query("SELECT url FROM url"), 0)){
$url_id = mysql_result(mysql_query("SELECT id FROM url WHERE id = url"), );
echo'Die url is al een keer verkleind, je kan hem hier vinden:<br />';
echo'
<a href="' . $website_url . $url_id['id'] . '">' . $website_url . $url_id['id'] . '</a><br /><br />
';
}
- Hulp bij een script
-
17-01-2010, 13:22 #1
- Berichten
- 991
- Lid sinds
- 16 Jaar
Hulp bij een script
-
-
17-01-2010, 13:43 #2
- Berichten
- 330
- Lid sinds
- 18 Jaar
PHP Code:<?
$sql_query = mysql_query("SELECT id,url FROM url WHERE url='".mysql_real_escape_string($url)."' LIMIT 1");
if(mysql_num_rows($sql_query) > 0){
$url_id = mysql_fetch_assoc($sql_query);
echo'Die url is al een keer verkleind, je kan hem hier vinden:<br />';
echo'<a href="' . $website_url . $url_id['id'] . '">' . $website_url . $url_id['id'] . '</a><br /><br />
';
}
?>Laatst aangepast door Arjen Rademaker : 17-01-2010 om 14:00
-
17-01-2010, 13:47 #3
- Berichten
- 1.263
- Lid sinds
- 16 Jaar
Beetje vage scripting moet ik zeggen?
Is toch gewoon een gevalletje van mysql_num_rows > 0 ?
-
17-01-2010, 13:51 #4
- Berichten
- 991
- Lid sinds
- 16 Jaar
Zo kan het denk ik ook, maar ik doe het zo.
Waarom is mysql_real_escape_string egenlijk, waarvoor is dat?
Hij geeft een error:
PHP Code:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/virtual/start-plek.nl/htdocs/gamer_website/uwscript/pages/url_verkleinen.php on line 25
-
17-01-2010, 13:53 #5
- Berichten
- 330
- Lid sinds
- 18 Jaar
Dat is tegen sql injecties (http://nl.wikipedia.org/wiki/SQL-injectie) . Altijd gebruiken wanneer je enige vorm van REQUEST uitvoert ($_POST , $_GET, $_REQUEST).
Maar wat bedoel je met "maar ik doe het zo" ? Hier kan je zien dat mysql_result() trager is dan de alternatieven (mysql_fetch_assoc, etc.).
Aanvullend bericht:
PHP Code:$sql_query = mysql_query("SELECT id,url FROM url WHERE url='".mysql_real_escape_string($url)."' LIMIT 1") or die(mysql_error());
Laatst aangepast door Arjen Rademaker : 17-01-2010 om 13:59 Reden: Automatisch samengevoegd.
-
17-01-2010, 14:01 #6
- Berichten
- 991
- Lid sinds
- 16 Jaar
Oke, ik heb dan nog een vraag:
Waarom werkt de onderstaande code wel zonder mysql_real_escape_string en niet met:
PHP Code:mysql_query("INSERT INTO scripts (naam, type, tags, script, ip) VALUES ('" . mysql_real_escape_string($naam) . "', '" . mysql_real_escape_string($type) . "', '" . mysql_real_escape_string($tags) . "', '" . mysql_real_escape_string($script) . "', '" . mysql_real_escape_string($_SERVER['REMOTE_ADDR']) . "')");
-
17-01-2010, 14:05 #7
- Berichten
- 330
- Lid sinds
- 18 Jaar
Gebruik je toevallig een lagere versie van PHP dan 4.3.0 ? Dan moet je mysql_escape_string gebruiken, want voor de rest zie ik weinig oneffenheden in je query.
Zet er eens "or die(mysql_error())" achter en kijk welke foutmelding je krijgt.
-
17-01-2010, 14:38 #8
- Berichten
- 991
- Lid sinds
- 16 Jaar
Hij werkt weer, ik had perongelijk een unique key ingesteld.
Nieuw probleem, door dat gedoe met mysql_real_escape_string() slaat hij nu als ik iets verzend met een ' het zo op:
echo\'hoi\';
Dat wil ik dus niet, ik wil gewoon dat hij het zo opslaat:
echo'hoi';
Ook dat is nu weer opgelost.Laatst aangepast door Tom Heek : 17-01-2010 om 14:44
-
17-01-2010, 16:54 #9
- Berichten
- 330
- Lid sinds
- 18 Jaar
Ja, maar dat is juist een beveiliging dat quotes worden opgeslagen met een backslash ervoor. Wanneer je de gegevens uit de database haalt kan je door middel van:
PHP Code:<?
$var = stripslashes($f['url']);
?>
Edit: Zie nu pas dat het is opgelost :)
-
17-01-2010, 21:33 #10
- Berichten
- 376
- Lid sinds
- 18 Jaar
-
18-01-2010, 10:31 #11
- Berichten
- 330
- Lid sinds
- 18 Jaar
Weet ik veel. Dat is wat de TS wil....
-
18-01-2010, 10:44 #12
- Berichten
- 51
- Lid sinds
- 16 Jaar
Ik weet niet hoe je het hebt opgelost, maar even ter informatie: Het stukje van Arjen klopt niet..
Je slaat de data namelijk nooit op met \ en de functie stripslashes heb je ook nooit nodig om je data weer op te schonen.. Is dat wel het geval dan is het fout...
Slashes in je data worden meestal veroorzaakt door php magic quotes.
Daar hoor je niet afhankelijk van te zijn (gaat ook weg uit php, en zou disabled moeten zijn).
De juiste manier is altijd:
Geen magic quotes (kan met .htacess/ini_set uitgezet worden)
De database funcites ( *_escape_string) gebuiken om de data 'ongevaarlijk' te maken voordat je het gebruikt in een query.
In dat geval worden er ook geen slashes in je data opgeslagen.
-
19-01-2010, 09:24 #13
- Berichten
- 376
- Lid sinds
- 18 Jaar
-
19-01-2010, 09:45 #14
- Berichten
- 330
- Lid sinds
- 18 Jaar
Hij wil waarschijnlijk controleren of een ingevoerde url al in de database voorkomt, waardoor een verkleinde versie van die url niet aangemaakt hoeft te worden.
-
19-01-2010, 10:23 #15
- Berichten
- 376
- Lid sinds
- 18 Jaar
Dat snap ik, maar daarvoor hoef je url niet op te vragen. Als die query een record oplevert, is url sowieso $url (dat is namelijk de WHERE voorwaarde).
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic