[PHP] foreach met if statement

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tweaqer
  • Registratie: November 2002
  • Laatst online: 14-07 20:43
Beste allemaal, ik heb een probleempje met php en ik kom er niet uit. Hopelijk kunnen jullie mij uitleggen waarom het fout gaat. Ik wil namelijk graag een website maken waarbij ik een lijst heb met alle films die ik gezien heb en die wil ik mijn eigen score meegeven. Om deze lijst te maken copy-paste ik de filmnamen uit een tekst bestandje in een html-formulier en die verstuur ik naar onderstaand php-script. Tot zover gaat het goed, maar ik wil voorkomen dat hij films dubbel in de database zet vandaar dat ik hier een check op wil uitvoeren. Echter voert hij de if-functie niet uit. Kijk ik ergens over heen? Wat begrijp ik verkeerd?
Ik hoop dat jullie mij kunnen helpen _/-\o_


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
include("dbconnect.php");
if ($_POST["films"] != "") {
    // filmlijst splitsen per regel
    $films = explode("\n", $_POST['films']);
    foreach ($films as $film) {
        
        // check database of film er al in staat
        $filmcheck = mysql_query("SELECT * FROM films WHERE titel LIKE '$film'");
        $num_rows = mysql_num_rows($filmcheck);
        
        // tijdelijke echo - hier gaat het nog wel goed, bijvoorbeeld: The Matrix = 0 of Away We Go = 1
        echo "$film = $num_rows<br />";

        // maar toch werkt deze if niet
        if ($num_rows = 0) {
                mysql_query("INSERT INTO films (gezien, titel, score)". "VALUES ('nee', '$film', '0')");
                echo "+ $film<br />";
        } 
        
    }
    mysql_close();
}
?>

Acties:
  • 0 Henk 'm!

  • marco_balk
  • Registratie: April 2001
  • Laatst online: 20-06 21:52
PHP:
1
if ($num_rows == 0)


Verder zou je ook eens kijken naar een "INSERT ON DUPLICATE KEY" binnen MySQL.
Dan hoef je niet te checken of de film al bestaat, maar INSERT je gewoon alles, maar komt er geen dubbele records in de DB (mits je KEYS goed staan).

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
PHP:
1
 if ($num_rows = 0) {
PHP:
1
 if ($num_rows == 0) {


Zoek de verschillen. Overigens is dit wel héél basic debugwerk...

[ Voor 35% gewijzigd door RobIII op 29-03-2010 21:03 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
het is ==, niet =

te laat :(

[ Voor 29% gewijzigd door Tharulerz op 29-03-2010 21:02 ]


Acties:
  • 0 Henk 'm!

  • Tweaqer
  • Registratie: November 2002
  • Laatst online: 14-07 20:43
RobIII schreef op maandag 29 maart 2010 @ 21:02:

Zoek de verschillen. Overigens is dit wel héél basic debugwerk...
Je hebt helemaal gelijk, domme fout |:(
marco_balk schreef op maandag 29 maart 2010 @ 21:02:
Verder zou je ook eens kijken naar een "INSERT ON DUPLICATE KEY" binnen MySQL.
Dat is inderdaad een mooie alternatieve oplossing waar ik mij even op ga inlezen :) Thanks ook voor het oplossen van de fout die ik gemaakt heb! _/-\o_

Acties:
  • 0 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 12-09 13:07
een tip voor iedereen die dat soort fouten wel eens maakt met ifjes, keer het statement om, dus niet
PHP:
1
if ($myVar == 0)
maar
PHP:
1
if(0 == $myVar)
in het tweede geval zal php een fout geven aangezien je niet aan een 0 kan assignen omdat het geen variabele is.

Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
marabunta2048 schreef op maandag 29 maart 2010 @ 21:58:
een tip voor iedereen die dat soort fouten wel eens maakt met ifjes, keer het statement om, dus niet
PHP:
1
if ($myVar == 0)
maar
PHP:
1
if(0 == $myVar)
in het tweede geval zal php een fout geven aangezien je niet aan een 0 kan assignen omdat het geen variabele is.
Dat is pas onlogisch programmeren... In je hoofd zeg je toch ook "Als myvar gelijk is aan 0 dan..." en niet "Als 0 gelijk is aan myvar dan..."

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:51

Janoz

Moderator Devschuur®

!litemod

Hoezo? Beiden zijn toch volkomen equivalent? Het is een heel gebruikelijke conding standaard. Je ziet het vooral bij mensen die (vroeger) veel C gedaan hebben, omdat het probleem daar ook al veel voorkwam. (Tegenwoordig geeft de compiler vaak een warning)

Dus ja, je kunt in je hoofd heel goed zeggen "Als constante gelijk is aan variabele, dan..", en het is ook erg handig om dat aan te leren wanneer je in een taal werkt waar een toekenning als resultaat van een booleaanse expressie geinterpreteerd kan worden.

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


Acties:
  • 0 Henk 'm!

  • Rvanlaak
  • Registratie: Juni 2005
  • Laatst online: 10:52
Waarom gebruik je een LIKE statement in je query als je niet eens '%...%' toevoegd? Nu is het een gewone vergelijking. Performance technisch is het vervangen van LIKE door = veel beter.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
performance technisch resulteert het als het goed is in hetzelfde query executie pad.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07 22:34
Gebruik gewoon een goede IDE. Die tekent gewoon een geel kringeltje onder dit soort dubieuze statements en meer. Netbeans bevalt me uitstekend, voor zowel PHP als Java.

@TS: ik neem aan dat dit gestripte voorbeeldcode is? Zo nee, kijk dan uit met SQL injection en andere security-zaken. Ik raad je aan om geen mysql_* functies te gebruiken. Dat is archaïsch. Tegenwoordig is PDO met prepared statements de betere oplossing.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Fuzzillogic schreef op dinsdag 30 maart 2010 @ 00:41:
Tegenwoordig is PDO met prepared statements de betere oplossing.
offtopic:
Ik ben niet zo heel erg thuis in PHP maar PDO of MySQLi? Ik hoor steeds PDO maar wat is er mis met MySQLi (die ook prepared statements kent). Voor het kleine beetje php/mysql werk dat ik heb gedaan heb ik die laatste gebruikt en me dus (nog) nooit verdiept in PDO noch de voor/nadelen. Dat de procedural mysql_* eruit moet ben ik met je eensch. Ik vind hier weinig echt overtuigends tussen staan en PDO schijnt nogal buggy te zijn naar ik verneem her-en-der. Als ik de feature comparison er naast pak heeft MySQLi mijn voorkeur.

[ Voor 23% gewijzigd door RobIII op 30-03-2010 00:51 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07 22:34
Je zegt het zelf al, PDO is veel meer OO-gericht. Voor mij is dat al voldoende om dat te gebruiken ipv mysqli. Buggy.. Mja, het zal vast, maar waar wij het voor gebruiken is dat niet echt een probleem gebleken. En natuurlijk kun je makkelijker van DB switchen dan met mysqli.

Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 22:15
marco_balk schreef op maandag 29 maart 2010 @ 21:02:
PHP:
1
if ($num_rows == 0)


Verder zou je ook eens kijken naar een "INSERT ON DUPLICATE KEY" binnen MySQL.
Dan hoef je niet te checken of de film al bestaat, maar INSERT je gewoon alles, maar komt er geen dubbele records in de DB (mits je KEYS goed staan).
Wat zijn de voor- en nadelen van beide methodes?

Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Waarom gebruik je een LIKE statement in je query als je niet eens '%...%' toevoegd? Nu is het een gewone vergelijking. Performance technisch is het vervangen van LIKE door = veel beter.
performance technisch resulteert het als het goed is in hetzelfde query executie pad.
FWIK gebruikt de LIKE vergelijking *nooit* indexen, dus dat is in dit geval het performanceverschil ;)

日本!🎌


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ook niet als je match-string niet met een wildcard begint? Voor iets als "aap%" zou gewoon een index gebruikt kunnen worden.

.edit: blijkbaar doet MySQL dat ook :Y)

[ Voor 19% gewijzigd door .oisyn op 30-03-2010 02:37 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
.oisyn schreef op dinsdag 30 maart 2010 @ 02:14:
Ook niet als je match-string niet met een wildcard begint? Voor iets als "aap%" zou gewoon een index gebruikt kunnen worden.

.edit: hmm blijkbaar niet dus
Hoezo die edit? :?
The index also can be used for LIKE comparisons if the argument to LIKE is a constant string that does not start with a wildcard character. For example, the following SELECT statements use indexes:
SQL:
1
2
SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';
SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%';

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Omdat ik dom was en een test deed met EXPLAIN op een kolom waar geen index op stond |:(

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
RobIII schreef op dinsdag 30 maart 2010 @ 00:45:
[...]

offtopic:
Ik ben niet zo heel erg thuis in PHP maar PDO of MySQLi? Ik hoor steeds PDO maar wat is er mis met MySQLi (die ook prepared statements kent). Voor het kleine beetje php/mysql werk dat ik heb gedaan heb ik die laatste gebruikt en me dus (nog) nooit verdiept in PDO noch de voor/nadelen. Dat de procedural mysql_* eruit moet ben ik met je eensch. Ik vind hier weinig echt overtuigends tussen staan en PDO schijnt nogal buggy te zijn naar ik verneem her-en-der. Als ik de feature comparison er naast pak heeft MySQLi mijn voorkeur.
Volgens mij heb jij gelijk en is mysqli ook de betere keuze. Ook qua snelheid wint mysqli het van PDO.

Zeker als je dan nog iets gebruikt als Zend_Db uit het Zend Framework, dan is er helemaal geen enkele reden meer om te kiezen voor PDO.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:51

Janoz

Moderator Devschuur®

!litemod

Fuzzillogic schreef op dinsdag 30 maart 2010 @ 00:41:
Gebruik gewoon een goede IDE. Die tekent gewoon een geel kringeltje onder dit soort dubieuze statements en meer. Netbeans bevalt me uitstekend, voor zowel PHP als Java.
Het beginnen met de constante heeft meer voordelen. Wanneer je bijvoorbeeld een equals met een constante hebt is het makkelijker om

"SomeString".equals(stringVar)

te doen. Dit gaat ook goed wanneer stringVar null is. Dat is niet iets wat een IDE zomaar voor je op gaat lossen (Tenzij je een checkstyle-achtige plugin gebruikt die een dergelijke volgorde af gaat dwingen).

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


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Nu online

MueR

Admin Tweakers Discord

is niet lief

* MueR mept de mensjes in rode jasjes.

Dan gooi ik hem wel over de heg.
Webdesign, Markup & Clientside Scripting >> Programming

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1